diff --git a/video/dfd-fcg/model_code/configs/robustness/CC(3).yaml b/video/dfd-fcg/model_code/configs/robustness/CC(3).yaml deleted file mode 100644 index 9f75ef937ccb538935c9ee5b6389bdfd461d7c11..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/CC(3).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/CC/3/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/CC(4).yaml b/video/dfd-fcg/model_code/configs/robustness/CC(4).yaml deleted file mode 100644 index 37df333768cd8bd3b11cc6c349b909b2904b4f3f..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/CC(4).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/CC/4/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/CC(5).yaml b/video/dfd-fcg/model_code/configs/robustness/CC(5).yaml deleted file mode 100644 index f0cc908407ee70d3c2ef4efd03824d98b5dea068..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/CC(5).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/CC/5/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/CS(1).yaml b/video/dfd-fcg/model_code/configs/robustness/CS(1).yaml deleted file mode 100644 index 8befe836ce3dda5e0dd899b3524181371f3622f9..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/CS(1).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/CS/1/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/CS(2).yaml b/video/dfd-fcg/model_code/configs/robustness/CS(2).yaml deleted file mode 100644 index dcec3c637add6038f8985d2772655b8b27e4de38..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/CS(2).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/CS/2/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/CS(3).yaml b/video/dfd-fcg/model_code/configs/robustness/CS(3).yaml deleted file mode 100644 index 64d3c685156c690663352cbfd3479c1e1d3dc8cf..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/CS(3).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/CS/3/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/CS(4).yaml b/video/dfd-fcg/model_code/configs/robustness/CS(4).yaml deleted file mode 100644 index 23297f48350c3a0273d59f82aa87367dd1b0369d..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/CS(4).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/CS/4/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/CS(5).yaml b/video/dfd-fcg/model_code/configs/robustness/CS(5).yaml deleted file mode 100644 index 380ca46268191956a15bd6ae31976138c89da577..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/CS(5).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/CS/5/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/GB(1).yaml b/video/dfd-fcg/model_code/configs/robustness/GB(1).yaml deleted file mode 100644 index e943d51ef71c9d5d116a4d611b5b43adba48166f..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/GB(1).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/GB/1/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/GB(2).yaml b/video/dfd-fcg/model_code/configs/robustness/GB(2).yaml deleted file mode 100644 index 04bad5c6b8ec045888b5cd0795fff8fa0fe16a68..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/GB(2).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/GB/2/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/GB(3).yaml b/video/dfd-fcg/model_code/configs/robustness/GB(3).yaml deleted file mode 100644 index 504265a055ef1e619b36f65e97306932cbdca842..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/GB(3).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/GB/3/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/GB(4).yaml b/video/dfd-fcg/model_code/configs/robustness/GB(4).yaml deleted file mode 100644 index 6e1f1ac89024dd82bbd92708f578b0e2c984d54d..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/GB(4).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/GB/4/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/GB(5).yaml b/video/dfd-fcg/model_code/configs/robustness/GB(5).yaml deleted file mode 100644 index 7ef6ab58d17150e70cb230ff303dac265cb6bb17..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/GB(5).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/GB/5/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/GNC(1).yaml b/video/dfd-fcg/model_code/configs/robustness/GNC(1).yaml deleted file mode 100644 index 0ee338206c5fd4f508aedd7f29e48bb1ae776c74..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/GNC(1).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/GNC/1/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/GNC(2).yaml b/video/dfd-fcg/model_code/configs/robustness/GNC(2).yaml deleted file mode 100644 index 6c7f598e7814032e89d3561094d0a0a625d68aea..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/GNC(2).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/GNC/2/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/GNC(3).yaml b/video/dfd-fcg/model_code/configs/robustness/GNC(3).yaml deleted file mode 100644 index 0aa872909067c8a5abcf5093e5ca178550004bbe..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/GNC(3).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/GNC/3/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/GNC(4).yaml b/video/dfd-fcg/model_code/configs/robustness/GNC(4).yaml deleted file mode 100644 index f18c8911e433b27cac7754a7236615c49095cd69..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/GNC(4).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/GNC/4/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/GNC(5).yaml b/video/dfd-fcg/model_code/configs/robustness/GNC(5).yaml deleted file mode 100644 index eff0dbcb21468b2376a99194e7a99a4bb40baf92..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/GNC(5).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/GNC/5/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/JPEG(1).yaml b/video/dfd-fcg/model_code/configs/robustness/JPEG(1).yaml deleted file mode 100644 index 34df961d124571eb2d53eed34479e76f75108f3e..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/JPEG(1).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/JPEG/1/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/JPEG(2).yaml b/video/dfd-fcg/model_code/configs/robustness/JPEG(2).yaml deleted file mode 100644 index d2e41669b281955be72fdeb9df3990454528c9f5..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/JPEG(2).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/JPEG/2/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/JPEG(3).yaml b/video/dfd-fcg/model_code/configs/robustness/JPEG(3).yaml deleted file mode 100644 index 7f712441e237f14d3dac4dd3d219394bf984da1e..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/JPEG(3).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/JPEG/3/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/JPEG(4).yaml b/video/dfd-fcg/model_code/configs/robustness/JPEG(4).yaml deleted file mode 100644 index 390c3ab57d45a0a58e42f2b47caa13843757f239..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/JPEG(4).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/JPEG/4/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/JPEG(5).yaml b/video/dfd-fcg/model_code/configs/robustness/JPEG(5).yaml deleted file mode 100644 index c00b4333e1c58650459a0f6fd3346cf78fc1c6d5..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/JPEG(5).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/JPEG/5/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/VC(1).yaml b/video/dfd-fcg/model_code/configs/robustness/VC(1).yaml deleted file mode 100644 index 5068a29747572c63897cf4b669ed8bc662ee1bc9..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/VC(1).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/VC/1/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/VC(2).yaml b/video/dfd-fcg/model_code/configs/robustness/VC(2).yaml deleted file mode 100644 index 482b48c2ad05e23d981c48b6f9d71f91d70f2625..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/VC(2).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/VC/2/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/VC(3).yaml b/video/dfd-fcg/model_code/configs/robustness/VC(3).yaml deleted file mode 100644 index 46080156a6d814d8f7ef22304fca0ec5fe8b9949..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/VC(3).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/VC/3/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/VC(4).yaml b/video/dfd-fcg/model_code/configs/robustness/VC(4).yaml deleted file mode 100644 index 1323f3ca40022ca22fdbc0aa6cbf1f75345f91da..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/VC(4).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/VC/4/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/robustness/VC(5).yaml b/video/dfd-fcg/model_code/configs/robustness/VC(5).yaml deleted file mode 100644 index da4cc376c35e315617b7c18111148411383ef770..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/robustness/VC(5).yaml +++ /dev/null @@ -1,14 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/VC/5/' - vid_ext: .avi diff --git a/video/dfd-fcg/model_code/configs/scenario/LOO/DF.yaml b/video/dfd-fcg/model_code/configs/scenario/LOO/DF.yaml deleted file mode 100755 index 3066eaf16ed4679f957c5df83e69b69f7bc5cf1e..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/scenario/LOO/DF.yaml +++ /dev/null @@ -1,32 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - train_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - batch_size: 30 - df_types: ['REAL','FS','F2F','NT'] - compressions: ['c23'] - strategy: FORCE_PAIR - augmentations: - - NORMAL - - VIDEO - - VIDEO_RRC - - FRAME - force_random_speed: null - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 3 - val_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','NT','FS','F2F'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 1 \ No newline at end of file diff --git a/video/dfd-fcg/model_code/configs/scenario/LOO/F2F.yaml b/video/dfd-fcg/model_code/configs/scenario/LOO/F2F.yaml deleted file mode 100755 index e16cf54b03388ab26d4c95583c6465ba6cc24d8a..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/scenario/LOO/F2F.yaml +++ /dev/null @@ -1,32 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - train_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - batch_size: 30 - df_types: ['REAL','DF','FS','NT'] - compressions: ['c23'] - strategy: FORCE_PAIR - augmentations: - - NORMAL - - VIDEO - - VIDEO_RRC - - FRAME - force_random_speed: null - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 3 - val_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 1 \ No newline at end of file diff --git a/video/dfd-fcg/model_code/configs/scenario/LOO/FS.yaml b/video/dfd-fcg/model_code/configs/scenario/LOO/FS.yaml deleted file mode 100755 index 4bf5fad5be1c1b8dbc9948dcd79195b10ede94de..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/scenario/LOO/FS.yaml +++ /dev/null @@ -1,32 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - train_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - batch_size: 30 - df_types: ['REAL','DF','F2F','NT'] - compressions: ['c23'] - strategy: FORCE_PAIR - augmentations: - - NORMAL - - VIDEO - - VIDEO_RRC - - FRAME - force_random_speed: null - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 3 - val_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 1 \ No newline at end of file diff --git a/video/dfd-fcg/model_code/configs/scenario/LOO/NT.yaml b/video/dfd-fcg/model_code/configs/scenario/LOO/NT.yaml deleted file mode 100755 index 7dcd5d9abfdfdc79f979bdfdea9f8d5bc7a5766c..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/scenario/LOO/NT.yaml +++ /dev/null @@ -1,32 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - train_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - batch_size: 30 - df_types: ['REAL','DF','FS','F2F'] - compressions: ['c23'] - strategy: FORCE_PAIR - augmentations: - - NORMAL - - VIDEO - - VIDEO_RRC - - FRAME - force_random_speed: null - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 3 - val_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 1 \ No newline at end of file diff --git a/video/dfd-fcg/model_code/configs/scenario/compression/c40.yaml b/video/dfd-fcg/model_code/configs/scenario/compression/c40.yaml deleted file mode 100755 index a77223236690d4e4b6633fafa8f6ceb72e7bbd20..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/scenario/compression/c40.yaml +++ /dev/null @@ -1,55 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - batch_size: 20 - num_workers: 4 - clip_duration: 3 - num_frames: 10 - train_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - batch_size: 30 - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c40'] - strategy: FORCE_PAIR - augmentations: - - NORMAL - - VIDEO - - VIDEO_RRC - - FRAME - force_random_speed: null - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 3 - val_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c40'] - strategy: NORMAL - augmentations: - - NONE - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 1 - - class_path: src.dataset.cdf.CDFDataModule - init_args: - data_dir: 'datasets/cdf/' - vid_ext: '.avi' - pack: false - max_clips: 1 - - class_path: src.dataset.dfdc.DFDCDataModule - init_args: - data_dir: 'datasets/dfdc/' - vid_ext: '.avi' - pack: false - max_clips: 1 - - class_path: src.dataset.fsh.FShDataModule - init_args: - compressions: ['c40'] - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 1 \ No newline at end of file diff --git a/video/dfd-fcg/model_code/configs/scenario/compression/raw.yaml b/video/dfd-fcg/model_code/configs/scenario/compression/raw.yaml deleted file mode 100755 index 9d54564f5a885f7c4b9532f10fb87732425d3ecc..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/scenario/compression/raw.yaml +++ /dev/null @@ -1,55 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - batch_size: 20 - num_workers: 4 - clip_duration: 3 - num_frames: 10 - train_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - batch_size: 30 - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['raw'] - strategy: FORCE_PAIR - augmentations: - - NORMAL - - VIDEO - - VIDEO_RRC - - FRAME - force_random_speed: null - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 3 - val_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['raw'] - strategy: NORMAL - augmentations: - - NONE - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 1 - - class_path: src.dataset.cdf.CDFDataModule - init_args: - data_dir: 'datasets/cdf/' - vid_ext: '.avi' - pack: false - max_clips: 1 - - class_path: src.dataset.dfdc.DFDCDataModule - init_args: - data_dir: 'datasets/dfdc/' - vid_ext: '.avi' - pack: false - max_clips: 1 - - class_path: src.dataset.fsh.FShDataModule - init_args: - compressions: ['raw'] - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 1 \ No newline at end of file diff --git a/video/dfd-fcg/model_code/configs/scenario/partial/10.yaml b/video/dfd-fcg/model_code/configs/scenario/partial/10.yaml deleted file mode 100755 index fcd76edb569307639d65da35dcfa4e7e8c7b709e..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/scenario/partial/10.yaml +++ /dev/null @@ -1,56 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - batch_size: 20 - num_workers: 4 - clip_duration: 3 - num_frames: 10 - train_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - batch_size: 30 - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: FORCE_PAIR - augmentations: - - NORMAL - - VIDEO - - VIDEO_RRC - - FRAME - force_random_speed: null - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - ratio: 0.1 - max_clips: 3 - val_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 1 - - class_path: src.dataset.cdf.CDFDataModule - init_args: - data_dir: 'datasets/cdf/' - vid_ext: '.avi' - pack: false - max_clips: 1 - - class_path: src.dataset.dfdc.DFDCDataModule - init_args: - data_dir: 'datasets/dfdc/' - vid_ext: '.avi' - pack: false - max_clips: 1 - - class_path: src.dataset.fsh.FShDataModule - init_args: - compressions: ['c23'] - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 1 \ No newline at end of file diff --git a/video/dfd-fcg/model_code/configs/scenario/partial/25.yaml b/video/dfd-fcg/model_code/configs/scenario/partial/25.yaml deleted file mode 100755 index b83215271c4d143422ea5769b3c71fc8ae42f39c..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/scenario/partial/25.yaml +++ /dev/null @@ -1,56 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - batch_size: 20 - num_workers: 4 - clip_duration: 3 - num_frames: 10 - train_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - batch_size: 30 - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: FORCE_PAIR - augmentations: - - NORMAL - - VIDEO - - VIDEO_RRC - - FRAME - force_random_speed: null - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - ratio: 0.25 - max_clips: 3 - val_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 1 - - class_path: src.dataset.cdf.CDFDataModule - init_args: - data_dir: 'datasets/cdf/' - vid_ext: '.avi' - pack: false - max_clips: 1 - - class_path: src.dataset.dfdc.DFDCDataModule - init_args: - data_dir: 'datasets/dfdc/' - vid_ext: '.avi' - pack: false - max_clips: 1 - - class_path: src.dataset.fsh.FShDataModule - init_args: - compressions: ['c23'] - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 1 \ No newline at end of file diff --git a/video/dfd-fcg/model_code/configs/scenario/partial/50.yaml b/video/dfd-fcg/model_code/configs/scenario/partial/50.yaml deleted file mode 100755 index 935664fbe1b1b3fbf87ba0d0edcbd3e8331d524d..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/scenario/partial/50.yaml +++ /dev/null @@ -1,56 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - batch_size: 20 - num_workers: 4 - clip_duration: 3 - num_frames: 10 - train_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - batch_size: 30 - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: FORCE_PAIR - augmentations: - - NORMAL - - VIDEO - - VIDEO_RRC - - FRAME - force_random_speed: null - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - ratio: 0.50 - max_clips: 3 - val_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 1 - - class_path: src.dataset.cdf.CDFDataModule - init_args: - data_dir: 'datasets/cdf/' - vid_ext: '.avi' - pack: false - max_clips: 1 - - class_path: src.dataset.dfdc.DFDCDataModule - init_args: - data_dir: 'datasets/dfdc/' - vid_ext: '.avi' - pack: false - max_clips: 1 - - class_path: src.dataset.fsh.FShDataModule - init_args: - compressions: ['c23'] - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 1 \ No newline at end of file diff --git a/video/dfd-fcg/model_code/configs/scenario/partial/75.yaml b/video/dfd-fcg/model_code/configs/scenario/partial/75.yaml deleted file mode 100755 index 3f0056eeb64b1cebb407b206aad45190fe95d209..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/scenario/partial/75.yaml +++ /dev/null @@ -1,56 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - batch_size: 20 - num_workers: 4 - clip_duration: 3 - num_frames: 10 - train_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - batch_size: 30 - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: FORCE_PAIR - augmentations: - - NORMAL - - VIDEO - - VIDEO_RRC - - FRAME - force_random_speed: null - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - ratio: 0.75 - max_clips: 3 - val_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 1 - - class_path: src.dataset.cdf.CDFDataModule - init_args: - data_dir: 'datasets/cdf/' - vid_ext: '.avi' - pack: false - max_clips: 1 - - class_path: src.dataset.dfdc.DFDCDataModule - init_args: - data_dir: 'datasets/dfdc/' - vid_ext: '.avi' - pack: false - max_clips: 1 - - class_path: src.dataset.fsh.FShDataModule - init_args: - compressions: ['c23'] - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 1 \ No newline at end of file diff --git a/video/dfd-fcg/model_code/configs/scenario/robust/robust.yaml b/video/dfd-fcg/model_code/configs/scenario/robust/robust.yaml deleted file mode 100755 index 821ad01661d3f0faf67ff6ac234644e0aceecd75..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/scenario/robust/robust.yaml +++ /dev/null @@ -1,33 +0,0 @@ -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - batch_size: 20 - num_workers: 4 - clip_duration: 3 - num_frames: 10 - train_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - batch_size: 30 - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: FORCE_PAIR - augmentations: - - ROBUSTNESS - force_random_speed: null - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 3 - val_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - data_dir: 'datasets/ffpp/' - vid_ext: '.avi' - pack: false - max_clips: 1 \ No newline at end of file diff --git a/video/dfd-fcg/model_code/configs/test.yaml b/video/dfd-fcg/model_code/configs/test.yaml deleted file mode 100755 index 25f2599db75d635d156eed55870693fb15909a60..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/configs/test.yaml +++ /dev/null @@ -1,14 +0,0 @@ -trainer: - logger: - init_args: - offline: true - limit_train_batches: 30 - limit_val_batches: 30 - accumulate_grad_batches: 1 -data: - init_args: - batch_size: 1 - num_workers: 0 - train_datamodules: - - init_args: - batch_size: 1 \ No newline at end of file diff --git a/video/dfd-fcg/model_code/demo.py b/video/dfd-fcg/model_code/demo.py deleted file mode 100755 index 1ca03bb234fe3bc95f45ad78b1c55cf8617d94e5..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/demo.py +++ /dev/null @@ -1,192 +0,0 @@ -import os -import cv2 -import sys -import yaml -import json -import math -import torch -import pickle -import shutil -import logging -import warnings -import argparse -import numpy as np - - -from os import path -from datetime import datetime -from torchvision.io import VideoReader -from src.utility.builtin import ODTrainer, ODLightningCLI - - -def parse_args(args=None): - parser = argparse.ArgumentParser() - parser.add_argument("model_cfg_path", type=str) - parser.add_argument("model_ckpt_path", type=str) - parser.add_argument("video_path", type=str) - parser.add_argument("--out_path", type=str, default=None) - parser.add_argument("--threshold", type=float, default=0.5) - parser.add_argument("--precision", type=str, default="16") - parser.add_argument("--batch_size", type=int, default=30) - return parser.parse_args(args=args) - - -def configure_logging(): - logging_fmt = "[%(levelname)s][%(filename)s:%(lineno)d]: %(message)s" - logging.basicConfig(level="INFO", format=logging_fmt) - warnings.filterwarnings(action="ignore") - - -@torch.inference_mode() -def demo_driver(cli, ckpt_path, video_path, out_path, batch_size, threshold): - # setup model - model = cli.model - - try: - model = model.__class__.load_from_checkpoint(ckpt_path) - except Exception as e: - print(f"Unable to load model from checkpoint in strict mode: {e}") - print(f"Loading model from checkpoint in non-strict mode.") - model = model.__class__.load_from_checkpoint(ckpt_path, strict=False) - - model.eval() - transforms = model.transform - - BATCH = batch_size - stride = 0.333 - - # load original video - vid_reader = VideoReader(video_path, "video", num_threads=1) - vid_ext = os.path.splitext(video_path)[-1] - vid_name = os.path.split(video_path)[1].replace(vid_ext, "") - fps = vid_reader.get_metadata()["video"]["fps"][0] - - frames = [] - for frame_data in vid_reader: - frames.append(frame_data["data"]) - frames = torch.stack(frames) - del vid_reader - _, H, W = frames[0].shape - - # load bboxes of original video - with open(video_path.replace("videos", "frame_data").replace(vid_ext, ".pickle"), "rb") as f: - fdata = pickle.load(f) - bboxes = [] - for data in fdata: - data["bboxes"] = [ - bbox.reshape(2, -1) - if len(bbox.shape) == 1 else bbox - for bbox in data["bboxes"] - ] - face_idx = np.argsort([ - np.linalg.norm((bbox[0] - bbox[1])) for bbox in data["bboxes"] - ])[-1] - bboxes.append(data["bboxes"][face_idx]) - - # load face cropped video - vid_reader = VideoReader( - video_path.replace("/videos", "/cropped/videos").replace(vid_ext, ".avi"), - "video", - num_threads=1 - ) - cropped_frames = [] - for frame_data in vid_reader: - cropped_frames.append(frame_data["data"]) - cropped_frames = torch.stack(cropped_frames) - del vid_reader - - # sample frames and inference - indices = torch.tensor([int(math.floor(i * stride * fps)) for i in range(10)], dtype=torch.long) - probs = [] - i = 0 - clip_count = len(cropped_frames) - indices[-1] - while (i < clip_count): - batch = min(clip_count - i, BATCH) - clips = torch.stack([ - transforms(cropped_frames[indices + i + j]) for j in range(batch) - ]).to("cuda") - results = model.evaluate(clips) - probs.extend(results["logits"].softmax(dim=-1)[:, 1].flatten().cpu().tolist()) - i += batch - - # draw and write to video - bbox_frames = [] - for frame, bbox, prob in zip(frames[indices[-1]:], bboxes[indices[-1]:], probs): - frame = frame.permute(1, 2, 0).numpy() - frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) - thickness = int(np.linalg.norm(bbox[0] - bbox[1]) * 0.01) - color = (0, 255, 0) if prob < threshold else (0, 0, 255) - category = "REAL" if prob < threshold else "FAKE" - frame = cv2.rectangle( - frame, - bbox[0].astype(int), - bbox[1].astype(int), - color, - thickness - ) - frame = cv2.putText( - frame, - f'{round(prob,2)}', - [int(bbox[0][0]), int(bbox[1][1] - thickness)], - cv2.FONT_HERSHEY_SIMPLEX, - 1, color, thickness, cv2.LINE_AA - ) - - frame = cv2.putText( - frame, - category, - [int(bbox[0][0]), int(bbox[0][1] - thickness)], - cv2.FONT_HERSHEY_SIMPLEX, - 1, color, thickness, cv2.LINE_AA - ) - - bbox_frames.append(frame) - - out_path = (f'pred_{vid_name}.avi' if out_path is None else out_path) - - writer = cv2.VideoWriter( - out_path, - cv2.VideoWriter_fourcc('X', 'V', 'I', 'D'), - fps, - (W, H) - ) - - for frame in bbox_frames: - writer.write(frame) - - writer.release() - - -if __name__ == "__main__": - configure_logging() - - params = parse_args() - - cli = ODLightningCLI( - run=False, - trainer_class=ODTrainer, - save_config_callback=None, - parser_kwargs={ - "parser_mode": "omegaconf" - }, - auto_configure_optimizers=False, - seed_everything_default=1019, - args=[ - '-c', params.model_cfg_path, - '--trainer.logger=null', - f'--trainer.devices=1', - f'--trainer.precision={params.precision}', - ], - ) - - ckpt_path = params.model_ckpt_path - video_path = params.video_path - - demo_driver( - cli=cli, - ckpt_path=ckpt_path, - video_path=video_path, - batch_size=params.batch_size, - threshold=params.threshold, - out_path=params.out_path - ) diff --git a/video/dfd-fcg/model_code/environment.yml b/video/dfd-fcg/model_code/environment.yml deleted file mode 100755 index 2e28c606a69d4f1d1d8999f73ae12f1a8cb5f63f..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/environment.yml +++ /dev/null @@ -1,129 +0,0 @@ -name: dfd-fcg -channels: - - defaults -dependencies: - - _libgcc_mutex=0.1 - - _openmp_mutex=5.1 - - ca-certificates=2023.12.12 - - ld_impl_linux-64=2.38 - - libffi=3.4.4 - - libgcc-ng=11.2.0 - - libgomp=11.2.0 - - libstdcxx-ng=11.2.0 - - ncurses=6.4 - - openssl=3.0.13 - - pip=23.3.1 - - python=3.8.18 - - readline=8.2 - - setuptools=68.2.2 - - sqlite=3.41.2 - - tk=8.6.12 - - wheel=0.41.2 - - xz=5.4.6 - - zlib=1.2.13 - - pip: - - aiohttp==3.9.3 - - aiosignal==1.3.1 - - albumentations==1.4.0 - - antlr4-python3-runtime==4.9.3 - - appdirs==1.4.4 - - async-timeout==4.0.3 - - attrs==23.2.0 - - av==11.0.0 - - bitsandbytes==0.41.0 - - certifi==2024.2.2 - - charset-normalizer==3.3.2 - - click==8.1.7 - - contourpy==1.1.1 - - cycler==0.12.1 - - docker-pycreds==0.4.0 - - docstring-parser==0.15 - - face-alignment==1.4.1 - - filelock==3.13.1 - - fonttools==4.49.0 - - frozenlist==1.4.1 - - fsspec==2024.2.0 - - ftfy==6.1.3 - - gitdb==4.0.11 - - gitpython==3.1.42 - - huggingface-hub==0.21.3 - - hydra-core==1.3.2 - - idna==3.6 - - imageio==2.34.0 - - importlib-resources==6.1.2 - - jinja2==3.1.3 - - joblib==1.3.2 - - jsonargparse==4.27.5 - - kiwisolver==1.4.5 - - lazy-loader==0.3 - - lightning==2.2.0.post0 - - lightning-utilities==0.10.1 - - markdown-it-py==3.0.0 - - markupsafe==2.1.5 - - matplotlib==3.7.5 - - mdurl==0.1.2 - - mpmath==1.3.0 - - multidict==6.0.5 - - networkx==3.1 - - numpy==1.24.4 - - nvidia-cublas-cu12==12.1.3.1 - - nvidia-cuda-cupti-cu12==12.1.105 - - nvidia-cuda-nvrtc-cu12==12.1.105 - - nvidia-cuda-runtime-cu12==12.1.105 - - nvidia-cudnn-cu12==8.9.2.26 - - nvidia-cufft-cu12==11.0.2.54 - - nvidia-curand-cu12==10.3.2.106 - - nvidia-cusolver-cu12==11.4.5.107 - - nvidia-cusparse-cu12==12.1.0.106 - - nvidia-nccl-cu12==2.19.3 - - nvidia-nvjitlink-cu12==12.3.101 - - nvidia-nvtx-cu12==12.1.105 - - omegaconf==2.3.0 - - open-clip-torch==2.24.0 - - opencv-python==4.9.0.80 - - opencv-python-headless==4.9.0.80 - - packaging==23.2 - - pandas==2.0.3 - - pillow==10.2.0 - - protobuf==4.25.3 - - psutil==5.9.8 - - pygments==2.17.2 - - pyparsing==3.1.1 - - python-dateutil==2.9.0.post0 - - pytorch-lightning==2.2.0.post0 - - pytz==2024.1 - - pywavelets==1.4.1 - - pyyaml==6.0.1 - - qudida==0.0.4 - - regex==2023.12.25 - - requests==2.31.0 - - rich==13.7.1 - - safetensors==0.4.2 - - scikit-image==0.21.0 - - scikit-learn==1.3.2 - - scipy==1.10.1 - - sentencepiece==0.2.0 - - sentry-sdk==1.40.6 - - setproctitle==1.3.3 - - six==1.16.0 - - smmap==5.0.1 - - sympy==1.12 - - tensorboardx==2.6.2.2 - - threadpoolctl==3.3.0 - - tifffile==2023.7.10 - - timm==0.9.16 - - torch==2.2.1 - - torchaudio==2.2.1 - - torchmetrics==1.3.1 - - torchvision==0.17.1 - - tqdm==4.66.2 - - triton==2.2.0 - - typeshed-client==2.5.1 - - typing-extensions==4.10.0 - - tzdata==2024.1 - - urllib3==2.2.1 - - wandb==0.16.3 - - wcwidth==0.2.13 - - yarl==1.9.4 - - zipp==3.17.0 -prefix: /home/od/miniconda3/envs/dfd-fcg diff --git a/video/dfd-fcg/model_code/inference.py b/video/dfd-fcg/model_code/inference.py deleted file mode 100755 index 423f82ddcbb4fc83357d8d5ed1cb922fab370f9f..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/inference.py +++ /dev/null @@ -1,187 +0,0 @@ -import os -import sys -import yaml -import json -import torch -import pickle -import shutil -import logging -import warnings -import argparse - - -from os import path -from datetime import datetime -from torchmetrics.classification import AUROC, Accuracy -from src.utility.builtin import ODTrainer, ODLightningCLI - - -def parse_args(args=None): - parser = argparse.ArgumentParser() - parser.add_argument("model_cfg_path", type=str) - parser.add_argument("data_cfg_path", type=str) - parser.add_argument("model_ckpt_path", type=str) - parser.add_argument("--precision", type=str, default="16") - parser.add_argument("--devices", type=int, default=-1) - parser.add_argument("--notes", type=str, default='') - return parser.parse_args(args=args) - - -class StatsRecorder: - def __init__(self, label): - self.label = label - self.prob = 0 - self.count = 0 - - def update(self, prob, label): - assert label == self.label - self.prob += prob - self.count += 1 - - def compute(self): - return { - "label": self.label, - "prob": self.prob / self.count - } - - -def configure_logging(): - logging_fmt = "[%(levelname)s][%(filename)s:%(lineno)d]: %(message)s" - logging.basicConfig(level="INFO", format=logging_fmt) - warnings.filterwarnings(action="ignore") - - -@torch.inference_mode() -def inference_driver(cli, cfg_dir, ckpt_path, notes=None): - - timestamp = datetime.now().strftime("%m%dT%H%M%S") - - trainer = cli.trainer - - # setup model - model = cli.model - - try: - model = model.__class__.load_from_checkpoint(ckpt_path) - except Exception as e: - print(f"Unable to load model from checkpoint in strict mode: {e}") - print(f"Loading model from checkpoint in non-strict mode.") - model = model.__class__.load_from_checkpoint(ckpt_path, strict=False) - - model.eval() - - # setup dataset - datamodule = cli.datamodule - datamodule.prepare_data() - datamodule.affine_model(cli.model) - datamodule.setup('test') - - stats = {} - report = {} - - test_dataloaders = datamodule.test_dataloader() - - for dts_name, dataloader in test_dataloaders.items(): - # iterate all videos - auc_calc = AUROC(task="BINARY", num_classes=2) - acc_calc = Accuracy(task="BINARY", num_classes=2) - dataset = dataloader.dataset - dts_stats = {} - - # perform ddp prediction - batch_results = trainer.predict( - model=model, - dataloaders=[dataloader] - ) - - gathered_results = [None] * torch.distributed.get_world_size() - torch.distributed.all_gather_object(gathered_results, batch_results) - torch.distributed.barrier() - - if (trainer.is_global_zero): - # fetch predict results and aggregate. - for batch_results in gathered_results: - for batch_result in batch_results: - probs = batch_result["probs"] - names = batch_result["names"] - y = batch_result["y"] - for prob, label, name in zip(probs, y, names): - if (not name in dts_stats): - dts_stats[name] = StatsRecorder(label) - dts_stats[name].update(prob, label) - - # compute the average probability. - for k in dts_stats: - dts_stats[k] = dts_stats[k].compute() - - # add straying videos into metric calculation - for k, v in dataset.stray_videos.items(): - dts_stats[k] = dict( - label=v, - prob=0.5, - stray=1 - ) - - # compute the metric scores - dataset_labels = [] - dataset_probs = [] - for v in dts_stats.values(): - dataset_labels.append(v["label"]) - dataset_probs.append(v["prob"]) - dataset_labels = torch.tensor(dataset_labels) - dataset_probs = torch.tensor(dataset_probs) - accuracy = acc_calc(dataset_probs, dataset_labels).item() - roc_auc = auc_calc(dataset_probs, dataset_labels).item() - accuracy = round(accuracy, 3) - roc_auc = round(roc_auc, 3) - logging.info(f'[{dts_name}] accuracy: {accuracy}, roc_auc: {roc_auc}') - stats[dts_name] = dts_stats - report[dts_name] = { - "accuracy": accuracy, - "roc_auc": roc_auc - } - - if (trainer.is_global_zero): - # save report and stats. - with open(path.join(cfg_dir, f'report_{timestamp}.json'), "w") as f: - json.dump(report, f, sort_keys=True, indent=4, separators=(',', ': ')) - - with open(path.join(cfg_dir, f'stats_{timestamp}.pickle'), "wb") as f: - pickle.dump(stats, f) - - return report - - -if __name__ == "__main__": - configure_logging() - - params = parse_args() - - cli = ODLightningCLI( - run=False, - trainer_class=ODTrainer, - save_config_callback=None, - parser_kwargs={ - "parser_mode": "omegaconf" - }, - auto_configure_optimizers=False, - seed_everything_default=1019, - args=[ - '-c', params.model_cfg_path, - '-c', params.data_cfg_path, - '--trainer.logger=null', - f'--trainer.devices={params.devices}', - f'--trainer.precision={params.precision}', - ], - ) - - cfg_dir = os.path.split(params.model_cfg_path)[0] - ckpt_path = params.model_ckpt_path - notes = params.notes - - inference_driver( - cli=cli, - cfg_dir=cfg_dir, - ckpt_path=ckpt_path, - notes=notes - ) diff --git a/video/dfd-fcg/model_code/main.py b/video/dfd-fcg/model_code/main.py deleted file mode 100644 index 9609ded1782f616217d8b7dcdb69decbbf82549f..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/main.py +++ /dev/null @@ -1,123 +0,0 @@ -import os -import gc -import json -import torch -import logging -import warnings -import lightning.pytorch as pl - -from lightning.pytorch.utilities import rank_zero_only -from src.utility.builtin import ODTrainer, ODLightningCLI -from inference import inference_driver -torch.set_float32_matmul_precision('high') - - -def configure_logging(): - logging_fmt = "[%(levelname)s][%(filename)s:%(lineno)d]: %(message)s" - logging.basicConfig(level="INFO", format=logging_fmt) - warnings.filterwarnings(action="ignore") - - # disable warnings from the xformers efficient attention module due to torch.user_deterministic_algorithms(True,warn_only=True) - warnings.filterwarnings( - action="ignore", - message=".*efficient_attention_forward_cutlass.*", - category=UserWarning - ) - - # logging.basicConfig(level="DEBUG", format=logging_fmt) - - -def configure_cli(): - return ODLightningCLI( - run=False, - trainer_class=ODTrainer, - save_config_kwargs={ - 'config_filename': 'setting.yaml' - }, - auto_configure_optimizers=True, - seed_everything_default=1019 - ) - - -def inference(cli): - # inference the best model - cfg_dir = cli.trainer.log_dir - ckpt_path = cli.trainer.checkpoint_callback.best_model_path - - results = inference_driver( - cli=cli, - cfg_dir=cfg_dir, - ckpt_path=ckpt_path, - ) - - # log inference results - cli.trainer.logger.experiment.log( - { - "/".join(["infer", dts_name, metric]): value - for dts_name, metrics in results.items() - for metric, value in metrics.items() - }, - commit=True - ) - - return results - - -def cli_main(): - # logging configuration - configure_logging() - - # initialize cli - cli = configure_cli() - - # update experiment notes - cli.trainer.logger.experiment.notes = cli.config.notes - cli.trainer.logger.experiment.save() - - # monitor model gradient and parameter histograms - # (this severely slow down the training speed) - # cli.trainer.logger.experiment.watch(cli.model, log='all', log_graph=False) - - # load & configure datasets - cli.datamodule.affine_model(cli.model) - cli.datamodule.affine_trainer(cli.trainer) - - # determine the purpose of the given checkpoint - cont_ckpt_path = None - if not cli.config.ckpt_path is None: - if cli.config.ckpt_mode == "cont": - cont_ckpt_path = cli.config.ckpt_path - elif cli.config.ckpt_mode == "tune": - cli.model.load_state_dict(torch.load(cli.config.ckpt_path)["state_dict"]) - else: - raise NotImplementedError() - - # run - cli.trainer.fit( - cli.model, - datamodule=cli.datamodule, - ckpt_path=cont_ckpt_path - ) - - # after training: - # 1. unwatch model - # cli.trainer.logger.experiment.unwatch(cli.model) - # 2. save the config - cli.trainer.logger.experiment.save( - glob_str=os.path.join(cli.trainer.log_dir, 'setting.yaml'), - base_path=cli.trainer.log_dir, - policy="now" - ) - - gc.collect() - torch.cuda.empty_cache() - - # inference the best model. - scores = inference(cli=cli) - - # finally - cli.trainer.logger.experiment.finish() - - -if __name__ == "__main__": - cli_main() diff --git a/video/dfd-fcg/model_code/misc/20words_mean_face.npy b/video/dfd-fcg/model_code/misc/20words_mean_face.npy deleted file mode 100755 index fc5cd3103270737752bebaec497c39b49b2af970..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/misc/20words_mean_face.npy +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:dbf68b2044171e1160716df7c53e8bbfaa0ee8c61fb41171d04cb6092bb81422 -size 1168 diff --git a/video/dfd-fcg/model_code/misc/L14_real_semantic_patches_v4_2000.pickle b/video/dfd-fcg/model_code/misc/L14_real_semantic_patches_v4_2000.pickle deleted file mode 100755 index 2556569be6ccd1431d4139b816031ca15fe00d81..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/misc/L14_real_semantic_patches_v4_2000.pickle +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:438555d515700f0fdc4a1f2af2ca620d879fa7c91ca7018579e23aae94f0f72a -size 2100301 diff --git a/video/dfd-fcg/model_code/readme.md b/video/dfd-fcg/model_code/readme.md deleted file mode 100644 index 66a3bf3bc773be72e8f821be2fa8fe94cda83177..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/readme.md +++ /dev/null @@ -1,275 +0,0 @@ -

-

[CVPR'25] Towards More General Video-based Deepfake Detection through Facial Component Guided Adaptation for Foundation Model (DFD-FCG)

- -

- Yue-Hua Han - 1,3,4 -    - Tai-Ming Huang - 1,3,4 -    - Kai-Lung Hua - 2,4 -    - Jun-Cheng Chen - 1 -
- - 1Academia Sinica,  - 2Microsoft,  - 3National Taiwan University,  -
- 4National Taiwan University of Science and Technology  -
-   - -

-

- -## 🥇Abstract -
-Generative models have enabled the creation of highly realistic facial-synthetic images, raising significant concerns due to their potential for misuse. Despite rapid advancements in the field of deepfake detection, developing efficient approaches to leverage foundation models for improved generalizability to unseen forgery samples remains challenging. To address this challenge, we propose a novel side-network-based decoder that extracts spatial and temporal cues using the CLIP image encoder for generalized video-based Deepfake detection. Additionally, we introduce Facial Component Guidance (FCG) to enhance spatial learning generalizability by encouraging the model to focus on key facial regions. By leveraging the generic features of a vision-language foundation model, our approach demonstrates promising generalizability on challenging Deepfake datasets while also exhibiting superiority in training data efficiency, parameter efficiency, and model robustness. -
- -## 📝TODOs - - [x] Training + Evaluation Code - - [x] Model Weights - - [x] Inference Code - - [ ] HeyGen Evaluation Dataset - - -## 🙌News - - June 08: We have released the [model checkpoint](https://drive.google.com/file/d/1ydD5rnaaF0i2zLE7NidLtAhjonHoVQOk/view?usp=sharing) and provided inference code for single videos! Checkout [this section](#inference---demo-video) for further details! - -## 🚀Installation -```shell -# conda environment -conda env create -f environment.yml -``` - -## 📂Dataset Structure -The structure of the **pre-processed datasets** for our project, the video files (*.avi) have been processed to only retain the aligned face. We use soft-links **(ln -s)** to manage and link the folders containing pre-processed videos on different drives. -```shell -datasets -├── cdf -│ ├── FAKE -│ │ └── videos -│ │ └── *.avi -│ ├── REAL -│ │ └── videos -│ │ └── *.avi -│ └── csv_files -│ ├── test_fake.csv -│ └── test_real.csv -├── dfdc -│ ├── csv_files -│ │ └── test.csv -│ └── videos -├── dfo -│ ├── FAKE -│ │ └── videos -│ │ └── *.avi -│ ├── REAL -│ │ └── videos -│ │ └── *.avi -│ └── csv_files -│ ├── test_fake.csv -│ └── test_real.csv -├── ffpp -│ ├── DF -│ │ ├── c23 -│ │ │ └── videos -│ │ │ └── *.avi -│ │ ├── c40 -│ │ │ └── videos -│ │ │ └── *.avi -│ │ └── raw -│ │ └── videos -│ │ │ └── *.avi -│ ├── F2F ... -│ ├── FS ... -│ ├── FSh ... -│ ├── NT ... -│ ├── real ... -│ └── csv_files -│ ├── test.json -│ ├── train.json -│ └── val.json -| -└── robustness - ├── BW - │ ├── 1 - │ │ ├── DF - │ │ │ └── c23 - │ │ │ └── videos - │ │ │ └── *.avi - │ │ ├── F2F ... - │ │ ├── FS ... - │ │ ├── FSh ... - │ │ ├── NT ... - │ │ ├── real ... - │ │ │ - │ │ └── csv_files - │ │ ├── test.json - │ │ ├── train.json - │ │ └── val.json - │ │ - │ │ - │ │ - . . - . . - . . -``` - - -## 🔧Dataset Pre-processing -### Generic Pre-processing -This phase performs the required pre-processing for our method, this includes *facial alignment (using the mean face from LRW)* and *facial cropping*. -```bash -# First, fetch all the landmarks & bboxes of the video frames. -python -m src.preprocess.fetch_landmark_bbox \ ---root-dir="/storage/FaceForensicC23" \ # The root folder of the dataset ---video-dir="videos" \ # The root folder of the videos ---fdata-dir="frame_data" \ # The folder to save the extracted frame data ---glob-exp="*/*" \ # The glob expression to search through the root video folder ---split-num=1 \ # Split the dataset into several parts for parallel process. ---part-num=1 \ # The part of dataset to process for parallel process. ---batch=1 \ # The batch size for the 2D-FAN face data extraction. (suggestion: 1) ---max-res=800 # The maximum resolution for either side of the image - -# Then, crop all the faces from the original videos. -python -m src.preprocess.crop_main_face \ ---root-dir="/storage/FaceForensicC23/" \ # The root folder of the dataset ---video-dir="videos" \ # The root folder of the videos ---fdata-dir="frame_data" \ # The folder to fetch the frame data for landmarks and bboxes ---glob-exp="*/*" \ # The glob expression to search through the root video folder ---crop-dir="cropped" \ # The folder to save the cropped videos ---crop-width=150 \ # The width for the cropped videos ---crop-height=150 \ # The height for the cropped videos ---mean-face="./misc/20words_mean_face.npy" # The mean face for face aligned cropping. ---replace \ # Control whether to replace existing cropped videos ---workers=1 # Number of works to perform parallel process (default: cpu / 2 ) -``` - - -### Robustness Pre-processing -This phase requires the pre-processed facial landmarks to perform facial cropping, please refer to the **Generic Pre-processing** for further detail. -```bash -# First, we add perturbation to all the videos. -python -m src.preprocess.phase1_apply_all_to_videos \ ---dts-root="/storage/FaceForensicC23" \ # The root folder of the dataset ---vid-dir="videos" \ # The root folder of the videos ---rob-dir="robustness" \ # The folder to save the perturbed videos ---glob-exp="*/*.mp4" \ # The glob expression to search through the root video folder ---split=1 \ # Split the dataset into several parts for parallel process. ---part=1 \ # The part of dataset to process for parallel process. ---workers=1 # Number of works to perform parallel process (default: cpu / 2 ) - -# Then, crop all the faces from the perturbed videos. -python -m src.preprocess.phase2_face_crop_all_videos \ -(setup/run/clean) # the three phase operations ---root-dir="/storage/FaceForensicC23/" \ # The root folder of the dataset ---rob-dir="videos" \ # The root folder of the robustness videos ---fd-dir="frame_data" \ # The folder to fetch the frame data for landmarks and bboxes ---glob-exp="*/*/*/*.mp4" \ # The glob expression to search through the root video folder ---crop-dir="cropped_robust" \ # The folder to save the cropped videos ---mean-face="./misc/20words_mean_face.npy" \ # The mean face for face aligned cropping. ---workers=1 # Number of works to perform parallel process (default: cpu / 2 ) -``` - -## 🤖Training & Evaluation -### Training - Preset Settings -In `./scripts`, scripts are provided to start the training process for the settings mentioned in our paper. -These settings are configured to run on a cluster with `V100*4`. -```bash -bash ./scripts/model/ffg_l14.sh # begin training process -``` -### Training - Custom Settings -Our project is built on `pytorch-lightning (2.2.0)`, please refer the [official manual](https://lightning.ai/docs/pytorch/2.2.0/common/trainer.html#trainer-class-api) and adjust the following files for advance configurations: -```bash -./configs/base.yaml # major training settings (e.g. epochs, optimizer, batch size, mixed-precision ...) -./configs/data.yaml # settings for the training & validation dataset -./configs/inference.yaml # settings for the evaluation dataset (extension of data.yaml) -./configs/logger.yaml # settings for the WandB logger -./configs/clip/L14/ffg.yaml # settings for the main model -./configs/test.yaml # settings for debugging (offline logging, small batch size, short epochs ...) -``` -The following command starts the training process with the provided settings: -```bash -# For debugging, add '--config configs/test.yaml' after the '--config configs/clip/L14/ffg.yaml'. -python main.py \ ---config configs/base.yaml \ ---config configs/clip/L14/ffg.yaml - -# Fine-grained control is supported with the pytorch-lightning-cli. -python main.py \ ---config configs/base.yaml \ ---config configs/clip/L14/ffg.yaml \ ---optimizer.lr=1e-5 \ ---trainer.max_epochs=10 \ ---data.init_args.train_datamodules.init_args.batch_size=5 -``` -### Evaluation - Standard -To perform evaluation on datasets, run the following command: -```bash -python inference.py \ -"logs/fcg_l14/setting.yaml" \ # model settings -"./configs/inference.yaml" \ # evaluation dataset settings -"logs/fcg_l14/checkpoint.ckpt" \ # model checkpoint -"--devices=4" # number of devices to compute in parallel -``` -### Evaluation - Robustness -We provide tools in `./scripts/tools/` to simplify the robustness evaluation task: `create-robust-config.sh` creates an evaluation config for each perturbation types and `inference-robust.sh` runs through all the datasets with the specified model. - -## 😎Inference - Demo Video -To run inference on a single video with an indicator, please download our model checkpoint and execute the following commands: -```bash -# Pre-Processing: fetch facial landmark and bounding box -python -m src.preprocess.fetch_landmark_bbox \ ---root-dir="./resources" \ ---video-dir="videos" \ ---fdata-dir="frame_data" \ ---glob-exp="*" -# Pre-Processing: crop out the facial regions -python -m src.preprocess.crop_main_face \ ---root-dir="./resources" \ ---video-dir="videos" \ ---fdata-dir="frame_data" \ ---crop-dir="cropped" \ ---glob-exp="*" -# Main Process -python -m demo \ -"checkpoint/setting.yaml" \ # the model setting of the checkpoint -"checkpoint/weights.ckpt" \ # the model weights of the checkpoint -"resources/videos/000_003.mp4" \ # the video to process ---out_path="test.avi" \ # the output path of the processed video ---threshold=0.5 \ # the threshold for the real/fake indicator ---batch_size=30 # the input batch size of the model (~10G VRAM when batch_size=30 ) -``` -The following is a sample frame from the processed video: -

- -

- - - -## 🔗 BibTeX -If you find our efforts helpful, please cite our paper and leave a star for further updates! -```bibtex - -@inproceedings{cvpr25_dfd_fcg, - title={Towards More General Video-based Deepfake Detection through Facial Component Guided Adaptation for Foundation Model}, - author={Yue-Hua Han, Tai-Ming Huang, Kai-Lung Hua, Jun-Cheng Chen}, - booktitle={Proceedings of the Conference on Computer Vision and Pattern Recognition (CVPR)}, - year={2025} -} -``` - - -## 📭 Contact -The provided code and weights are only available for research purpose only. -If you have further questions (including commercial use), please contact [Dr. Jun-Cheng Chen](pullpull@citi.sinica.edu.tw). diff --git a/video/dfd-fcg/model_code/resources/videos/000.mp4 b/video/dfd-fcg/model_code/resources/videos/000.mp4 deleted file mode 100644 index c21409aabe9f67d7e7f91d6f7bca3de9b6cc3c62..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/resources/videos/000.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e51b9b46acc7eaeca62022e1b869541406d2ca887cd401dcc03cc5db28bc8ed -size 894312 diff --git a/video/dfd-fcg/model_code/resources/videos/000_003.mp4 b/video/dfd-fcg/model_code/resources/videos/000_003.mp4 deleted file mode 100644 index df45187284e73bce2fd9bad302e4035d380fe495..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/resources/videos/000_003.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6e83d0e0c51a0f7cdf2db48f796617db43148b3390011555dfa758f2b7ab811b -size 891837 diff --git a/video/dfd-fcg/model_code/scripts/ablation/ffg.sh b/video/dfd-fcg/model_code/scripts/ablation/ffg.sh deleted file mode 100755 index be80b480ae6d13a68d90fc6ea09647670e240112..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/ablation/ffg.sh +++ /dev/null @@ -1,6 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/svl.yaml \ ---model.init_args.num_synos=4 \ ---config configs/generic/inference.yaml \ ---notes="no ffg guidance" diff --git a/video/dfd-fcg/model_code/scripts/ablation/focal.sh b/video/dfd-fcg/model_code/scripts/ablation/focal.sh deleted file mode 100755 index e27b94e5415f24f918ddfb2b0e90c5a2914fe599..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/ablation/focal.sh +++ /dev/null @@ -1,6 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/ffg.yaml \ ---model.init_args.is_focal_loss=false \ ---config configs/generic/inference.yaml \ ---notes="no focal loss" diff --git a/video/dfd-fcg/model_code/scripts/ablation/s_branch.sh b/video/dfd-fcg/model_code/scripts/ablation/s_branch.sh deleted file mode 100755 index f53514b62e19b1dc981b6509465d7444adb2ce95..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/ablation/s_branch.sh +++ /dev/null @@ -1,6 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/svl.yaml \ ---model.init_args.op_mode=["T"] \ ---config configs/generic/inference.yaml \ ---notes="no spatial branch" diff --git a/video/dfd-fcg/model_code/scripts/ablation/t_branch.sh b/video/dfd-fcg/model_code/scripts/ablation/t_branch.sh deleted file mode 100755 index 7a86857b369d4ac309f20b09cf549ce96a79a6db..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/ablation/t_branch.sh +++ /dev/null @@ -1,6 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/ffg.yaml \ ---model.init_args.op_mode=["S"] \ ---config configs/generic/inference.yaml \ ---notes="no temporal branch" diff --git a/video/dfd-fcg/model_code/scripts/base.sh b/video/dfd-fcg/model_code/scripts/base.sh deleted file mode 100755 index 5943aee44cb391d6861ee2a58fca48cb56a69dc6..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/base.sh +++ /dev/null @@ -1,3 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/ffg.yaml diff --git a/video/dfd-fcg/model_code/scripts/loo/DF.sh b/video/dfd-fcg/model_code/scripts/loo/DF.sh deleted file mode 100755 index 73c04e0a7affb724a1aea712359b557e07aedaf1..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/loo/DF.sh +++ /dev/null @@ -1,6 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/ffg.yaml \ ---config configs/scenario/LOO/DF.yaml \ ---config configs/loo/DF.yaml \ ---notes="LOO DF" diff --git a/video/dfd-fcg/model_code/scripts/loo/F2F.sh b/video/dfd-fcg/model_code/scripts/loo/F2F.sh deleted file mode 100755 index 5c8cccfec2cd46761b0e01cb7c8cdca991899404..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/loo/F2F.sh +++ /dev/null @@ -1,6 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/ffg.yaml \ ---config configs/scenario/LOO/F2F.yaml \ ---config configs/loo/F2F.yaml \ ---notes="LOO F2F" diff --git a/video/dfd-fcg/model_code/scripts/loo/FS.sh b/video/dfd-fcg/model_code/scripts/loo/FS.sh deleted file mode 100755 index cdbde903e6fd0aa6987f591bbdca44abdb20f60f..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/loo/FS.sh +++ /dev/null @@ -1,6 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/ffg.yaml \ ---config configs/scenario/LOO/FS.yaml \ ---config configs/loo/FS.yaml \ ---notes="LOO FS" diff --git a/video/dfd-fcg/model_code/scripts/loo/NT.sh b/video/dfd-fcg/model_code/scripts/loo/NT.sh deleted file mode 100755 index b3ff9909beb08a96006013d54145e87fe5f2e561..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/loo/NT.sh +++ /dev/null @@ -1,6 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/ffg.yaml \ ---config configs/scenario/LOO/NT.yaml \ ---config configs/loo/NT.yaml \ ---notes="LOO NT" diff --git a/video/dfd-fcg/model_code/scripts/model/evl_l14.sh b/video/dfd-fcg/model_code/scripts/model/evl_l14.sh deleted file mode 100755 index 05c2630e4977f32fd1718d3148a6aafbd40fe207..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/model/evl_l14.sh +++ /dev/null @@ -1,7 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/evl.yaml \ ---data.init_args.train_datamodules.init_args.batch_size=40 \ ---trainer.accumulate_grad_batches=5 \ ---config configs/inference.yaml \ ---notes="full evl_l14" diff --git a/video/dfd-fcg/model_code/scripts/model/ffg_l14.sh b/video/dfd-fcg/model_code/scripts/model/ffg_l14.sh deleted file mode 100644 index fe032564af24744807f40982bf6e519b3915da67..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/model/ffg_l14.sh +++ /dev/null @@ -1,5 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/ffg.yaml \ ---config configs/inference.yaml \ ---notes="full ffg_l14" diff --git a/video/dfd-fcg/model_code/scripts/model/fulltune_l14.sh b/video/dfd-fcg/model_code/scripts/model/fulltune_l14.sh deleted file mode 100644 index 630bd270d004370d4eafcd6fe79e0ea73f0afe1d..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/model/fulltune_l14.sh +++ /dev/null @@ -1,7 +0,0 @@ -python -m main \ ---config configs/version/Share/final/base.yaml \ ---config configs/version/Share/final/clip/L14/fulltune.yaml \ ---optimizer.lr=1e-5 \ ---trainer.accumulate_grad_batches=15 \ ---config configs/inference.yaml \ ---notes="full fulltune_l14" diff --git a/video/dfd-fcg/model_code/scripts/model/linear_l14.sh b/video/dfd-fcg/model_code/scripts/model/linear_l14.sh deleted file mode 100755 index 76b2f4228189b25d97cdeaf97bae237eeecf9c14..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/model/linear_l14.sh +++ /dev/null @@ -1,5 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/linear.yaml \ ---config configs/inference.yaml \ ---notes="full linear_l14" diff --git a/video/dfd-fcg/model_code/scripts/model/svl_l14.sh b/video/dfd-fcg/model_code/scripts/model/svl_l14.sh deleted file mode 100644 index ee488f4a03b8d7367309d1ed1aa9f688f1f16585..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/model/svl_l14.sh +++ /dev/null @@ -1,5 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/svl.yaml \ ---config configs/inference.yaml \ ---notes="full svl_l14" diff --git a/video/dfd-fcg/model_code/scripts/model/vpt_deep_l14.sh b/video/dfd-fcg/model_code/scripts/model/vpt_deep_l14.sh deleted file mode 100755 index 97afda4dccd86dfef560dac90f28daca35f853cf..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/model/vpt_deep_l14.sh +++ /dev/null @@ -1,6 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/vpt.yaml \ ---trainer.accumulate_grad_batches=10 \ ---config configs/inference.yaml \ ---notes="full vpt_l14" diff --git a/video/dfd-fcg/model_code/scripts/model/vpt_shallow_l14.sh b/video/dfd-fcg/model_code/scripts/model/vpt_shallow_l14.sh deleted file mode 100755 index 97afda4dccd86dfef560dac90f28daca35f853cf..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/model/vpt_shallow_l14.sh +++ /dev/null @@ -1,6 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/vpt.yaml \ ---trainer.accumulate_grad_batches=10 \ ---config configs/inference.yaml \ ---notes="full vpt_l14" diff --git a/video/dfd-fcg/model_code/scripts/partial/10.sh b/video/dfd-fcg/model_code/scripts/partial/10.sh deleted file mode 100755 index b9e4aa129a3fbb01dab099c9a2a68e352a835177..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/partial/10.sh +++ /dev/null @@ -1,6 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/ffg.yaml \ ---config configs/scenario/partial/10.yaml \ ---config configs/generic/inference.yaml \ ---notes="full ffg_l14_10%" diff --git a/video/dfd-fcg/model_code/scripts/partial/25.sh b/video/dfd-fcg/model_code/scripts/partial/25.sh deleted file mode 100755 index 3e99fe215ad0a2f830c222c9845876c2fc49356d..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/partial/25.sh +++ /dev/null @@ -1,6 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/ffg.yaml \ ---config configs/scenario/partial/25.yaml \ ---config configs/generic/inference.yaml \ ---notes="full ffg_l14_25%" diff --git a/video/dfd-fcg/model_code/scripts/partial/50.sh b/video/dfd-fcg/model_code/scripts/partial/50.sh deleted file mode 100755 index 275914a8bce855eca389a770447aa47ae9976641..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/partial/50.sh +++ /dev/null @@ -1,6 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/ffg.yaml \ ---config configs/scenario/partial/50.yaml \ ---config configs/generic/inference.yaml \ ---notes="full ffg_l14_50%" diff --git a/video/dfd-fcg/model_code/scripts/partial/75.sh b/video/dfd-fcg/model_code/scripts/partial/75.sh deleted file mode 100755 index 69768321d1deeddf311bd3619008d4570e6fcabf..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/partial/75.sh +++ /dev/null @@ -1,6 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/ffg.yaml \ ---config configs/scenario/partial/75.yaml \ ---config configs/generic/inference.yaml \ ---notes="full ffg_l14_75%" diff --git a/video/dfd-fcg/model_code/scripts/parts/no_eyes.sh b/video/dfd-fcg/model_code/scripts/parts/no_eyes.sh deleted file mode 100755 index 9a4dd3a5fd3a11229df8d1de9f221f536bb3628f..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/parts/no_eyes.sh +++ /dev/null @@ -1,6 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/ffg.yaml \ ---model.init_args.face_parts=["lips","skin","nose"] \ ---config configs/generic/inference.yaml \ ---notes="parts_no_eyes" diff --git a/video/dfd-fcg/model_code/scripts/parts/no_lips.sh b/video/dfd-fcg/model_code/scripts/parts/no_lips.sh deleted file mode 100755 index 36c67c12e9ef9621dae05c3753929dee275d3689..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/parts/no_lips.sh +++ /dev/null @@ -1,6 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/ffg.yaml \ ---model.init_args.face_parts=["skin","eyes","nose"] \ ---config configs/generic/inference.yaml \ ---notes="parts_no_lips" diff --git a/video/dfd-fcg/model_code/scripts/parts/no_nose.sh b/video/dfd-fcg/model_code/scripts/parts/no_nose.sh deleted file mode 100755 index 8d794aff3fac51f1d9e05b258cd78bbc4391aceb..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/parts/no_nose.sh +++ /dev/null @@ -1,6 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/ffg.yaml \ ---model.init_args.face_parts=["lips","skin","eyes"] \ ---config configs/generic/inference.yaml \ ---notes="parts_no_nose" diff --git a/video/dfd-fcg/model_code/scripts/parts/no_skin.sh b/video/dfd-fcg/model_code/scripts/parts/no_skin.sh deleted file mode 100755 index 5907e3f7c4be5173e47edbaba9f2339ce7f68ec6..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/parts/no_skin.sh +++ /dev/null @@ -1,6 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/ffg.yaml \ ---model.init_args.face_parts=["lips","eyes","nose"] \ ---config configs/generic/inference.yaml \ ---notes="parts_no_skin" diff --git a/video/dfd-fcg/model_code/scripts/robust/robust.sh b/video/dfd-fcg/model_code/scripts/robust/robust.sh deleted file mode 100755 index 594987ee3aa3d8832177faa7f8a9aff95758b1fa..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/robust/robust.sh +++ /dev/null @@ -1,5 +0,0 @@ -python -m main \ ---config configs/base.yaml \ ---config configs/models/ffg.yaml \ ---config configs/scenario/robust/robust.yaml \ ---notes="ROBUSTNESS" diff --git a/video/dfd-fcg/model_code/scripts/tools/cli_check.py b/video/dfd-fcg/model_code/scripts/tools/cli_check.py deleted file mode 100755 index 1d6456d6892da66bb06604c5b8f82538355e54d9..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/tools/cli_check.py +++ /dev/null @@ -1,4 +0,0 @@ -from main import configure_cli - -if __name__ == "__main__": - cli = configure_cli() diff --git a/video/dfd-fcg/model_code/scripts/tools/create-robust-configs.sh b/video/dfd-fcg/model_code/scripts/tools/create-robust-configs.sh deleted file mode 100644 index 17511e16591438d8b5741ccd1209f8ef203f1403..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/tools/create-robust-configs.sh +++ /dev/null @@ -1,24 +0,0 @@ -TYPES="CS CC BW GNC GB JPEG VC" -LEVELS="1 2 3 4 5" -for T in $TYPES; -do - for L in $LEVELS; - do - cat << EOT > "configs/robustness/$T($L).yaml" -data: - class_path: src.dataset.base.ODDeepFakeDataModule - init_args: - test_datamodules: - - class_path: src.dataset.ffpp.FFPPDataModule - init_args: - df_types: ['REAL','DF','FS','F2F','NT'] - compressions: ['c23'] - strategy: NORMAL - augmentations: - - NONE - force_random_speed: null - data_dir: 'datasets/robustness/$T/$L/' - vid_ext: .avi -EOT - done -done \ No newline at end of file diff --git a/video/dfd-fcg/model_code/scripts/tools/inference-robust.sh b/video/dfd-fcg/model_code/scripts/tools/inference-robust.sh deleted file mode 100644 index 4e38c4c67b5a002f1f47282458997616be62601d..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/scripts/tools/inference-robust.sh +++ /dev/null @@ -1,16 +0,0 @@ -TYPES="CS CC BW GNC GB JPEG VC" -LEVELS="1 2 3 4 5" -CKPT="logs/best/checkpoint.ckpt" -SETTING="logs/best/setting.yaml" -for T in $TYPES; -do - for L in $LEVELS; - do - python -m inference \ - $SETTING \ - "./configs/robustness/$T($L).yaml" \ - $CKPT \ - --notes "$T($L)" \ - --devices -1 - done -done \ No newline at end of file diff --git a/video/dfd-fcg/model_code/src/clip/__init__.py b/video/dfd-fcg/model_code/src/clip/__init__.py deleted file mode 100755 index dcc5619538c0f7c782508bdbd9587259d805e0d9..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/clip/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .clip import * diff --git a/video/dfd-fcg/model_code/src/clip/bpe_simple_vocab_16e6.txt.gz b/video/dfd-fcg/model_code/src/clip/bpe_simple_vocab_16e6.txt.gz deleted file mode 100755 index 36a15856e00a06a9fbed8cdd34d2393fea4a3113..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/clip/bpe_simple_vocab_16e6.txt.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:924691ac288e54409236115652ad4aa250f48203de50a9e4722a6ecd48d6804a -size 1356917 diff --git a/video/dfd-fcg/model_code/src/clip/clip.py b/video/dfd-fcg/model_code/src/clip/clip.py deleted file mode 100644 index c714255869f73327b1b00aa5bf736c78321a1368..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/clip/clip.py +++ /dev/null @@ -1,270 +0,0 @@ -import hashlib -import os -import urllib -import warnings -from typing import Any, Union, List -from pkg_resources import packaging - -import torch -from PIL import Image -from torchvision.transforms import Compose, Resize, CenterCrop, ToTensor, Normalize -from tqdm import tqdm - -from .model_syno import build_model -from .simple_tokenizer import SimpleTokenizer as _Tokenizer - -try: - from torchvision.transforms import InterpolationMode - BICUBIC = InterpolationMode.BICUBIC -except ImportError: - BICUBIC = Image.BICUBIC - - -if packaging.version.parse(torch.__version__) < packaging.version.parse("1.7.1"): - warnings.warn("PyTorch version 1.7.1 or higher is recommended") - - -__all__ = ["available_models", "load", "tokenize"] -_tokenizer = _Tokenizer() - -_MODELS = { - "RN50": "https://openaipublic.azureedge.net/clip/models/afeb0e10f9e5a86da6080e35cf09123aca3b358a0c3e3b6c78a7b63bc04b6762/RN50.pt", - "RN101": "https://openaipublic.azureedge.net/clip/models/8fa8567bab74a42d41c5915025a8e4538c3bdbe8804a470a72f30b0d94fab599/RN101.pt", - "RN50x4": "https://openaipublic.azureedge.net/clip/models/7e526bd135e493cef0776de27d5f42653e6b4c8bf9e0f653bb11773263205fdd/RN50x4.pt", - "RN50x16": "https://openaipublic.azureedge.net/clip/models/52378b407f34354e150460fe41077663dd5b39c54cd0bfd2b27167a4a06ec9aa/RN50x16.pt", - "RN50x64": "https://openaipublic.azureedge.net/clip/models/be1cfb55d75a9666199fb2206c106743da0f6468c9d327f3e0d0a543a9919d9c/RN50x64.pt", - "ViT-B/32": "https://openaipublic.azureedge.net/clip/models/40d365715913c9da98579312b702a82c18be219cc2a73407c4526f58eba950af/ViT-B-32.pt", - "ViT-B/16": "https://openaipublic.azureedge.net/clip/models/5806e77cd80f8b59890b7e101eabd078d9fb84e6937f9e85e4ecb61988df416f/ViT-B-16.pt", - "ViT-L/14": "https://openaipublic.azureedge.net/clip/models/b8cca3fd41ae0c99ba7e8951adf17d267cdb84cd88be6f7c2e0eca1737a03836/ViT-L-14.pt", - "ViT-L/14@336px": "https://openaipublic.azureedge.net/clip/models/3035c92b350959924f9f00213499208652fc7ea050643e8b385c2dac08641f02/ViT-L-14-336px.pt", -} - - -def _download(url: str, root: str): - os.makedirs(root, exist_ok=True) - filename = os.path.basename(url) - - expected_sha256 = url.split("/")[-2] - download_target = os.path.join(root, filename) - - if os.path.exists(download_target) and not os.path.isfile(download_target): - raise RuntimeError(f"{download_target} exists and is not a regular file") - - if os.path.isfile(download_target): - if hashlib.sha256(open(download_target, "rb").read()).hexdigest() == expected_sha256: - return download_target - else: - warnings.warn(f"{download_target} exists, but the SHA256 checksum does not match; re-downloading the file") - - with urllib.request.urlopen(url) as source, open(download_target, "wb") as output: - with tqdm(total=int(source.info().get("Content-Length")), ncols=80, unit='iB', unit_scale=True, unit_divisor=1024) as loop: - while True: - buffer = source.read(8192) - if not buffer: - break - - output.write(buffer) - loop.update(len(buffer)) - - if hashlib.sha256(open(download_target, "rb").read()).hexdigest() != expected_sha256: - raise RuntimeError("Model has been downloaded but the SHA256 checksum does not not match") - - return download_target - - -def _convert_image_to_rgb(image): - if (isinstance(image, Image.Image)): - return image.convert("RGB") - else: - return image - - -def _to_tensor(image): - if (isinstance(image, torch.Tensor)): - if ((image.max() - 1) > 1e-4): - image = image / 255 - return image.float() - else: - return ToTensor()(image) - - -def _transform(n_px): - return Compose([ - Resize(n_px, interpolation=BICUBIC, antialias=True), - CenterCrop(n_px), - _convert_image_to_rgb, - _to_tensor, - Normalize((0.48145466, 0.4578275, 0.40821073), (0.26862954, 0.26130258, 0.27577711)), - ]) - - -def available_models() -> List[str]: - """Returns the names of available CLIP models""" - return list(_MODELS.keys()) - - -def load(provider: str, device: Union[str, torch.device] = "cuda" if torch.cuda.is_available() else "cpu", jit: bool = False, download_root: str = None, **model_kargs): - """Load a CLIP model - - Parameters - ---------- - name : str - A model name listed by `clip.available_models()`, or the path to a model checkpoint containing the state_dict - - device : Union[str, torch.device] - The device to put the loaded model - - jit : bool - Whether to load the optimized JIT model or more hackable non-JIT model (default). - - download_root: str - path to download the model files; by default, it uses "~/.cache/clip" - - Returns - ------- - model : torch.nn.Module - The CLIP model - - preprocess : Callable[[PIL.Image], torch.Tensor] - A torchvision transform that converts a PIL image into a tensor that the returned model can take as its input - """ - - if type(provider) == str: - name = provider - if name in _MODELS: - model_path = _download(_MODELS[name], download_root or os.path.expanduser("~/.cache/clip")) - elif os.path.isfile(name): - model_path = name - else: - raise RuntimeError(f"Model {name} not found; available models = {available_models()}") - - try: - with open(model_path, 'rb') as opened_file: - # loading JIT archive - model = torch.jit.load(opened_file, map_location=device if jit else "cpu").eval() - state_dict = None - except RuntimeError: - with open(model_path, 'rb') as opened_file: - # loading saved state dict - if jit: - warnings.warn(f"File {model_path} is not a JIT archive. Loading as a state dict instead") - jit = False - state_dict = torch.load(opened_file, map_location="cpu") - - elif type(provider) == dict or issubclass(type(provider), dict): - state_dict = provider - if jit: - warnings.warn(f"Providing state dict, which is not a JIT archive file path.") - jit = False - - else: - raise Exception("Invalid model provider") - - if not jit: - model = build_model(state_dict or model.state_dict(), **model_kargs).to(device) - if str(device) == "cpu": - model.float() - return model, _transform(model.visual.input_resolution) - - # patch the device names - device_holder = torch.jit.trace(lambda: torch.ones([]).to(torch.device(device)), example_inputs=[]) - device_node = [n for n in device_holder.graph.findAllNodes("prim::Constant") if "Device" in repr(n)][-1] - - def _node_get(node: torch._C.Node, key: str): - """Gets attributes of a node which is polymorphic over return type. - - From https://github.com/pytorch/pytorch/pull/82628 - """ - sel = node.kindOf(key) - return getattr(node, sel)(key) - - def patch_device(module): - try: - graphs = [module.graph] if hasattr(module, "graph") else [] - except RuntimeError: - graphs = [] - - if hasattr(module, "forward1"): - graphs.append(module.forward1.graph) - - for graph in graphs: - for node in graph.findAllNodes("prim::Constant"): - if "value" in node.attributeNames() and str(_node_get(node, "value")).startswith("cuda"): - node.copyAttributes(device_node) - - model.apply(patch_device) - patch_device(model.encode_image) - patch_device(model.encode_text) - - # patch dtype to float32 on CPU - if str(device) == "cpu": - float_holder = torch.jit.trace(lambda: torch.ones([]).float(), example_inputs=[]) - float_input = list(float_holder.graph.findNode("aten::to").inputs())[1] - float_node = float_input.node() - - def patch_float(module): - try: - graphs = [module.graph] if hasattr(module, "graph") else [] - except RuntimeError: - graphs = [] - - if hasattr(module, "forward1"): - graphs.append(module.forward1.graph) - - for graph in graphs: - for node in graph.findAllNodes("aten::to"): - inputs = list(node.inputs()) - for i in [1, 2]: # dtype can be the second or third argument to aten::to() - if _node_get(inputs[i].node(), "value") == 5: - inputs[i].node().copyAttributes(float_node) - - model.apply(patch_float) - patch_float(model.encode_image) - patch_float(model.encode_text) - - model.float() - - return model, _transform(model.input_resolution.item()) - - -def tokenize(texts: Union[str, List[str]], context_length: int = 77, truncate: bool = False) -> Union[torch.IntTensor, torch.LongTensor]: - """ - Returns the tokenized representation of given input string(s) - - Parameters - ---------- - texts : Union[str, List[str]] - An input string or a list of input strings to tokenize - - context_length : int - The context length to use; all CLIP models use 77 as the context length - - truncate: bool - Whether to truncate the text in case its encoding is longer than the context length - - Returns - ------- - A two-dimensional tensor containing the resulting tokens, shape = [number of input strings, context_length]. - We return LongTensor when torch version is <1.8.0, since older index_select requires indices to be long. - """ - if isinstance(texts, str): - texts = [texts] - - sot_token = _tokenizer.encoder["<|startoftext|>"] - eot_token = _tokenizer.encoder["<|endoftext|>"] - all_tokens = [[sot_token] + _tokenizer.encode(text) + [eot_token] for text in texts] - if packaging.version.parse(torch.__version__) < packaging.version.parse("1.8.0"): - result = torch.zeros(len(all_tokens), context_length, dtype=torch.long) - else: - result = torch.zeros(len(all_tokens), context_length, dtype=torch.int) - - for i, tokens in enumerate(all_tokens): - if len(tokens) > context_length: - if truncate: - tokens = tokens[:context_length] - tokens[-1] = eot_token - else: - raise RuntimeError(f"Input {texts[i]} is too long for context length {context_length}") - result[i, :len(tokens)] = torch.tensor(tokens) - - return result diff --git a/video/dfd-fcg/model_code/src/clip/model.py b/video/dfd-fcg/model_code/src/clip/model.py deleted file mode 100755 index 33d6c11a6bf738ce6678732c573e4068cacd1460..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/clip/model.py +++ /dev/null @@ -1,530 +0,0 @@ -from collections import OrderedDict -from typing import Tuple, Union - -import numpy as np -import torch -import torch.nn.functional as F -from torch import nn - - -class Bottleneck(nn.Module): - expansion = 4 - - def __init__(self, inplanes, planes, stride=1): - super().__init__() - - # all conv layers have stride 1. an avgpool is performed after the second convolution when stride > 1 - self.conv1 = nn.Conv2d(inplanes, planes, 1, bias=False) - self.bn1 = nn.BatchNorm2d(planes) - self.relu1 = nn.ReLU(inplace=True) - - self.conv2 = nn.Conv2d(planes, planes, 3, padding=1, bias=False) - self.bn2 = nn.BatchNorm2d(planes) - self.relu2 = nn.ReLU(inplace=True) - - self.avgpool = nn.AvgPool2d(stride) if stride > 1 else nn.Identity() - - self.conv3 = nn.Conv2d(planes, planes * self.expansion, 1, bias=False) - self.bn3 = nn.BatchNorm2d(planes * self.expansion) - self.relu3 = nn.ReLU(inplace=True) - - self.downsample = None - self.stride = stride - - if stride > 1 or inplanes != planes * Bottleneck.expansion: - # downsampling layer is prepended with an avgpool, and the subsequent convolution has stride 1 - self.downsample = nn.Sequential(OrderedDict([ - ("-1", nn.AvgPool2d(stride)), - ("0", nn.Conv2d(inplanes, planes * self.expansion, 1, stride=1, bias=False)), - ("1", nn.BatchNorm2d(planes * self.expansion)) - ])) - - def forward(self, x: torch.Tensor): - identity = x - - out = self.relu1(self.bn1(self.conv1(x))) - out = self.relu2(self.bn2(self.conv2(out))) - out = self.avgpool(out) - out = self.bn3(self.conv3(out)) - - if self.downsample is not None: - identity = self.downsample(x) - - out += identity - out = self.relu3(out) - return out - - -class AttentionPool2d(nn.Module): - def __init__(self, spacial_dim: int, embed_dim: int, num_heads: int, output_dim: int = None): - super().__init__() - self.positional_embedding = nn.Parameter(torch.randn(spacial_dim ** 2 + 1, embed_dim) / embed_dim ** 0.5) - self.k_proj = nn.Linear(embed_dim, embed_dim) - self.q_proj = nn.Linear(embed_dim, embed_dim) - self.v_proj = nn.Linear(embed_dim, embed_dim) - self.c_proj = nn.Linear(embed_dim, output_dim or embed_dim) - self.num_heads = num_heads - - def forward(self, x): - x = x.flatten(start_dim=2).permute(2, 0, 1) # NCHW -> (HW)NC - x = torch.cat([x.mean(dim=0, keepdim=True), x], dim=0) # (HW+1)NC - x = x + self.positional_embedding[:, None, :].to(x.dtype) # (HW+1)NC - x, _ = F.multi_head_attention_forward( - query=x[:1], key=x, value=x, - embed_dim_to_check=x.shape[-1], - num_heads=self.num_heads, - q_proj_weight=self.q_proj.weight, - k_proj_weight=self.k_proj.weight, - v_proj_weight=self.v_proj.weight, - in_proj_weight=None, - in_proj_bias=torch.cat([self.q_proj.bias, self.k_proj.bias, self.v_proj.bias]), - bias_k=None, - bias_v=None, - add_zero_attn=False, - dropout_p=0, - out_proj_weight=self.c_proj.weight, - out_proj_bias=self.c_proj.bias, - use_separate_proj_weight=True, - training=self.training, - need_weights=False - ) - return x.squeeze(0) - - -class ModifiedResNet(nn.Module): - """ - A ResNet class that is similar to torchvision's but contains the following changes: - - There are now 3 "stem" convolutions as opposed to 1, with an average pool instead of a max pool. - - Performs anti-aliasing strided convolutions, where an avgpool is prepended to convolutions with stride > 1 - - The final pooling layer is a QKV attention instead of an average pool - """ - - def __init__(self, layers, output_dim, heads, input_resolution=224, width=64): - super().__init__() - self.output_dim = output_dim - self.input_resolution = input_resolution - - # the 3-layer stem - self.conv1 = nn.Conv2d(3, width // 2, kernel_size=3, stride=2, padding=1, bias=False) - self.bn1 = nn.BatchNorm2d(width // 2) - self.relu1 = nn.ReLU(inplace=True) - self.conv2 = nn.Conv2d(width // 2, width // 2, kernel_size=3, padding=1, bias=False) - self.bn2 = nn.BatchNorm2d(width // 2) - self.relu2 = nn.ReLU(inplace=True) - self.conv3 = nn.Conv2d(width // 2, width, kernel_size=3, padding=1, bias=False) - self.bn3 = nn.BatchNorm2d(width) - self.relu3 = nn.ReLU(inplace=True) - self.avgpool = nn.AvgPool2d(2) - - # residual layers - self._inplanes = width # this is a *mutable* variable used during construction - self.layer1 = self._make_layer(width, layers[0]) - self.layer2 = self._make_layer(width * 2, layers[1], stride=2) - self.layer3 = self._make_layer(width * 4, layers[2], stride=2) - self.layer4 = self._make_layer(width * 8, layers[3], stride=2) - - embed_dim = width * 32 # the ResNet feature dimension - self.attnpool = AttentionPool2d(input_resolution // 32, embed_dim, heads, output_dim) - - def _make_layer(self, planes, blocks, stride=1): - layers = [Bottleneck(self._inplanes, planes, stride)] - - self._inplanes = planes * Bottleneck.expansion - for _ in range(1, blocks): - layers.append(Bottleneck(self._inplanes, planes)) - - return nn.Sequential(*layers) - - def forward(self, x): - def stem(x): - x = self.relu1(self.bn1(self.conv1(x))) - x = self.relu2(self.bn2(self.conv2(x))) - x = self.relu3(self.bn3(self.conv3(x))) - x = self.avgpool(x) - return x - - x = x.type(self.conv1.weight.dtype) - x = stem(x) - x = self.layer1(x) - x = self.layer2(x) - x = self.layer3(x) - x = self.layer4(x) - x = self.attnpool(x) - - return x - - -class LayerNorm(nn.LayerNorm): - """Subclass torch's LayerNorm to handle fp16.""" - - def forward(self, x: torch.Tensor): - orig_type = x.dtype - ret = super().forward(x.type(torch.float32)) - return ret.type(orig_type) - - -class QuickGELU(nn.Module): - def forward(self, x: torch.Tensor): - return x * torch.sigmoid(1.702 * x) - - -class MultiheadAttentionAttrExtract(nn.Module): - ''' - Simple reimplementation of nn.MultiheadAttention with key, value return - ''' - - def __init__(self, embed_dim, n_head, attn_record=False): - super().__init__() - - self.in_proj_weight = nn.Parameter(torch.empty((3 * embed_dim, embed_dim))) - self.in_proj_bias = nn.Parameter(torch.empty(3 * embed_dim)) - self.out_proj = nn.Linear(embed_dim, embed_dim) - - self.n_head = n_head - self.attr = {} - - # recordings - self.attn_record = attn_record - self.aff = None - - def pop_attr(self): - if (not self.attr): - return None - ret = self.get_attr() - self.attr.clear() - return ret - - def get_attr(self): - return {k: self.attr[k] for k in self.attr} - - def set_attr(self, q, k, v, out): - self.attr = dict(q=q, k=k, v=v, out=out) - - def forward(self, x, attn_mask=None): - self.pop_attr() - x = x.transpose(0, 1) - q, k, v = F.linear(x, self.in_proj_weight, self.in_proj_bias).chunk(3, dim=-1) - - view_as = (*q.shape[:2], self.n_head, -1) - q = q.view(*view_as) - k = k.view(*view_as) - v = v.view(*view_as) - - aff = torch.einsum('nqhc,nkhc->nqkh', q / (q.size(-1) ** 0.5), k) - if (not type(attn_mask) == type(None)): - aff += attn_mask.unsqueeze(-1) - aff = aff.softmax(dim=-2) - mix = torch.einsum('nqlh,nlhc->nqhc', aff, v) - - out = self.out_proj(mix.flatten(-2)) - self.set_attr(q, k, v, out) - - if self.attn_record: - self.aff = aff - out = out.transpose(0, 1) - return out - - -class ResidualAttentionBlock(nn.Module): - def __init__(self, d_model: int, n_head: int, attn_mask: torch.Tensor = None): - super().__init__() - # origin - # self.attn = nn.MultiheadAttention(d_model, n_head) - - # modified - self.attn = MultiheadAttentionAttrExtract(d_model, n_head) - - self.ln_1 = LayerNorm(d_model) - self.mlp = nn.Sequential(OrderedDict([ - ("c_fc", nn.Linear(d_model, d_model * 4)), - ("gelu", QuickGELU()), - ("c_proj", nn.Linear(d_model * 4, d_model)) - ])) - self.ln_2 = LayerNorm(d_model) - self.attn_mask = attn_mask - - def attention(self, x: torch.Tensor): - # origin - # self.attn_mask = self.attn_mask.to(dtype=x.dtype, device=x.device) if self.attn_mask is not None else None - # return self.attn(x, x, x, need_weights=False, attn_mask=self.attn_mask)[0] - - # modified - self.attn_mask = self.attn_mask.to(dtype=x.dtype, device=x.device) if self.attn_mask is not None else None - return self.attn(x, self.attn_mask) - - def forward(self, x: torch.Tensor): - x = x + self.attention(self.ln_1(x)) - x = x + self.mlp(self.ln_2(x)) - return x - - -class Transformer(nn.Module): - def __init__(self, width: int, layers: int, heads: int, attn_mask: torch.Tensor = None): - super().__init__() - self.width = width - self.heads = heads - self.layers = layers - self.resblocks = nn.Sequential(*[ResidualAttentionBlock(width, heads, attn_mask) for _ in range(layers)]) - - def forward(self, x: torch.Tensor): - return self.resblocks(x) - - -class VisionTransformer(nn.Module): - def __init__(self, input_resolution: int, patch_size: int, width: int, layers: int, heads: int, output_dim: int): - super().__init__() - self.input_resolution = input_resolution - self.patch_size = patch_size - self.output_dim = output_dim - self.conv1 = nn.Conv2d(in_channels=3, out_channels=width, kernel_size=patch_size, stride=patch_size, bias=False) - - scale = width ** -0.5 - self.class_embedding = nn.Parameter(scale * torch.randn(width)) - self.positional_embedding = nn.Parameter(scale * torch.randn((input_resolution // patch_size) ** 2 + 1, width)) - self.ln_pre = LayerNorm(width) - - self.transformer = Transformer(width, layers, heads) - - self.ln_post = LayerNorm(width) - self.proj = nn.Parameter(scale * torch.randn(width, output_dim)) - - def forward(self, x: torch.Tensor): - x = self.conv1(x) # shape = [*, width, grid, grid] - x = x.reshape(x.shape[0], x.shape[1], -1) # shape = [*, width, grid ** 2] - x = x.permute(0, 2, 1) # shape = [*, grid ** 2, width] - x = torch.cat( - [ - self.class_embedding.to(x.dtype) + - torch.zeros( - x.shape[0], - 1, - x.shape[-1], - dtype=x.dtype, - device=x.device - ), - x - ], - dim=1 - ) # shape = [*, grid ** 2 + 1, width] - x = x + self.positional_embedding.to(x.dtype) - x = self.ln_pre(x) - - x = x.permute(1, 0, 2) # NLD -> LND - x = self.transformer(x) - x = x.permute(1, 0, 2) # LND -> NLD - - x = self.ln_post(x[:, 0, :]) - - if self.proj is not None: - x = x @ self.proj - - return x - - -class CLIP(nn.Module): - def __init__( - self, - embed_dim: int, - # vision - image_resolution: int, - vision_layers: Union[Tuple[int, int, int, int], int], - vision_width: int, - vision_patch_size: int, - # text - context_length: int, - vocab_size: int, - transformer_width: int, - transformer_heads: int, - transformer_layers: int - ): - super().__init__() - - self.context_length = context_length - - if isinstance(vision_layers, (tuple, list)): - vision_heads = vision_width * 32 // 64 - self.visual = ModifiedResNet( - layers=vision_layers, - output_dim=embed_dim, - heads=vision_heads, - input_resolution=image_resolution, - width=vision_width - ) - else: - vision_heads = vision_width // 64 - self.visual = VisionTransformer( - input_resolution=image_resolution, - patch_size=vision_patch_size, - width=vision_width, - layers=vision_layers, - heads=vision_heads, - output_dim=embed_dim - ) - - self.transformer = Transformer( - width=transformer_width, - layers=transformer_layers, - heads=transformer_heads, - attn_mask=self.build_attention_mask() - ) - - self.vocab_size = vocab_size - self.token_embedding = nn.Embedding(vocab_size, transformer_width) - self.positional_embedding = nn.Parameter(torch.empty(self.context_length, transformer_width)) - self.ln_final = LayerNorm(transformer_width) - - self.text_projection = nn.Parameter(torch.empty(transformer_width, embed_dim)) - self.logit_scale = nn.Parameter(torch.ones([]) * np.log(1 / 0.07)) - - self.initialize_parameters() - - def initialize_parameters(self): - nn.init.normal_(self.token_embedding.weight, std=0.02) - nn.init.normal_(self.positional_embedding, std=0.01) - - if isinstance(self.visual, ModifiedResNet): - if self.visual.attnpool is not None: - std = self.visual.attnpool.c_proj.in_features ** -0.5 - nn.init.normal_(self.visual.attnpool.q_proj.weight, std=std) - nn.init.normal_(self.visual.attnpool.k_proj.weight, std=std) - nn.init.normal_(self.visual.attnpool.v_proj.weight, std=std) - nn.init.normal_(self.visual.attnpool.c_proj.weight, std=std) - - for resnet_block in [self.visual.layer1, self.visual.layer2, self.visual.layer3, self.visual.layer4]: - for name, param in resnet_block.named_parameters(): - if name.endswith("bn3.weight"): - nn.init.zeros_(param) - - proj_std = (self.transformer.width ** -0.5) * ((2 * self.transformer.layers) ** -0.5) - attn_std = self.transformer.width ** -0.5 - fc_std = (2 * self.transformer.width) ** -0.5 - for block in self.transformer.resblocks: - nn.init.normal_(block.attn.in_proj_weight, std=attn_std) - nn.init.normal_(block.attn.out_proj.weight, std=proj_std) - nn.init.normal_(block.mlp.c_fc.weight, std=fc_std) - nn.init.normal_(block.mlp.c_proj.weight, std=proj_std) - - if self.text_projection is not None: - nn.init.normal_(self.text_projection, std=self.transformer.width ** -0.5) - - def build_attention_mask(self): - # lazily create causal attention mask, with full attention between the vision tokens - # pytorch uses additive attention mask; fill with -inf - mask = torch.empty(self.context_length, self.context_length) - mask.fill_(float("-inf")) - mask.triu_(1) # zero out the lower diagonal - return mask - - @property - def dtype(self): - return self.visual.conv1.weight.dtype - - def encode_image(self, image): - return self.visual(image.type(self.dtype)) - - def encode_text(self, text): - x = self.token_embedding(text).type(self.dtype) # [batch_size, n_ctx, d_model] - - x = x + self.positional_embedding.type(self.dtype) - x = x.permute(1, 0, 2) # NLD -> LND - x = self.transformer(x) - x = x.permute(1, 0, 2) # LND -> NLD - x = self.ln_final(x).type(self.dtype) - - # x.shape = [batch_size, n_ctx, transformer.width] - # take features from the eot embedding (eot_token is the highest number in each sequence) - x = x[torch.arange(x.shape[0]), text.argmax(dim=-1)] @ self.text_projection - - return x - - def forward(self, image, text): - image_features = self.encode_image(image) - text_features = self.encode_text(text) - - # normalized features - image_features = image_features / image_features.norm(dim=1, keepdim=True) - text_features = text_features / text_features.norm(dim=1, keepdim=True) - - # cosine similarity as logits - logit_scale = self.logit_scale.exp() - logits_per_image = logit_scale * image_features @ text_features.t() - logits_per_text = logits_per_image.t() - - # shape = [global_batch_size, global_batch_size] - return logits_per_image, logits_per_text - - -def convert_weights(model: nn.Module): - """Convert applicable model parameters to fp16""" - - def _convert_weights_to_fp16(l): - if isinstance(l, (nn.Conv1d, nn.Conv2d, nn.Linear)): - l.weight.data = l.weight.data.half() - if l.bias is not None: - l.bias.data = l.bias.data.half() - - if isinstance(l, nn.MultiheadAttention): - for attr in [*[f"{s}_proj_weight" for s in ["in", "q", "k", "v"]], "in_proj_bias", "bias_k", "bias_v"]: - tensor = getattr(l, attr) - if tensor is not None: - tensor.data = tensor.data.half() - - for name in ["text_projection", "proj"]: - if hasattr(l, name): - attr = getattr(l, name) - if attr is not None: - attr.data = attr.data.half() - - model.apply(_convert_weights_to_fp16) - - -def build_model(state_dict: dict): - vit = "visual.proj" in state_dict - - if vit: - vision_width = state_dict["visual.conv1.weight"].shape[0] - vision_layers = len( - [ - k for k in state_dict.keys() - if k.startswith("visual.") and k.endswith(".attn.in_proj_weight") - ] - ) - vision_patch_size = state_dict["visual.conv1.weight"].shape[-1] - grid_size = round((state_dict["visual.positional_embedding"].shape[0] - 1) ** 0.5) - image_resolution = vision_patch_size * grid_size - else: - counts: list = [ - len( - set(k.split(".")[2] - for k in state_dict - if k.startswith(f"visual.layer{b}")) - ) - for b in [1, 2, 3, 4] - ] - vision_layers = tuple(counts) - vision_width = state_dict["visual.layer1.0.conv1.weight"].shape[0] - output_width = round((state_dict["visual.attnpool.positional_embedding"].shape[0] - 1) ** 0.5) - vision_patch_size = None - assert output_width ** 2 + 1 == state_dict["visual.attnpool.positional_embedding"].shape[0] - image_resolution = output_width * 32 - - embed_dim = state_dict["text_projection"].shape[1] - context_length = state_dict["positional_embedding"].shape[0] - vocab_size = state_dict["token_embedding.weight"].shape[0] - transformer_width = state_dict["ln_final.weight"].shape[0] - transformer_heads = transformer_width // 64 - transformer_layers = len(set(k.split(".")[2] for k in state_dict if k.startswith("transformer.resblocks"))) - - model = CLIP( - embed_dim, - image_resolution, vision_layers, vision_width, vision_patch_size, - context_length, vocab_size, transformer_width, transformer_heads, transformer_layers - ) - - for key in ["input_resolution", "context_length", "vocab_size"]: - if key in state_dict: - del state_dict[key] - - convert_weights(model) - model.load_state_dict(state_dict) - return model.eval() diff --git a/video/dfd-fcg/model_code/src/clip/model_syno.py b/video/dfd-fcg/model_code/src/clip/model_syno.py deleted file mode 100644 index 7581ca8d5e07016d76902e11750265a51abb8366..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/clip/model_syno.py +++ /dev/null @@ -1,703 +0,0 @@ -import torch -import random -import pickle -import numpy as np -import torch.nn.functional as F -from torch import nn - - -from enum import IntEnum, auto, IntFlag -from collections import OrderedDict -from typing import Tuple, Union, List - - -class Bottleneck(nn.Module): - expansion = 4 - - def __init__(self, inplanes, planes, stride=1): - super().__init__() - - # all conv layers have stride 1. an avgpool is performed after the second convolution when stride > 1 - self.conv1 = nn.Conv2d(inplanes, planes, 1, bias=False) - self.bn1 = nn.BatchNorm2d(planes) - self.relu1 = nn.ReLU(inplace=True) - - self.conv2 = nn.Conv2d(planes, planes, 3, padding=1, bias=False) - self.bn2 = nn.BatchNorm2d(planes) - self.relu2 = nn.ReLU(inplace=True) - - self.avgpool = nn.AvgPool2d(stride) if stride > 1 else nn.Identity() - - self.conv3 = nn.Conv2d(planes, planes * self.expansion, 1, bias=False) - self.bn3 = nn.BatchNorm2d(planes * self.expansion) - self.relu3 = nn.ReLU(inplace=True) - - self.downsample = None - self.stride = stride - - if stride > 1 or inplanes != planes * Bottleneck.expansion: - # downsampling layer is prepended with an avgpool, and the subsequent convolution has stride 1 - self.downsample = nn.Sequential(OrderedDict([ - ("-1", nn.AvgPool2d(stride)), - ("0", nn.Conv2d(inplanes, planes * - self.expansion, 1, stride=1, bias=False)), - ("1", nn.BatchNorm2d(planes * self.expansion)) - ])) - - def forward(self, x: torch.Tensor): - identity = x - - out = self.relu1(self.bn1(self.conv1(x))) - out = self.relu2(self.bn2(self.conv2(out))) - out = self.avgpool(out) - out = self.bn3(self.conv3(out)) - - if self.downsample is not None: - identity = self.downsample(x) - - out += identity - out = self.relu3(out) - return out - - -class AttentionPool2d(nn.Module): - def __init__(self, spacial_dim: int, embed_dim: int, num_heads: int, output_dim: int = None): - super().__init__() - self.positional_embedding = nn.Parameter(torch.randn( - spacial_dim ** 2 + 1, embed_dim) / embed_dim ** 0.5) - self.k_proj = nn.Linear(embed_dim, embed_dim) - self.q_proj = nn.Linear(embed_dim, embed_dim) - self.v_proj = nn.Linear(embed_dim, embed_dim) - self.c_proj = nn.Linear(embed_dim, output_dim or embed_dim) - self.num_heads = num_heads - - def forward(self, x): - x = x.flatten(start_dim=2).permute(2, 0, 1) # NCHW -> (HW)NC - x = torch.cat([x.mean(dim=0, keepdim=True), x], dim=0) # (HW+1)NC - x = x + self.positional_embedding[:, None, :].to(x.dtype) # (HW+1)NC - x, _ = F.multi_head_attention_forward( - query=x[:1], key=x, value=x, - embed_dim_to_check=x.shape[-1], - num_heads=self.num_heads, - q_proj_weight=self.q_proj.weight, - k_proj_weight=self.k_proj.weight, - v_proj_weight=self.v_proj.weight, - in_proj_weight=None, - in_proj_bias=torch.cat( - [self.q_proj.bias, self.k_proj.bias, self.v_proj.bias]), - bias_k=None, - bias_v=None, - add_zero_attn=False, - dropout_p=0, - out_proj_weight=self.c_proj.weight, - out_proj_bias=self.c_proj.bias, - use_separate_proj_weight=True, - training=self.training, - need_weights=False - ) - return x.squeeze(0) - - -class ModifiedResNet(nn.Module): - """ - A ResNet class that is similar to torchvision's but contains the following changes: - - There are now 3 "stem" convolutions as opposed to 1, with an average pool instead of a max pool. - - Performs anti-aliasing strided convolutions, where an avgpool is prepended to convolutions with stride > 1 - - The final pooling layer is a QKV attention instead of an average pool - """ - - def __init__(self, layers, output_dim, heads, input_resolution=224, width=64): - super().__init__() - self.output_dim = output_dim - self.input_resolution = input_resolution - - # the 3-layer stem - self.conv1 = nn.Conv2d(3, width // 2, kernel_size=3, - stride=2, padding=1, bias=False) - self.bn1 = nn.BatchNorm2d(width // 2) - self.relu1 = nn.ReLU(inplace=True) - self.conv2 = nn.Conv2d(width // 2, width // 2, - kernel_size=3, padding=1, bias=False) - self.bn2 = nn.BatchNorm2d(width // 2) - self.relu2 = nn.ReLU(inplace=True) - self.conv3 = nn.Conv2d( - width // 2, width, kernel_size=3, padding=1, bias=False) - self.bn3 = nn.BatchNorm2d(width) - self.relu3 = nn.ReLU(inplace=True) - self.avgpool = nn.AvgPool2d(2) - - # residual layers - self._inplanes = width # this is a *mutable* variable used during construction - self.layer1 = self._make_layer(width, layers[0]) - self.layer2 = self._make_layer(width * 2, layers[1], stride=2) - self.layer3 = self._make_layer(width * 4, layers[2], stride=2) - self.layer4 = self._make_layer(width * 8, layers[3], stride=2) - - embed_dim = width * 32 # the ResNet feature dimension - self.attnpool = AttentionPool2d( - input_resolution // 32, embed_dim, heads, output_dim) - - def _make_layer(self, planes, blocks, stride=1): - layers = [Bottleneck(self._inplanes, planes, stride)] - - self._inplanes = planes * Bottleneck.expansion - for _ in range(1, blocks): - layers.append(Bottleneck(self._inplanes, planes)) - - return nn.Sequential(*layers) - - def forward(self, x): - def stem(x): - x = self.relu1(self.bn1(self.conv1(x))) - x = self.relu2(self.bn2(self.conv2(x))) - x = self.relu3(self.bn3(self.conv3(x))) - x = self.avgpool(x) - return x - - x = x.type(self.conv1.weight.dtype) - x = stem(x) - x = self.layer1(x) - x = self.layer2(x) - x = self.layer3(x) - x = self.layer4(x) - x = self.attnpool(x) - - return x - - -class LayerNorm(nn.LayerNorm): - """Subclass torch's LayerNorm to handle fp16.""" - - def forward(self, x: torch.Tensor): - orig_type = x.dtype - ret = super().forward(x.type(torch.float32)) - return ret.type(orig_type) - - -class QuickGELU(nn.Module): - def forward(self, x: torch.Tensor): - return x * torch.sigmoid(1.702 * x) - - -############# ORIGINAL ############# -# preserve for text modules -class ResidualAttentionBlock(nn.Module): - def __init__(self, d_model: int, n_head: int, attn_mask: torch.Tensor = None): - super().__init__() - - self.attn = nn.MultiheadAttention(d_model, n_head) - self.ln_1 = LayerNorm(d_model) - self.mlp = nn.Sequential(OrderedDict([ - ("c_fc", nn.Linear(d_model, d_model * 4)), - ("gelu", QuickGELU()), - ("c_proj", nn.Linear(d_model * 4, d_model)) - ])) - self.ln_2 = LayerNorm(d_model) - self.attn_mask = attn_mask - - def attention(self, x: torch.Tensor): - self.attn_mask = self.attn_mask.to( - dtype=x.dtype, device=x.device) if self.attn_mask is not None else None - return self.attn(x, x, x, need_weights=False, attn_mask=self.attn_mask)[0] - - def forward(self, x: torch.Tensor): - x = x + self.attention(self.ln_1(x)) - x = x + self.mlp(self.ln_2(x)) - return x - - -class Transformer(nn.Module): - def __init__(self, width: int, layers: int, heads: int, attn_mask: torch.Tensor = None): - super().__init__() - self.width = width - self.layers = layers - self.resblocks = nn.Sequential( - *[ResidualAttentionBlock(width, heads, attn_mask) for _ in range(layers)]) - - def forward(self, x: torch.Tensor): - return self.resblocks(x) -#################################### - - -class MultiheadAttentionAttrExtract(nn.Module): - ''' - Simple reimplementation of nn.MultiheadAttention with key, value return - ''' - - def __init__( - self, - embed_dim, - n_head, - attn_record=False - ): - super().__init__() - - self.in_proj_weight = nn.Parameter(torch.empty((3 * embed_dim, embed_dim))) - self.in_proj_bias = nn.Parameter(torch.empty(3 * embed_dim)) - self.out_proj = nn.Linear(embed_dim, embed_dim) - - self.n_head = n_head - - # recordings - self.attn_record = attn_record - self.aff = None - - def forward( - self, - x: torch.Tensor - ): - # x.shape = (batch, frames, grid**2 + 1, width) - batch, frames = x.shape[:2] - - # Original ViT Self-Attention - q, k, v = F.linear( - x, - self.in_proj_weight, - self.in_proj_bias - ).chunk(3, dim=-1) - - view_as = (*q.shape[:3], self.n_head, -1) - - q = q.view(*view_as) - k = k.view(*view_as) - v = v.view(*view_as) - - aff = torch.einsum('ntqhc,ntkhc->ntqkh', q / (q.size(-1) ** 0.5), k) - - aff = aff.softmax(dim=-2) - mix = torch.einsum('ntqlh,ntlhc->ntqhc', aff, v) - - out = self.out_proj(mix.flatten(-2)) - - # record attentions - if self.attn_record: - self.aff = aff - - return dict( - q=q, - k=k, - v=v, - out=out - ) - - -class VResidualAttentionBlock(nn.Module): - def __init__( - self, - d_model: int, - n_head: int, - mlp_ratio: int, - block_index: int, - attn_record: bool = False, - store_attrs: List[str] = [], - ): - super().__init__() - # modified - self.attn = MultiheadAttentionAttrExtract( - d_model, - n_head, - attn_record=attn_record - ) - - self.block_index = block_index - self.store_attrs = store_attrs - - self.ln_1 = LayerNorm(d_model) - self.mlp = nn.Sequential(OrderedDict([ - ("c_fc", nn.Linear(d_model, int(d_model * mlp_ratio))), - ("gelu", QuickGELU()), - ("c_proj", nn.Linear(int(d_model * mlp_ratio), d_model)) - ])) - self.ln_2 = LayerNorm(d_model) - - # preserve attrs - self.attr = {} - - def pop_attr(self): - ret = self.get_attr() - self.attr.clear() - return ret - - def get_attr(self): - return {k: self.attr[k] for k in self.attr} - - def set_attr(self, **attr): - self.attr = { - k: attr[k] - for k in attr - if k in self.store_attrs - } - - def attention(self, x: torch.Tensor): - return self.attn(x) - - def forward(self, x: torch.Tensor): - self.pop_attr() - data = self.attention(self.ln_1(x)) - - x = x + data["out"] - x = x + self.mlp(self.ln_2(x)) - - data["emb"] = x - self.set_attr(**data) - - return data - - -class VTransformer(nn.Module): - def __init__( - self, - width: int, - layers: int, - heads: int, - mlp_ratio: int, - num_frames: int, - attn_record: bool = False, - store_attrs: List[str] = [] - ): - super().__init__() - self.width = width - self.heads = heads - self.layers = layers - - self.resblocks = nn.Sequential(*[ - VResidualAttentionBlock( - d_model=width, - n_head=heads, - block_index=i, - mlp_ratio=mlp_ratio, - attn_record=attn_record, - store_attrs=store_attrs - ) - for i in range(layers) - ]) - - def forward(self, x: torch.Tensor): - for blk in self.resblocks: - x = blk(x)["emb"] - return x - - -class VisionTransformer(nn.Module): - def __init__( - self, - input_resolution: int, - patch_size: int, - width: int, - layers: int, - heads: int, - output_dim: int, - mlp_ratio: int, - num_frames: int, - attn_record: bool = False, - store_attrs: List[str] = [], - ): - super().__init__() - self.input_resolution = input_resolution - self.patch_size = patch_size - self.patch_num = (input_resolution // patch_size) ** 2 - self.output_dim = output_dim - - self.conv1 = nn.Conv2d( - in_channels=3, - out_channels=width, - kernel_size=patch_size, - stride=patch_size, - bias=False - ) - - scale = width ** -0.5 - self.class_embedding = nn.Parameter(scale * torch.randn(width)) - self.positional_embedding = nn.Parameter(scale * torch.randn((input_resolution // patch_size) ** 2 + 1, width)) - self.ln_pre = LayerNorm(width) - - self.transformer = VTransformer( - # structure - width, - layers, - heads, - mlp_ratio, - num_frames=num_frames, - # generic - attn_record=attn_record, - store_attrs=store_attrs - ) - - self.ln_post = LayerNorm(width) - self.proj = nn.Parameter(scale * torch.randn(width, output_dim)) - - def _prepare(self, x: torch.Tensor): - batch, frames = x.shape[:2] - # x.shape = [batch, frames, 3, px, px] - x = self.conv1(x.flatten(0, 1)).unflatten(0, (batch, frames)) - # x.shape = [batch, frames, width, grid, grid] - x = x.flatten(-2).transpose(-1, -2) - # x.shape = [batch, frames, grid ** 2, width] - x = torch.cat( - [ - self.class_embedding.to(x.dtype) + - torch.zeros( - x.shape[0], - x.shape[1], - 1, - x.shape[-1], - dtype=x.dtype, - device=x.device - ), - x - ], - dim=-2 - ) # shape = [batch, frames, grid ** 2 + 1, width] - x = x + self.positional_embedding.to(x.dtype) - x = self.ln_pre(x) - return x - - def _transformer(self, x: torch.Tensor): - x = self.transformer(x) - return x - - def _finalize(self, x: torch.Tensor): - x = self.ln_post(x[..., 0, :]) - - if self.proj is not None: - x = x @ self.proj - return x - - def forward(self, x: torch.Tensor): - x = self._prepare(x) - x = self._transformer(x) - x = self._finalize(x) - return x - - -class CLIP(nn.Module): - def __init__( - self, - embed_dim: int, - # vision - image_resolution: int, - vision_layers: Union[Tuple[int, int, int, int], int], - vision_width: int, - vision_patch_size: int, - vision_mlp_ratio: int, - # text - context_length: int, - vocab_size: int, - transformer_width: int, - transformer_heads: int, - transformer_layers: int, - store_attrs: List[str] = [], - # video - num_frames=1, - **model_kargs - ): - super().__init__() - - self.context_length = context_length - - if isinstance(vision_layers, (tuple, list)): - vision_heads = vision_width * 32 // 64 - self.visual = ModifiedResNet( - layers=vision_layers, - output_dim=embed_dim, - heads=vision_heads, - input_resolution=image_resolution, - width=vision_width - ) - else: - vision_heads = vision_width // 64 - self.visual = VisionTransformer( - num_frames=num_frames, - input_resolution=image_resolution, - patch_size=vision_patch_size, - width=vision_width, - layers=vision_layers, - heads=vision_heads, - output_dim=embed_dim, - mlp_ratio=vision_mlp_ratio, - store_attrs=store_attrs, - ** model_kargs - ) - - self.transformer = Transformer( - width=transformer_width, - layers=transformer_layers, - heads=transformer_heads, - attn_mask=self.build_attention_mask() - ) - - self.vocab_size = vocab_size - self.token_embedding = nn.Embedding(vocab_size, transformer_width) - self.positional_embedding = nn.Parameter( - torch.empty(self.context_length, transformer_width)) - self.ln_final = LayerNorm(transformer_width) - - self.text_projection = nn.Parameter( - torch.empty(transformer_width, embed_dim)) - self.logit_scale = nn.Parameter(torch.ones([]) * np.log(1 / 0.07)) - - self.initialize_parameters() - - def initialize_parameters(self): - nn.init.normal_(self.token_embedding.weight, std=0.02) - nn.init.normal_(self.positional_embedding, std=0.01) - - if isinstance(self.visual, ModifiedResNet): - if self.visual.attnpool is not None: - std = self.visual.attnpool.c_proj.in_features ** -0.5 - nn.init.normal_(self.visual.attnpool.q_proj.weight, std=std) - nn.init.normal_(self.visual.attnpool.k_proj.weight, std=std) - nn.init.normal_(self.visual.attnpool.v_proj.weight, std=std) - nn.init.normal_(self.visual.attnpool.c_proj.weight, std=std) - - for resnet_block in [self.visual.layer1, self.visual.layer2, self.visual.layer3, self.visual.layer4]: - for name, param in resnet_block.named_parameters(): - if name.endswith("bn3.weight"): - nn.init.zeros_(param) - - proj_std = (self.transformer.width ** -0.5) * \ - ((2 * self.transformer.layers) ** -0.5) - attn_std = self.transformer.width ** -0.5 - fc_std = (2 * self.transformer.width) ** -0.5 - for block in self.transformer.resblocks: - nn.init.normal_(block.attn.in_proj_weight, std=attn_std) - nn.init.normal_(block.attn.out_proj.weight, std=proj_std) - nn.init.normal_(block.mlp.c_fc.weight, std=fc_std) - nn.init.normal_(block.mlp.c_proj.weight, std=proj_std) - - if self.text_projection is not None: - nn.init.normal_(self.text_projection, - std=self.transformer.width ** -0.5) - - def build_attention_mask(self): - # lazily create causal attention mask, with full attention between the vision tokens - # pytorch uses additive attention mask; fill with -inf - mask = torch.empty(self.context_length, self.context_length) - mask.fill_(float("-inf")) - mask.triu_(1) # zero out the lower diagonal - return mask - - @property - def dtype(self): - return self.visual.conv1.weight.dtype - - def encode_frames(self, image): - return self.visual(image.type(self.dtype)) - - def encode_text(self, text): - x = self.token_embedding(text).type( - self.dtype) # [batch_size, n_ctx, d_model] - - x = x + self.positional_embedding.type(self.dtype) - x = x.permute(1, 0, 2) # NLD -> LND - x = self.transformer(x) - x = x.permute(1, 0, 2) # LND -> NLD - x = self.ln_final(x).type(self.dtype) - - # x.shape = [batch_size, n_ctx, transformer.width] - # take features from the eot embedding (eot_token is the highest number in each sequence) - x = x[torch.arange(x.shape[0]), text.argmax(dim=-1) - ] @ self.text_projection - - return x - - def forward(self, image, text): - image_features = self.encode_frames(image) - text_features = self.encode_text(text) - - # normalized features - image_features = image_features / image_features.norm(dim=-1, keepdim=True) - text_features = text_features / text_features.norm(dim=-1, keepdim=True) - - # cosine similarity as logits - logit_scale = self.logit_scale.exp() - logits_per_image = logit_scale * image_features @ text_features.transpose(-1, -2) - logits_per_text = logits_per_image.transpose(-1, -2) - - # shape = [global_batch_size, global_batch_size] - return logits_per_image, logits_per_text - - -def convert_weights(model: nn.Module): - """Convert applicable model parameters to fp16""" - - def _convert_weights_to_fp16(l): - if isinstance(l, (nn.Conv1d, nn.Conv2d, nn.Linear)): - l.weight.data = l.weight.data.half() - if l.bias is not None: - l.bias.data = l.bias.data.half() - - if isinstance(l, nn.MultiheadAttention): - for attr in [*[f"{s}_proj_weight" for s in ["in", "q", "k", "v"]], "in_proj_bias", "bias_k", "bias_v"]: - tensor = getattr(l, attr) - if tensor is not None: - tensor.data = tensor.data.half() - - for name in ["text_projection", "proj"]: - if hasattr(l, name): - attr = getattr(l, name) - if attr is not None: - attr.data = attr.data.half() - - model.apply(_convert_weights_to_fp16) - - -def build_model(state_dict: dict, **model_kargs): - vit = "visual.proj" in state_dict - - if vit: - vision_width = state_dict["visual.conv1.weight"].shape[0] - vision_layers = len( - [ - k for k in state_dict.keys() - if k.startswith("visual.") and k.endswith(".attn.in_proj_weight") - ] - ) - vision_patch_size = state_dict["visual.conv1.weight"].shape[-1] - vision_mlp_ratio = ( - state_dict["visual.transformer.resblocks.0.mlp.c_fc.weight"].shape[0] / - state_dict["visual.transformer.resblocks.0.mlp.c_fc.weight"].shape[1] - ) - grid_size = round( - (state_dict["visual.positional_embedding"].shape[0] - 1) ** 0.5) - image_resolution = vision_patch_size * grid_size - else: - counts: list = [ - len( - set(k.split(".")[2] - for k in state_dict - if k.startswith(f"visual.layer{b}")) - ) - for b in [1, 2, 3, 4] - ] - vision_layers = tuple(counts) - vision_width = state_dict["visual.layer1.0.conv1.weight"].shape[0] - output_width = round( - (state_dict["visual.attnpool.positional_embedding"].shape[0] - 1) ** 0.5) - vision_patch_size = None - vision_mlp_ratio = None - assert output_width ** 2 + \ - 1 == state_dict["visual.attnpool.positional_embedding"].shape[0] - image_resolution = output_width * 32 - - embed_dim = state_dict["text_projection"].shape[1] - context_length = state_dict["positional_embedding"].shape[0] - vocab_size = state_dict["token_embedding.weight"].shape[0] - transformer_width = state_dict["ln_final.weight"].shape[0] - transformer_heads = transformer_width // 64 - transformer_layers = len(set(k.split(".")[2] for k in state_dict if k.startswith("transformer.resblocks"))) - - model = CLIP( - embed_dim, - image_resolution, vision_layers, vision_width, vision_patch_size, vision_mlp_ratio, - context_length, vocab_size, transformer_width, transformer_heads, transformer_layers, - **model_kargs - ) - - for key in ["input_resolution", "context_length", "vocab_size"]: - if key in state_dict: - del state_dict[key] - - convert_weights(model) - model.load_state_dict(state_dict, strict=False) - return model.eval() diff --git a/video/dfd-fcg/model_code/src/clip/simple_tokenizer.py b/video/dfd-fcg/model_code/src/clip/simple_tokenizer.py deleted file mode 100755 index 0a66286b7d5019c6e221932a813768038f839c91..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/clip/simple_tokenizer.py +++ /dev/null @@ -1,132 +0,0 @@ -import gzip -import html -import os -from functools import lru_cache - -import ftfy -import regex as re - - -@lru_cache() -def default_bpe(): - return os.path.join(os.path.dirname(os.path.abspath(__file__)), "bpe_simple_vocab_16e6.txt.gz") - - -@lru_cache() -def bytes_to_unicode(): - """ - Returns list of utf-8 byte and a corresponding list of unicode strings. - The reversible bpe codes work on unicode strings. - This means you need a large # of unicode characters in your vocab if you want to avoid UNKs. - When you're at something like a 10B token dataset you end up needing around 5K for decent coverage. - This is a signficant percentage of your normal, say, 32K bpe vocab. - To avoid that, we want lookup tables between utf-8 bytes and unicode strings. - And avoids mapping to whitespace/control characters the bpe code barfs on. - """ - bs = list(range(ord("!"), ord("~")+1))+list(range(ord("¡"), ord("¬")+1))+list(range(ord("®"), ord("ÿ")+1)) - cs = bs[:] - n = 0 - for b in range(2**8): - if b not in bs: - bs.append(b) - cs.append(2**8+n) - n += 1 - cs = [chr(n) for n in cs] - return dict(zip(bs, cs)) - - -def get_pairs(word): - """Return set of symbol pairs in a word. - Word is represented as tuple of symbols (symbols being variable-length strings). - """ - pairs = set() - prev_char = word[0] - for char in word[1:]: - pairs.add((prev_char, char)) - prev_char = char - return pairs - - -def basic_clean(text): - text = ftfy.fix_text(text) - text = html.unescape(html.unescape(text)) - return text.strip() - - -def whitespace_clean(text): - text = re.sub(r'\s+', ' ', text) - text = text.strip() - return text - - -class SimpleTokenizer(object): - def __init__(self, bpe_path: str = default_bpe()): - self.byte_encoder = bytes_to_unicode() - self.byte_decoder = {v: k for k, v in self.byte_encoder.items()} - merges = gzip.open(bpe_path).read().decode("utf-8").split('\n') - merges = merges[1:49152-256-2+1] - merges = [tuple(merge.split()) for merge in merges] - vocab = list(bytes_to_unicode().values()) - vocab = vocab + [v+'' for v in vocab] - for merge in merges: - vocab.append(''.join(merge)) - vocab.extend(['<|startoftext|>', '<|endoftext|>']) - self.encoder = dict(zip(vocab, range(len(vocab)))) - self.decoder = {v: k for k, v in self.encoder.items()} - self.bpe_ranks = dict(zip(merges, range(len(merges)))) - self.cache = {'<|startoftext|>': '<|startoftext|>', '<|endoftext|>': '<|endoftext|>'} - self.pat = re.compile(r"""<\|startoftext\|>|<\|endoftext\|>|'s|'t|'re|'ve|'m|'ll|'d|[\p{L}]+|[\p{N}]|[^\s\p{L}\p{N}]+""", re.IGNORECASE) - - def bpe(self, token): - if token in self.cache: - return self.cache[token] - word = tuple(token[:-1]) + ( token[-1] + '',) - pairs = get_pairs(word) - - if not pairs: - return token+'' - - while True: - bigram = min(pairs, key = lambda pair: self.bpe_ranks.get(pair, float('inf'))) - if bigram not in self.bpe_ranks: - break - first, second = bigram - new_word = [] - i = 0 - while i < len(word): - try: - j = word.index(first, i) - new_word.extend(word[i:j]) - i = j - except: - new_word.extend(word[i:]) - break - - if word[i] == first and i < len(word)-1 and word[i+1] == second: - new_word.append(first+second) - i += 2 - else: - new_word.append(word[i]) - i += 1 - new_word = tuple(new_word) - word = new_word - if len(word) == 1: - break - else: - pairs = get_pairs(word) - word = ' '.join(word) - self.cache[token] = word - return word - - def encode(self, text): - bpe_tokens = [] - text = whitespace_clean(basic_clean(text)).lower() - for token in re.findall(self.pat, text): - token = ''.join(self.byte_encoder[b] for b in token.encode('utf-8')) - bpe_tokens.extend(self.encoder[bpe_token] for bpe_token in self.bpe(token).split(' ')) - return bpe_tokens - - def decode(self, tokens): - text = ''.join([self.decoder[token] for token in tokens]) - text = bytearray([self.byte_decoder[c] for c in text]).decode('utf-8', errors="replace").replace('', ' ') - return text diff --git a/video/dfd-fcg/model_code/src/dataset/base.py b/video/dfd-fcg/model_code/src/dataset/base.py deleted file mode 100644 index 05dd76a8819050b81575f76f593c59af2d04456c..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/dataset/base.py +++ /dev/null @@ -1,381 +0,0 @@ -import cv2 -import json -import torch -import pickle -import random -import logging -import torchvision -import numpy as np -import pandas as pd -import torch.nn as nn -import albumentations as alb -import lightning.pytorch as pl - -from tqdm import tqdm -from functools import partial -from enum import IntEnum, auto, IntFlag, Enum -from os import path, scandir, makedirs -from torchvision.io import VideoReader -from torch.utils.data import Dataset, DataLoader -from typing import List, Set, Dict, Tuple, Optional, Callable, Union - - -# torchvision.set_video_backend("video_reader") - - -class RandomDownScale(alb.core.transforms_interface.ImageOnlyTransform): - def __init__(self, ratio_list, always_apply=False, p=0.5): - super(RandomDownScale, self).__init__(always_apply, p) - self.ratio_list = ratio_list - - def apply(self, image, scale=1.0, **params): - return self.randomdownscale(image, scale) - - def randomdownscale(self, img, scale, **params): - keep_input_shape = True - H, W, C = img.shape - img_ds = cv2.resize( - img, - (int(W / scale), int(H / scale)), - interpolation=cv2.INTER_CUBIC - ) - logging.debug(f"Downscale Ratio: {scale}") - if keep_input_shape: - img_ds = cv2.resize(img_ds, (W, H), interpolation=cv2.INTER_CUBIC) - - return img_ds - - def get_params(self): - return { - "scale": np.random.randint(self.ratio_list[0], self.ratio_list[1] + 1) - } - - def get_transform_init_args_names(self): - return ("ratio_list",) - - -class DeepFakeDataset(Dataset): - @classmethod - def get_cache_dir(cls, *args): - return path.expanduser( - f"./.cache/{'-'.join([cls.__name__] +[str(i) for i in args])}.pkl" - ) - - @classmethod - def prepare_data(cls): - raise NotImplementedError() - - @staticmethod - def build_metadata(data_dir, video_dir, vid_ext): - video_metas = {} - # build metadata - for f in scandir(video_dir): - if vid_ext in f.name: - try: - vid_reader = torchvision.io.VideoReader( - f.path, - "video" - ) - fps = vid_reader.get_metadata()["video"]["fps"][0] - duration = vid_reader.get_metadata()["video"]["duration"][0] - video_metas[f.name[:-len(vid_ext)]] = { - "fps": fps, - "frames": round(duration * fps), - "duration": duration, - "path": f.path[len(data_dir):-len(vid_ext)] - } - except: - logging.error(f"Error Occur During Video Table Creation: {f.path}") - return video_metas - - @property - def cls_name(self): - return self.__class__.__name__ - - def __init__( - self, - data_dir: str, - vid_ext: str, - num_frames: int, - clip_duration: int, - split: str, - transform: Optional[Callable], - pack: bool, - ratio: float = 1.0, - max_clips: int = 100 - ): - self.data_dir = data_dir - self.vid_ext = vid_ext - self.num_frames = num_frames - self.clip_duration = clip_duration - self.transform = transform - self.split = split - self.pack = pack - self.ratio = ratio - self.max_clips = max_clips - - # list of video infos - self.video_list = [] - - # comprehensive record of video metas - self.video_table = {} - - # record missing videos in the csv file for further usage. - self.stray_videos = {} - - # stacking video clips - self.stack_video_clips = [] - - def _build_video_table(cls): - raise NotImplementedError() - - def _build_video_list(cls): - raise NotImplementedError() - - def video_info(self, idx): - raise NotImplementedError() - - def video_meta(self, idx): - raise NotImplementedError() - - def video_repr(self, idx): - return '/'.join([str(i) for i in self.video_info(idx)[1:]]) - - def get_item(self, idx, with_entity_info=False): - raise NotImplementedError() - - # The 'idx' here represents the entity index from the __getitem__. - # Depending on self.pack, the entity index either indicates a clip or the video. - def get_entity(self, idx, with_entity_info=False): - raise NotImplementedError() - - def collate_fn(self, batch): - item_videos, item_labels, item_masks, item_entity_indices = list(zip(*batch)) - - batch_entity_clips = [i for l in item_videos for i in l] - batch_entity_label = [i for l in item_labels for i in l] - batch_entity_masks = [i for l in item_masks for i in l] - batch_entity_indices = [i for l in item_entity_indices for i in l] - - clips = torch.cat(batch_entity_clips) - masks = torch.cat(batch_entity_masks) - - # post-process the label & index to match the shape of corresponding clips - num_clips_per_entity = torch.tensor([entity_clips.shape[0] for entity_clips in batch_entity_clips]) - labels = torch.tensor(batch_entity_label).repeat_interleave(num_clips_per_entity) - indices = torch.tensor(batch_entity_indices).repeat_interleave(num_clips_per_entity) - - assert clips.shape[0] == masks.shape[0] == labels.shape[0] == indices.shape[0] - - dts_name = self.cls_name - names = [self.video_repr(i) for i in indices] - - return dict( - xyz=( - clips, - labels, - dict( - masks=masks - ) - ), - indices=indices, - dts_name=dts_name, - names=names - ) - - -class DeepFakeDataModule(pl.LightningDataModule): - def __init__( - self, - vid_ext: str, - data_dir: str, - num_frames: int = None, - batch_size: int = None, - num_workers: int = None, - clip_duration: int = None, - pack: bool = False, - ratio: float = 1.0, - max_clips: int = 100 - ): - super().__init__() - # generic parameters - self.transform = lambda x: x - self.batch_size = batch_size - self.accum_batch = 1 - self.num_workers = num_workers - - # dataset metadata - self.data_dir = data_dir - self.vid_ext = vid_ext - self.num_frames = num_frames - self.clip_duration = clip_duration - self.pack = pack - self.ratio = ratio - self.max_clips = max_clips - - # dataset splits - self._train_dataset = None - self._val_dataset = None - self._test_dataset = None - self._predict_dataset = None - - def overwrite_params(self, force=False, **kargs): - for k, v in kargs.items(): - cur_v = getattr(self, k) - if not force and not type(cur_v) == type(None): - logging.debug(f"Parameter '{k}' has specified value '{cur_v}', ignore overwrite '{v}'.") - else: - logging.debug(f"Overwrite parameter '{k}' with value '{v}'") - setattr(self, k, v) - - def create_dataloader(self, dataset, train=False): - if (type(dataset) == type(None)): - return None - else: - params = dict( - dataset=dataset, - batch_size=self.batch_size, - num_workers=self.num_workers, - shuffle=False, - collate_fn=dataset.collate_fn, - pin_memory=True - ) - - if train: - assert (self.batch_size >= self.accum_batch) - params["batch_size"] = int(self.batch_size / self.accum_batch) - params["shuffle"] = True - params["drop_last"] = True - - return DataLoader(**params) - - def affine_model(self, model): - self.transform = model.transform - - def affine_trainer(self, trainer): - self.accum_batch = trainer.accumulate_grad_batches - - def prepare_data(self): - raise NotImplementedError() - - def setup(self, stage: str): - raise NotImplementedError() - - def train_dataloader(self): - return self.create_dataloader(self._train_dataset, train=True) - - def val_dataloader(self): - return self.create_dataloader(self._val_dataset) - - def test_dataloader(self): - return self.create_dataloader(self._test_dataset) - - def predict_dataloader(self): - return self.create_dataloader(self._predict_dataset) - - -class ODDataModule(pl.LightningDataModule): - def __init__( - self, - train_datamodules: List[pl.LightningDataModule] = [], - val_datamodules: List[pl.LightningDataModule] = [], - test_datamodules: List[pl.LightningDataModule] = [] - ): - super().__init__() - self._train_datamodules = train_datamodules - self._test_datamodules = test_datamodules - self._val_datamodules = val_datamodules - - def affine_model(self, model): - for dtm in [ - *self._train_datamodules, - *self._test_datamodules, - *self._val_datamodules - ]: - dtm.affine_model(model) - - def affine_trainer(self, trainer): - for dtm in [ - *self._train_datamodules, - *self._test_datamodules, - *self._val_datamodules - ]: - dtm.affine_trainer(trainer) - - def prepare_data(self): - for dtm in [ - *self._train_datamodules, - *self._test_datamodules, - *self._val_datamodules - ]: - dtm.prepare_data() - - def overwrite_params(self, force=False, **kargs): - for dtm in [ - *self._train_datamodules, - *self._test_datamodules, - *self._val_datamodules - ]: - dtm.overwrite_params(force=force, **kargs) - - def setup(self, stage: str): - if stage == "fit" or stage == "validate": - for dtm in [ - *self._train_datamodules, - *self._val_datamodules - ]: - dtm.setup('fit') - - if stage == "test": - for dtm in [ - *self._test_datamodules, - *self._val_datamodules - ]: - dtm.setup('test') - - def train_dataloader(self): - dataloaders = { - dtm._train_dataset.cls_name: - dtm.train_dataloader() - for dtm in self._train_datamodules - } - return dataloaders - - def val_dataloader(self): - dataloaders = { - dtm._val_dataset.cls_name: - dtm.val_dataloader() - for dtm in self._val_datamodules - } - return dataloaders - - def test_dataloader(self): - dataloaders = { - dtm._test_dataset.cls_name: - dtm.test_dataloader() - for dtm in self._test_datamodules - } - return dataloaders - - def predict_dataloader(self): - return self.test_dataloader() - - -class ODDeepFakeDataModule(ODDataModule): - def __init__( - self, - batch_size: int, - num_workers: int, - num_frames: int, - clip_duration: int, - *args, - **kargs, - ): - super().__init__(*args, **kargs) - global_defaults = dict( - batch_size=batch_size, - num_workers=num_workers, - num_frames=num_frames, - clip_duration=clip_duration - ) - self.overwrite_params(force=False, **global_defaults) diff --git a/video/dfd-fcg/model_code/src/dataset/cdf.py b/video/dfd-fcg/model_code/src/dataset/cdf.py deleted file mode 100755 index 2d75fbb78fba6fc0ce50cfe9f65718b299a4e21a..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/dataset/cdf.py +++ /dev/null @@ -1,311 +0,0 @@ -from .base import * - - -class CDF(DeepFakeDataset): - TYPE_DIRS = { - 'REAL': 'REAL/', - 'FAKE': 'FAKE/' - } - - def __init__(self, *args, **kargs): - super().__init__(*args, **kargs) - self._build_video_table() - self._build_video_list() - - @classmethod - def prepare_data(cls, data_dir, vid_ext): - progress_bar = tqdm(list(cls.TYPE_DIRS.keys())) - for df_type in progress_bar: - # description for progress bar - progress_bar.set_description(f"{df_type}/videos") - - # compose the path for metadata cache - meta_cache_path = path.expanduser(cls.get_cache_dir(df_type)) - - # next entity if cache exists - if path.exists(meta_cache_path): - continue - - # video directory for df_type - video_dir = path.join(data_dir, cls.TYPE_DIRS[df_type], 'videos') - - # fetch video metadatas - video_metas = cls.build_metadata(data_dir, video_dir, vid_ext) - - # cache the metadata - makedirs(path.dirname(meta_cache_path), exist_ok=True) - with open(meta_cache_path, 'wb') as f: - pickle.dump(video_metas, f) - - def _build_video_table(self): - self.video_table = {} - for df_type in self.TYPE_DIRS: - # compose cache directory path - meta_cache_path = path.expanduser(self.get_cache_dir(df_type)) - - # load metadatas - with open(meta_cache_path, 'rb') as f: - video_metas = pickle.load(f) - - # post process the video path - for idx in video_metas: - video_metas[idx]["path"] = path.join(self.data_dir, video_metas[idx]["path"]) + self.vid_ext - - # store in video table. - self.video_table[df_type] = video_metas - - def _build_video_list(self): - self.video_list = [] - - for df_type in self.TYPE_DIRS: - video_csv = pd.read_csv( - path.join(self.data_dir, 'csv_files', f'{self.split}_{df_type.lower()}.csv'), - sep=' ', - header=None, - names=["name", "label"] - ) - - _videos = [] - - for filename in video_csv["name"]: - name, ext = path.splitext(filename) - if name in self.video_table[df_type]: - clips = int(self.video_table[df_type][name]["duration"] // self.clip_duration) - if (clips > 0): - clips = min(clips, self.max_clips) - _videos.append((df_type.upper(), name, clips)) - else: - name = f"{df_type.upper()}/{name}" - logging.warning( - f'Video {path.join(self.data_dir, self.TYPE_DIRS[df_type], "videos", name)} does not present in the processed dataset.' - ) - self.stray_videos[name] = (0 if df_type == "REAL" else 1) - - self.video_list += _videos[:int(len(_videos) * self.ratio)] - - # permanant shuffle - random.Random(1019).shuffle(self.video_list) - - # stacking up the amount of data clips for further usage - self.stack_video_clips = [0] - for _, _, i in self.video_list: - self.stack_video_clips.append(self.stack_video_clips[-1] + i) - self.stack_video_clips.pop(0) - - def __len__(self): - if (self.pack): - return len(self.video_list) - else: - return self.stack_video_clips[-1] - - def __getitem__(self, idx): - item_entities = self.get_item(idx) - return [[entity[k] for entity in item_entities] for k in item_entities[0].keys()] - - def get_item(self, idx, with_entity_info=False): - item_entities = [ - self.get_entity( - idx, - with_entity_info=with_entity_info - ) - ] - return item_entities - - def get_entity(self, idx, with_entity_info=False): - video_idx, df_type, video_name, num_clips = self.video_info(idx) - video_meta = self.video_table[df_type][video_name] - logging.debug(f"Entity/Video Index:{idx}/{video_idx}") - logging.debug(f"Entity DF:{df_type}") - - # - video path - vid_path = video_meta["path"] - # - create video reader - vid_reader = VideoReader(vid_path, "video") - # - frames per second - video_sample_freq = vid_reader.get_metadata()["video"]["fps"][0] - - entity_clips = [] - entity_masks = [] - - # desire all clips in the video under pack mode, else fetch only the clip of index. - if (self.pack): - clips_desire = range(num_clips) - else: - clips_desire = [idx - (0 if video_idx == 0 else self.stack_video_clips[video_idx - 1])] - - for clip_of_video in clips_desire: - # video frame processing - frames = [] - - # derive the video offset - video_offset_duration = clip_of_video * self.clip_duration - - # the amount of frames to skip - video_sample_offset = int(video_offset_duration) - - # the amount of frames for the duration of a clip - video_clip_samples = int(video_sample_freq * self.clip_duration) - - # the amount of frames to skip in order to meet the num_frames per clip.(excluding the head & tail frames ) - if (self.num_frames == 1): - video_sample_stride = 0 - else: - video_sample_stride = ( - (video_clip_samples - 1) / (self.num_frames - 1) - ) / video_sample_freq - - logging.debug(f"Loading Video: {vid_path}") - logging.debug(f"Sample Offset: {video_sample_offset}") - logging.debug(f"Sample Stride: {video_sample_stride}") - - # fetch frames of clip duration - for sample_idx in range(self.num_frames): - vid_reader.seek(video_sample_offset + sample_idx * video_sample_stride) - frame = next(vid_reader) - frames.append(frame["data"]) - - # stack list of torch frames to tensor - frames = torch.stack(frames) - - # transformation - frames = self.transform(frames) - - # padding and masking missing frames. - mask = torch.tensor( - [1.] * len(frames) + - [0.] * (self.num_frames - len(frames)), - dtype=torch.bool - ) - if frames.shape[0] < self.num_frames: - diff = self.num_frames - len(frames) - padding = torch.zeros( - (diff, *frames.shape[1:]), - dtype=frames.dtype - ) - frames = torch.concatenate( - frames, - padding - ) - - entity_clips.append(frames) - entity_masks.append(mask) - logging.debug( - "Video Clip: {}({}s~{}s), Completed!".format( - vid_path, - self.clip_duration * clip_of_video, - (self.clip_duration + 1) * clip_of_video - ) - ) - - del vid_reader - - entity_clips = torch.stack(entity_clips) - entity_masks = torch.stack(entity_masks) - - entity_info = { - "video_name": video_name, - "df_type": df_type, - "vid_path": vid_path - } - entity_data = { - "clips": entity_clips, - "label": 0 if (df_type == "REAL") else 1, - "masks": entity_masks, - "idx": idx - } - - if with_entity_info: - return {**entity_data, **entity_info} - else: - return entity_data - - def video_info(self, idx): - if (self.pack): - video_idx = idx - else: - video_idx = next(i for i, x in enumerate(self.stack_video_clips) if idx < x) - return video_idx, *self.video_list[video_idx] - - def video_repr(self, idx): - return '/'.join([str(i) for i in self.video_info(idx)[1:-1]]) - - def video_meta(self, idx): - df_type, name = self.video_info(idx)[1:3] - return self.video_table[df_type][name] - - -class CDFDataModule(DeepFakeDataModule): - def __init__( - self, - *args, - **kargs - ): - super().__init__(*args, **kargs) - - def prepare_data(self): - CDF.prepare_data(self.data_dir, self.vid_ext) - - def setup(self, stage: str): - # Assign train/val datasets for use in dataloaders - data_cls = partial( - CDF, - data_dir=self.data_dir, - vid_ext=self.vid_ext, - num_frames=self.num_frames, - clip_duration=self.clip_duration, - transform=self.transform, - ratio=self.ratio, - split="test", - pack=self.pack - ) - - if (stage == "fit" or stage == "valid"): - self._val_dataset = data_cls( - max_clips=self.max_clips - ) - elif (stage == "test"): - self._test_dataset = data_cls() - - -if __name__ == "__main__": - from src.utility.visualize import dataset_entity_visualize - - class Dummy(): - pass - - dtm = CDFDataModule( - data_dir="datasets/cdf/", - vid_ext=".avi", - batch_size=1, - num_workers=0, - num_frames=10, - clip_duration=1, - ratio=0.5, - pack=True - ) - - model = Dummy() - model.transform = lambda x: x - dtm.prepare_data() - dtm.affine_model(model) - dtm.setup("fit") - dtm.setup("validate") - dtm.setup("test") - - # iterate the whole dataset for visualization and sanity check - iterable = dtm._test_dataset - save_folder = f"./misc/extern/dump_dataset/cdf/test/" - # entity dump - # for entity_idx in tqdm(range(len(iterable))): - # if (entity_idx > 100): - # break - # dataset_entity_visualize(iterable.get_entity(entity_idx, with_entity_info=True), base_dir=save_folder) - - # # single dump - # dataset_entity_visualize(iterable.get_entity(167, with_entity_info=True), base_dir=save_folder) - - # iterate the all dataloaders for debugging. - for fn in [dtm.val_dataloader, dtm.test_dataloader]: - iterable = fn() - for batch in tqdm(iterable): - pass diff --git a/video/dfd-fcg/model_code/src/dataset/dfdc.py b/video/dfd-fcg/model_code/src/dataset/dfdc.py deleted file mode 100755 index f63691e10fcd7d2f44cde78286f39815b947d92d..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/dataset/dfdc.py +++ /dev/null @@ -1,305 +0,0 @@ -from .base import * - - -from .base import * - - -class DFDC(DeepFakeDataset): - - def __init__(self, *args, **kargs): - super().__init__(*args, **kargs) - self._build_video_table() - self._build_video_list() - - @classmethod - def prepare_data(cls, data_dir, vid_ext): - # compose the path for metadata cache - meta_cache_path = path.expanduser(cls.get_cache_dir()) - - # exit if cache exists - if path.exists(meta_cache_path): - return - - # video directory for df_type - video_dir = path.join(data_dir, 'videos') - - # fetch video metadatas - video_metas = cls.build_metadata(data_dir, video_dir, vid_ext) - - # cache the metadata - makedirs(path.dirname(meta_cache_path), exist_ok=True) - with open(meta_cache_path, 'wb') as f: - pickle.dump(video_metas, f) - - def _build_video_table(self): - self.video_table = {} - - # compose cache directory path - meta_cache_path = path.expanduser(self.get_cache_dir()) - - # load metadatas - with open(meta_cache_path, 'rb') as f: - video_metas = pickle.load(f) - - # post process the video path - for idx in video_metas: - video_metas[idx]["path"] = path.join(self.data_dir, video_metas[idx]["path"]) + self.vid_ext - - # store in video table. - self.video_table = video_metas - - def _build_video_list(self): - video_table = pd.read_csv( - path.join(self.data_dir, 'csv_files', f'{self.split}.csv'), - sep=' ', - header=None, - names=["name", "label"] - ) - - self.video_list = [] - label_videos = { - "REAL": [], - "FAKE": [] - } - for index, row in video_table.iterrows(): - filename = row["name"] - name, ext = path.splitext(filename) - label = "REAL" if row["label"] == 0 else "FAKE" - if name in self.video_table: - clips = int(self.video_table[name]["duration"] // self.clip_duration) - if (clips > 0): - clips = min(clips, self.max_clips) - label_videos[label].append((label, name, clips)) - else: - name = f"{label}/{name}" - logging.warning( - f'Video {path.join(self.data_dir, "videos", name)} does not present in the processed dataset.' - ) - self.stray_videos[name] = (0 if label == "REAL" else 1) - for label in label_videos: - _videos = label_videos[label] - self.video_list += _videos[:int(len(_videos) * self.ratio)] - - # permanant shuffle - random.Random(1019).shuffle(self.video_list) - - # stacking up the amount of data clips for further usage - self.stack_video_clips = [0] - for _, _, i in self.video_list: - self.stack_video_clips.append(self.stack_video_clips[-1] + i) - self.stack_video_clips.pop(0) - - def __len__(self): - if (self.pack): - return len(self.video_list) - else: - return self.stack_video_clips[-1] - - def __getitem__(self, idx): - item_entities = self.get_item(idx) - return [[entity[k] for entity in item_entities] for k in item_entities[0].keys()] - - def get_item(self, idx, with_entity_info=False): - item_entities = [ - self.get_entity( - idx, - with_entity_info=with_entity_info - ) - ] - return item_entities - - def get_entity(self, idx, with_entity_info=False): - video_idx, df_type, video_name, num_clips = self.video_info(idx) - video_meta = self.video_table[video_name] - logging.debug(f"Entity/Video Index:{idx}/{video_idx}") - logging.debug(f"Entity DF:{df_type}") - - # - video path - vid_path = video_meta["path"] - # - create video reader - vid_reader = VideoReader(vid_path, "video") - # - frames per second - video_sample_freq = vid_reader.get_metadata()["video"]["fps"][0] - - entity_clips = [] - entity_masks = [] - - # desire all clips in the video under pack mode, else fetch only the clip of index. - if (self.pack): - clips_desire = range(num_clips) - else: - clips_desire = [idx - (0 if video_idx == 0 else self.stack_video_clips[video_idx - 1])] - - for clip_of_video in clips_desire: - # video frame processing - frames = [] - - # derive the video offset - video_offset_duration = clip_of_video * self.clip_duration - - # the amount of frames to skip - video_sample_offset = int(video_offset_duration) - - # the amount of frames for the duration of a clip - video_clip_samples = int(video_sample_freq * self.clip_duration) - - # the amount of frames to skip in order to meet the num_frames per clip.(excluding the head & tail frames ) - if (self.num_frames == 1): - video_sample_stride = 0 - else: - video_sample_stride = ( - (video_clip_samples - 1) / (self.num_frames - 1) - ) / video_sample_freq - - logging.debug(f"Loading Video: {vid_path}") - logging.debug(f"Sample Offset: {video_sample_offset}") - logging.debug(f"Sample Stride: {video_sample_stride}") - - # fetch frames of clip duration - for sample_idx in range(self.num_frames): - vid_reader.seek(video_sample_offset + sample_idx * video_sample_stride) - frame = next(vid_reader) - frames.append(frame["data"]) - - # stack list of torch frames to tensor - frames = torch.stack(frames) - - # transformation - frames = self.transform(frames) - - # padding and masking missing frames. - mask = torch.tensor( - [1.] * len(frames) + - [0.] * (self.num_frames - len(frames)), - dtype=torch.bool - ) - if frames.shape[0] < self.num_frames: - diff = self.num_frames - len(frames) - padding = torch.zeros( - (diff, *frames.shape[1:]), - dtype=frames.dtype - ) - frames = torch.concatenate( - frames, - padding - ) - - entity_clips.append(frames) - entity_masks.append(mask) - logging.debug( - "Video Clip: {}({}s~{}s), Completed!".format( - vid_path, - self.clip_duration * clip_of_video, - (self.clip_duration + 1) * clip_of_video - ) - ) - - del vid_reader - - entity_clips = torch.stack(entity_clips) - entity_masks = torch.stack(entity_masks) - - entity_info = { - "video_name": video_name, - "df_type": df_type, - "vid_path": vid_path - } - entity_data = { - "clips": entity_clips, - "label": 0 if (df_type == "REAL") else 1, - "masks": entity_masks, - "idx": idx - } - - if with_entity_info: - return {**entity_data, **entity_info} - else: - return entity_data - - def video_info(self, idx): - if (self.pack): - video_idx = idx - else: - video_idx = next(i for i, x in enumerate(self.stack_video_clips) if idx < x) - return video_idx, *self.video_list[video_idx] - - def video_repr(self, idx): - return '/'.join([str(i) for i in self.video_info(idx)[1:-1]]) - - def video_meta(self, idx): - df_type, name = self.video_info(idx)[1:3] - return self.video_table[name] - - -class DFDCDataModule(DeepFakeDataModule): - def __init__( - self, - *args, - **kargs - ): - super().__init__(*args, **kargs) - - def prepare_data(self): - DFDC.prepare_data(self.data_dir, self.vid_ext) - - def setup(self, stage: str): - # Assign train/val datasets for use in dataloaders - data_cls = partial( - DFDC, - data_dir=self.data_dir, - vid_ext=self.vid_ext, - num_frames=self.num_frames, - clip_duration=self.clip_duration, - transform=self.transform, - ratio=self.ratio, - split="test", - pack=self.pack - ) - - if (stage == "fit" or stage == "valid"): - self._val_dataset = data_cls( - max_clips=self.max_clips - ) - elif (stage == "test"): - self._test_dataset = data_cls() - - -if __name__ == "__main__": - from src.utility.visualize import dataset_entity_visualize - - class Dummy(): - pass - - dtm = DFDCDataModule( - data_dir="datasets/dfdc/", - vid_ext=".avi", - batch_size=24, - num_workers=16, - num_frames=10, - clip_duration=1, - ratio=0.5, - pack=True - ) - - model = Dummy() - model.transform = lambda x: x - dtm.prepare_data() - dtm.affine_model(model) - dtm.setup("fit") - dtm.setup("validate") - dtm.setup("test") - - # # iterate the whole dataset for visualization and sanity check - # iterable = dtm._test_dataset - # save_folder = f"./misc/extern/dump_dataset/dfdc/test/" - # # entity dump - # for entity_idx in tqdm(range(len(iterable))): - # if (entity_idx > 100): - # break - # dataset_entity_visualize(iterable.get_entity(entity_idx, with_entity_info=True), base_dir=save_folder) - - # iterate the all dataloaders for debugging. - for fn in [dtm.val_dataloader, dtm.test_dataloader]: - iterable = fn() - for batch in tqdm(iterable): - pass diff --git a/video/dfd-fcg/model_code/src/dataset/dfo.py b/video/dfd-fcg/model_code/src/dataset/dfo.py deleted file mode 100755 index e1badb098188bd8b1c83aaf72795d14a12c1ff2b..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/dataset/dfo.py +++ /dev/null @@ -1,311 +0,0 @@ -from .base import * - - -class DFo(DeepFakeDataset): - TYPE_DIRS = { - 'REAL': 'REAL/', - 'FAKE': 'FAKE/' - } - - def __init__(self, *args, **kargs): - super().__init__(*args, **kargs) - self._build_video_table() - self._build_video_list() - - @classmethod - def prepare_data(cls, data_dir, vid_ext): - progress_bar = tqdm(list(cls.TYPE_DIRS.keys())) - for df_type in progress_bar: - # description for progress bar - progress_bar.set_description(f"{df_type}/videos") - - # compose the path for metadata cache - meta_cache_path = path.expanduser(cls.get_cache_dir(df_type)) - - # next entity if cache exists - if path.exists(meta_cache_path): - continue - - # video directory for df_type - video_dir = path.join(data_dir, cls.TYPE_DIRS[df_type], 'videos') - - # fetch video metadatas - video_metas = cls.build_metadata(data_dir, video_dir, vid_ext) - - # cache the metadata - makedirs(path.dirname(meta_cache_path), exist_ok=True) - with open(meta_cache_path, 'wb') as f: - pickle.dump(video_metas, f) - - def _build_video_table(self): - self.video_table = {} - for df_type in self.TYPE_DIRS: - # compose cache directory path - meta_cache_path = path.expanduser(self.get_cache_dir(df_type)) - - # load metadatas - with open(meta_cache_path, 'rb') as f: - video_metas = pickle.load(f) - - # post process the video path - for idx in video_metas: - video_metas[idx]["path"] = path.join(self.data_dir, video_metas[idx]["path"]) + self.vid_ext - - # store in video table. - self.video_table[df_type] = video_metas - - def _build_video_list(self): - self.video_list = [] - - for df_type in self.TYPE_DIRS: - video_csv = pd.read_csv( - path.join(self.data_dir, 'csv_files', f'{self.split}_{df_type.lower()}.csv'), - sep=' ', - header=None, - names=["name", "label"] - ) - - _videos = [] - - for filename in video_csv["name"]: - name, ext = path.splitext(filename) - if name in self.video_table[df_type]: - clips = int(self.video_table[df_type][name]["duration"] // self.clip_duration) - if (clips > 0): - clips = min(clips, self.max_clips) - _videos.append((df_type.upper(), name, clips)) - else: - name = f"{df_type.upper()}/{name}" - logging.warning( - f'Video {path.join(self.data_dir, self.TYPE_DIRS[df_type], "videos", name)} does not present in the processed dataset.' - ) - self.stray_videos[name] = (0 if df_type == "REAL" else 1) - - self.video_list += _videos[:int(len(_videos) * self.ratio)] - - # permanant shuffle - random.Random(1019).shuffle(self.video_list) - - # stacking up the amount of data clips for further usage - self.stack_video_clips = [0] - for _, _, i in self.video_list: - self.stack_video_clips.append(self.stack_video_clips[-1] + i) - self.stack_video_clips.pop(0) - - def __len__(self): - if (self.pack): - return len(self.video_list) - else: - return self.stack_video_clips[-1] - - def __getitem__(self, idx): - item_entities = self.get_item(idx) - return [[entity[k] for entity in item_entities] for k in item_entities[0].keys()] - - def get_item(self, idx, with_entity_info=False): - item_entities = [ - self.get_entity( - idx, - with_entity_info=with_entity_info - ) - ] - return item_entities - - def get_entity(self, idx, with_entity_info=False): - video_idx, df_type, video_name, num_clips = self.video_info(idx) - video_meta = self.video_table[df_type][video_name] - logging.debug(f"Entity/Video Index:{idx}/{video_idx}") - logging.debug(f"Entity DF:{df_type}") - - # - video path - vid_path = video_meta["path"] - # - create video reader - vid_reader = VideoReader(vid_path, "video") - # - frames per second - video_sample_freq = vid_reader.get_metadata()["video"]["fps"][0] - - entity_clips = [] - entity_masks = [] - - # desire all clips in the video under pack mode, else fetch only the clip of index. - if (self.pack): - clips_desire = range(num_clips) - else: - clips_desire = [idx - (0 if video_idx == 0 else self.stack_video_clips[video_idx - 1])] - - for clip_of_video in clips_desire: - # video frame processing - frames = [] - - # derive the video offset - video_offset_duration = clip_of_video * self.clip_duration - - # the amount of frames to skip - video_sample_offset = int(video_offset_duration) - - # the amount of frames for the duration of a clip - video_clip_samples = int(video_sample_freq * self.clip_duration) - - # the amount of frames to skip in order to meet the num_frames per clip.(excluding the head & tail frames ) - if (self.num_frames == 1): - video_sample_stride = 0 - else: - video_sample_stride = ( - (video_clip_samples - 1) / (self.num_frames - 1) - ) / video_sample_freq - - logging.debug(f"Loading Video: {vid_path}") - logging.debug(f"Sample Offset: {video_sample_offset}") - logging.debug(f"Sample Stride: {video_sample_stride}") - - # fetch frames of clip duration - for sample_idx in range(self.num_frames): - vid_reader.seek(video_sample_offset + sample_idx * video_sample_stride) - frame = next(vid_reader) - frames.append(frame["data"]) - - # stack list of torch frames to tensor - frames = torch.stack(frames) - - # transformation - frames = self.transform(frames) - - # padding and masking missing frames. - mask = torch.tensor( - [1.] * len(frames) + - [0.] * (self.num_frames - len(frames)), - dtype=torch.bool - ) - if frames.shape[0] < self.num_frames: - diff = self.num_frames - len(frames) - padding = torch.zeros( - (diff, *frames.shape[1:]), - dtype=frames.dtype - ) - frames = torch.concatenate( - frames, - padding - ) - - entity_clips.append(frames) - entity_masks.append(mask) - logging.debug( - "Video Clip: {}({}s~{}s), Completed!".format( - vid_path, - self.clip_duration * clip_of_video, - (self.clip_duration + 1) * clip_of_video - ) - ) - - del vid_reader - - entity_clips = torch.stack(entity_clips) - entity_masks = torch.stack(entity_masks) - - entity_info = { - "video_name": video_name, - "df_type": df_type, - "vid_path": vid_path - } - entity_data = { - "clips": entity_clips, - "label": 0 if (df_type == "REAL") else 1, - "masks": entity_masks, - "idx": idx - } - - if with_entity_info: - return {**entity_data, **entity_info} - else: - return entity_data - - def video_info(self, idx): - if (self.pack): - video_idx = idx - else: - video_idx = next(i for i, x in enumerate(self.stack_video_clips) if idx < x) - return video_idx, *self.video_list[video_idx] - - def video_repr(self, idx): - return '/'.join([str(i) for i in self.video_info(idx)[1:-1]]) - - def video_meta(self, idx): - df_type, name = self.video_info(idx)[1:3] - return self.video_table[df_type][name] - - -class DFoDataModule(DeepFakeDataModule): - def __init__( - self, - *args, - **kargs - ): - super().__init__(*args, **kargs) - - def prepare_data(self): - DFo.prepare_data(self.data_dir, self.vid_ext) - - def setup(self, stage: str): - # Assign train/val datasets for use in dataloaders - data_cls = partial( - DFo, - data_dir=self.data_dir, - vid_ext=self.vid_ext, - num_frames=self.num_frames, - clip_duration=self.clip_duration, - transform=self.transform, - ratio=self.ratio, - split="test", - pack=self.pack - ) - - if (stage == "fit" or stage == "valid"): - self._val_dataset = data_cls( - max_clips=self.max_clips - ) - elif (stage == "test"): - self._test_dataset = data_cls() - - -if __name__ == "__main__": - from src.utility.visualize import dataset_entity_visualize - - class Dummy(): - pass - - dtm = DFoDataModule( - data_dir="datasets/dfo/", - vid_ext=".avi", - batch_size=24, - num_workers=8, - num_frames=10, - clip_duration=4, - ratio=1.0, - pack=True - ) - - model = Dummy() - model.transform = lambda x: x - dtm.prepare_data() - dtm.affine_model(model) - dtm.setup("fit") - dtm.setup("validate") - dtm.setup("test") - - # # iterate the whole dataset for visualization and sanity check - # iterable = dtm._test_dataset - # save_folder = f"./misc/extern/dump_dataset/dfo/test/" - # # entity dump - # for entity_idx in tqdm(range(len(iterable))): - # if (entity_idx > 100): - # break - # dataset_entity_visualize(iterable.get_entity(entity_idx, with_entity_info=True), base_dir=save_folder) - - # # single dump - # dataset_entity_visualize(iterable.get_entity(167, with_entity_info=True), base_dir=save_folder) - - # iterate the all dataloaders for debugging. - for fn in [dtm.val_dataloader, dtm.test_dataloader]: - iterable = fn() - for batch in tqdm(iterable): - pass diff --git a/video/dfd-fcg/model_code/src/dataset/ffpp.py b/video/dfd-fcg/model_code/src/dataset/ffpp.py deleted file mode 100755 index 6d3e88e40f63ed78d634d2436d2c334ca9aedae3..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/dataset/ffpp.py +++ /dev/null @@ -1,946 +0,0 @@ -from .base import * - - -class FFPPSampleStrategy(IntEnum): - NORMAL = auto() - CONTRAST_RAND = auto() - QUALITY_PAIR = auto() - CONTRAST_PAIR = auto() - FORCE_PAIR = auto() - - -class FFPPAugmentation(IntFlag): - NONE = auto() - DEV = auto() - NORMAL = auto() - ROBUSTNESS = auto() - PERTURBATION = auto() - # > NORMAL - VIDEO = auto() - VIDEO_RRC = auto() - FRAME = auto() - FRAME_NOISE = auto() - # > DEV - RGB = auto() - HUE = auto() - BRIGHT = auto() - COMP = auto() - DSCALE = auto() - SHARPEN = auto() - RRC = auto() - BLUR = auto() - - -class FFPP(DeepFakeDataset): - TYPE_DIRS = { - 'REAL': 'real/', - 'DF': 'DF/', - 'FS': 'FS/', - 'F2F': 'F2F/', - 'NT': 'NT/' - } - - COMPRESSIONS = {'c23', 'raw', 'c40'} - - @classmethod - def prepare_data(cls, data_dir, compressions, vid_ext): - progress_bar = tqdm(cls.TYPE_DIRS.keys()) - for df_type in progress_bar: - for comp in compressions: - # description for progress bar - progress_bar.set_description(f"{df_type}: {comp}/videos") - - # compose the path for metadata cache - meta_cache_path = path.expanduser(cls.get_cache_dir(df_type, comp)) - - # next entity if cache exists - if path.exists(meta_cache_path): - continue - - # video directory for df_type of compression - video_dir = path.join(data_dir, cls.TYPE_DIRS[df_type], f'{comp}/videos') - - # build metadata - video_metas = cls.build_metadata(data_dir, video_dir, vid_ext) - - # cache the metadata - makedirs(path.dirname(meta_cache_path), exist_ok=True) - with open(meta_cache_path, 'wb') as f: - pickle.dump(video_metas, f) - - def __init__( - self, - df_types: List[str], - compressions: List[str], - n_px: int, - strategy: FFPPSampleStrategy, - augmentations: FFPPAugmentation, - *args, - force_random_speed: Optional[bool] = None, - **kargs - ): - super().__init__(*args, **kargs) - # configurations - self.df_types = df_types - self.compressions = compressions - self.n_px = n_px - self.strategy = strategy - self.augmentations = augmentations - self.train = (True if self.split == "train" else False) - self.random_speed = ( - force_random_speed - if not force_random_speed == None else - ( - True - if self.train else - False - ) - ) - - # record missing videos in the csv file for further usage. - self.stray_videos = {} - - # stacking data clips - self.stack_video_clips = [] - - # build video metadata structure for fast retreival - self._build_video_table() - self._build_video_list() - - # augmentation selections - logging.debug(f"Augmentations: {str(self.augmentations)}") - self.frame_augmentation = None - self.video_augmentation = None - if FFPPAugmentation.NONE in self.augmentations: - pass - - elif FFPPAugmentation.DEV in self.augmentations: - self.frame_augmentation = None - - if FFPPAugmentation.RGB in self.augmentations: - self.video_augmentation = alb.ReplayCompose( - [ - alb.RGBShift((-20, 20), (-20, 20), (-20, 20), p=1.) - ], - p=1. - ) - elif FFPPAugmentation.HUE in self.augmentations: - self.video_augmentation = alb.ReplayCompose( - [ - alb.HueSaturationValue( - hue_shift_limit=(-0.3, 0.3), - sat_shift_limit=(-0.3, 0.3), - val_shift_limit=(-0.3, 0.3), - p=1. - ), - ], - p=1. - ) - elif FFPPAugmentation.BRIGHT in self.augmentations: - self.video_augmentation = alb.ReplayCompose( - [ - alb.RandomBrightnessContrast( - brightness_limit=(-0.3, 0.3), contrast_limit=(-0.3, 0.3), p=1. - ), - ], - p=1. - ) - elif FFPPAugmentation.COMP in self.augmentations: - self.video_augmentation = alb.ReplayCompose( - [ - alb.ImageCompression( - quality_lower=40, quality_upper=100, p=1. - ) - ], - p=1. - ) - elif FFPPAugmentation.DSCALE in self.augmentations: - self.video_augmentation = alb.ReplayCompose( - [ - alb.RandomScale( - (-0.6, -0.3), always_apply=True - ), - alb.Resize( - self.n_px, self.n_px, cv2.INTER_CUBIC, always_apply=True - ) - ], - p=1. - ) - elif FFPPAugmentation.SHARPEN in self.augmentations: - self.video_augmentation = alb.ReplayCompose( - [ - alb.Sharpen(alpha=(0.2, 0.5), lightness=(0.5, 1.0), p=1) - ], - p=1. - ) - elif FFPPAugmentation.RRC in self.augmentations: - self.video_augmentation = alb.ReplayCompose( - [ - alb.RandomResizedCrop( - self.n_px, self.n_px, scale=(0.5, 0.75), ratio=(1, 1), p=1.0 - ) - ] - ) - elif FFPPAugmentation.BLUR in self.augmentations: - self.video_augmentation = alb.ReplayCompose( - [ - alb.Blur(p=1.0) - ] - ) - else: - raise NotImplementedError() - - elif FFPPAugmentation.ROBUSTNESS in self.augmentations: - self.frame_augmentation = None - self.video_augmentation = alb.ReplayCompose( - [ - alb.Resize( - self.n_px, self.n_px, cv2.INTER_CUBIC - ), - alb.RandomResizedCrop( - self.n_px, self.n_px, scale=(0.7, 0.9), ratio=(1, 1) - ), - alb.HorizontalFlip() - ], - p=1. - ) - - elif FFPPAugmentation.PERTURBATION in self.augmentations: - augmentations = [ - alb.Resize( - self.n_px, self.n_px, cv2.INTER_CUBIC - ), - alb.RGBShift( - (-20, 20), (-20, 20), (-20, 20), p=0.7 - ), - alb.HueSaturationValue( - hue_shift_limit=(-0.3, 0.3), sat_shift_limit=(-0.3, 0.3), val_shift_limit=(-0.3, 0.3), p=0.7 - ), - alb.RandomBrightnessContrast( - brightness_limit=(-0.3, 0.3), contrast_limit=(-0.3, 0.3), p=0.7 - ), - alb.ImageCompression( - quality_lower=40, quality_upper=100, p=0.7 - ), - alb.OneOf([ - RandomDownScale((2, 3), p=1), - alb.Sharpen(alpha=(0.2, 0.5), lightness=(0.5, 1.0), p=1), - ], p=0.5) - ] - self.video_augmentation = alb.ReplayCompose( - augmentations, - p=1. - ) - - elif FFPPAugmentation.NORMAL in self.augmentations: - - if FFPPAugmentation.VIDEO in self.augmentations: - augmentations = [ - alb.HorizontalFlip(), - alb.Resize( - self.n_px, self.n_px, cv2.INTER_CUBIC - ), - alb.RGBShift( - (-20, 20), (-20, 20), (-20, 20), p=0.3 - ), - alb.HueSaturationValue( - hue_shift_limit=(-0.3, 0.3), sat_shift_limit=(-0.3, 0.3), val_shift_limit=(-0.3, 0.3), p=0.3 - ), - alb.RandomBrightnessContrast( - brightness_limit=(-0.1, 0.1), contrast_limit=(-0.1, 0.1), p=0.3 - ), - alb.RandomResizedCrop( - self.n_px, self.n_px, scale=(0.6, 1.0), ratio=(1, 1), p=1.0 - ) - ] - - if FFPPAugmentation.VIDEO_RRC in self.augmentations: - augmentations += [ - alb.OneOf( - [ - alb.ImageCompression( - quality_lower=40, quality_upper=100, p=1 - ), - alb.Compose( - [ - alb.RandomScale( - (-0.4, -0.2), always_apply=True - ), - alb.Resize( - self.n_px, self.n_px, cv2.INTER_CUBIC, always_apply=True - ) - ], p=1 - ), - alb.Blur( - [3, 5], - p=1 - ) - ], - p=0.5 - ) - ] - - self.video_augmentation = alb.ReplayCompose( - augmentations, - p=1. - ) - - if FFPPAugmentation.FRAME in self.augmentations: - augmentations = [ - alb.Resize( - self.n_px, self.n_px, cv2.INTER_CUBIC - ), - alb.RGBShift( - (-5, 5), (-5, 5), (-5, 5), p=0.1 - ), - alb.HueSaturationValue( - hue_shift_limit=(-0.05, 0.05), sat_shift_limit=(-0.05, 0.05), val_shift_limit=(-0.05, 0.05), p=0.1 - ), - alb.RandomBrightnessContrast( - brightness_limit=(-0.05, 0.05), contrast_limit=(-0.05, 0.05), p=0.1 - ), - alb.ImageCompression( - quality_lower=80, quality_upper=100, p=0.1 - ), - ] - if FFPPAugmentation.FRAME_NOISE in self.augmentations: - augmentations += [ - alb.OneOf( - [ - alb.GaussNoise( - per_channel=True, - p=1.0 - ), - alb.MultiplicativeNoise( - per_channel=False, - elementwise=True, - always_apply=False, - p=1.0 - ), - ], - p=0.3 - ) - ] - - self.frame_augmentation = alb.ReplayCompose( - augmentations, - p=1.0 - ) - - if (self.frame_augmentation == None and self.video_augmentation == None): - raise NotImplementedError() - - else: - raise NotImplementedError() - - # construct augmentation driver - if (self.video_augmentation == None and self.frame_augmentation == None): - def driver(x, replay=None): - return x, replay - - else: - def driver(x, replay=None): - # transform to numpy, the alb required format - x = [_x.numpy().transpose((1, 2, 0)) for _x in x] - - # initialize replay data - if (replay == None): - replay = {} - - # frame augmentation - if (not self.frame_augmentation == None): - if ("frame" in replay): - assert len(replay["frame"]) == len(x), "Error! frame replay should match the number of frames" - x = [ - alb.ReplayCompose.replay( - _r, - image=_x - )["image"] - for _x, _r in zip(x, replay["frame"]) - ] - - else: - replay["frame"] = [None for _ in x] - for i, _x in enumerate(x): - result = self.frame_augmentation(image=_x) - x[i] = result["image"] - replay["frame"][i] = result["replay"] - # sequence augmentation - if (not self.video_augmentation == None): - if ("video" in replay): - x = [ - alb.ReplayCompose.replay( - replay["video"], - image=_x - )["image"] - for _x in x - ] - else: - replay["video"] = self.video_augmentation(image=x[0])["replay"] - x = [ - alb.ReplayCompose.replay( - replay["video"], - image=_x - )["image"] - for _x in x - ] - # revert to tensor - x = [torch.from_numpy(_x.transpose((2, 0, 1))) for _x in x] - return x, replay - - self.training_augmentations = driver - - # item to entity mapping list - self.item_entity_list = [] - - # construct item-entity mapping - self._build_item_entity_list() - - def _build_video_table(self): - self.video_table = {} - for df_type in self.df_types: - self.video_table[df_type] = {} - for comp in self.compressions: - # compose cache directory path - meta_cache_path = path.expanduser(self.get_cache_dir(df_type, comp)) - - # load metadatas - with open(meta_cache_path, 'rb') as f: - video_metas = pickle.load(f) - - # post process the video path - for idx in video_metas: - video_metas[idx]["path"] = path.join(self.data_dir, video_metas[idx]["path"]) + self.vid_ext - - # store in video table. - self.video_table[df_type][comp] = video_metas - - def _build_video_list(self): - self.video_list = [] - - with open(path.join(self.data_dir, 'csv_files', f'{self.split}.json')) as f: - idxs = json.load(f) - - logging.debug(f"DF TYPES:{self.df_types}") - logging.debug(f"DF TYPES:{self.compressions}") - - for df_type in self.df_types: - for comp in self.compressions: - comp_videos = [] - adj_idxs = sorted( - [i for inner in idxs for i in inner] - if df_type == 'REAL' else - ['_'.join(idx) for idx in idxs] + ['_'.join(reversed(idx)) for idx in idxs] - ) - - for idx in adj_idxs: - if idx in self.video_table[df_type][comp]: - clips = int(self.video_table[df_type][comp][idx]["duration"] // self.clip_duration) - if (clips > 0): - clips = min(clips, self.max_clips) - comp_videos.append((df_type, comp, idx, clips)) - else: - logging.warning( - f'Video {path.join(self.data_dir, self.TYPE_DIRS[df_type], comp, "videos", idx)} does not present in the processed dataset.' - ) - self.stray_videos[f"{df_type}/{comp}/{idx}"] = (0 if df_type == "REAL" else 1) - self.video_list += comp_videos[:int(len(comp_videos) * self.ratio)] - - # permanant shuffle - random.Random(1019).shuffle(self.video_list) - - # stacking up the amount of data clips for further usage - self.stack_video_clips = [0] - self.real_clip_idx = {} - self.fake_clip_idx = { - 'back': {}, - 'fore': {} - } - for df_type, _, idx, i in self.video_list: - self.stack_video_clips.append(self.stack_video_clips[-1] + i) - interval = [self.stack_video_clips[-2], self.stack_video_clips[-1] - 1] - if df_type == "REAL": - self.real_clip_idx[idx] = interval - else: - back_idx, fore_idx = idx.split('_') - if (not back_idx in self.fake_clip_idx['back']): - self.fake_clip_idx['back'][back_idx] = [] - if (not fore_idx in self.fake_clip_idx['fore']): - self.fake_clip_idx['fore'][fore_idx] = [] - self.fake_clip_idx['back'][back_idx].append(interval) - self.fake_clip_idx['fore'][fore_idx].append(interval) - - self.stack_video_clips.pop(0) - - def _build_item_entity_list(self): - self.item_entity_list = [] - seen_entity_set = set() - for idx in range(self.num_entities): - # if the idx is allocated, ignore - if (idx in seen_entity_set): - continue - - logging.debug(f"Sample strategy:{self.strategy}") - if self.strategy == FFPPSampleStrategy.NORMAL: - desire_entity_indices = [idx] - elif self.strategy == FFPPSampleStrategy.CONTRAST_RAND: - _, video_df_type, _, _, _ = self.video_info(idx) - logging.debug(f"Source Index/DF_TYPE: {idx}/{video_df_type}") - if (video_df_type == "REAL"): - logging.debug(f"Seek for a Fake Entity...") - ground = random.choice(list(self.fake_clip_idx.keys())) - video_name = random.choice(list(self.fake_clip_idx[ground].keys())) - interval = random.choice(self.fake_clip_idx[ground][video_name]) - logging.debug(f"Pair with {video_name} at {ground}-ground ...") - else: - logging.debug(f"Seek for a Real Entity...") - video_name = random.choice(list(self.real_clip_idx.keys())) - interval = self.real_clip_idx[video_name] - logging.debug(f"Pair with {video_name}...") - - c_idx = random.randint(*interval) - desire_entity_indices = [idx, c_idx] - elif self.strategy == FFPPSampleStrategy.CONTRAST_PAIR: - video_idx, video_df_type, _, video_idx_name, _ = self.video_info(idx) - offset_clip = ( - idx - (0 if video_idx == 0 else self.stack_video_clips[video_idx - 1]) - ) - logging.debug(f"Source Index/DF_TYPE: {idx}/{video_df_type}") - if (video_df_type == "REAL"): - logging.debug(f"Seek for a Fake Entity...") - try: - ground = "back" - video_name = video_idx_name - if (not video_name in self.fake_clip_idx[ground]): - raise Exception("unable to pair video.") - interval = random.choice(self.fake_clip_idx[ground][video_name]) - if (offset_clip > (interval[1] - interval[0])): - raise Exception("unable to pair video clip.") - c_idx = interval[0] + offset_clip - except Exception as e: - ground = random.choice(list(self.fake_clip_idx.keys())) - video_name = random.choice(list(self.fake_clip_idx[ground].keys())) - interval = random.choice(self.fake_clip_idx[ground][video_name]) - c_idx = random.randint(*interval) - logging.debug(f"Pair with {video_name} at {ground}-ground ...") - else: - logging.debug(f"Seek for a Real Entity...") - try: - video_name = video_idx_name.split("_")[0] - if (not video_name in self.real_clip_idx): - raise Exception("unable to pair video.") - interval = self.real_clip_idx[video_name] - if (offset_clip > (interval[1] - interval[0])): - raise Exception("unable to pair video clip.") - c_idx = interval[0] + offset_clip - except Exception as e: - video_name = random.choice(list(self.real_clip_idx.keys())) - interval = self.real_clip_idx[video_name] - c_idx = random.randint(*interval) - logging.debug(f"Pair with {video_name}...") - - desire_entity_indices = [idx, c_idx] - elif self.strategy == FFPPSampleStrategy.FORCE_PAIR: - video_idx, video_df_type, _, video_idx_name, _ = self.video_info(idx) - offset_clip = ( - idx - (0 if video_idx == 0 else self.stack_video_clips[video_idx - 1]) - ) - logging.debug(f"Source Index/DF_TYPE: {idx}/{video_df_type}") - if (video_df_type == "REAL"): - logging.debug(f"Seek for a Fake Entity...") - try: - ground = "back" - video_name = video_idx_name - if (not video_name in self.fake_clip_idx[ground]): - raise Exception("unable to pair video.") - interval = random.choice(self.fake_clip_idx[ground][video_name]) - if (offset_clip > (interval[1] - interval[0])): - raise Exception("unable to pair video clip.") - c_idx = interval[0] + offset_clip - except Exception as e: - continue - else: - logging.debug(f"Pair with {video_name} at {ground}-ground ...") - else: - logging.debug(f"Seek for a Real Entity...") - try: - video_name = video_idx_name.split("_")[0] - if (not video_name in self.real_clip_idx): - raise Exception("unable to pair video.") - interval = self.real_clip_idx[video_name] - if (offset_clip > (interval[1] - interval[0])): - raise Exception("unable to pair video clip.") - c_idx = interval[0] + offset_clip - except Exception as e: - continue - else: - logging.debug(f"Pair with {video_name}...") - - desire_entity_indices = [idx, c_idx] - elif self.strategy == FFPPSampleStrategy.QUALITY_PAIR: - raise NotImplementedError() - else: - raise NotImplementedError() - logging.debug(f"Item: {idx} desires the entities: {desire_entity_indices}") - - self.item_entity_list.append(desire_entity_indices) - seen_entity_set.update(desire_entity_indices) - - @property - def num_entities(self): - if (self.pack): - return len(self.video_list) - else: - return self.stack_video_clips[-1] - - def __len__(self): - return len(self.item_entity_list) - - def __getitem__(self, idx): - item_entities = self.get_item(idx) - return [[entity[k] for entity in item_entities] for k in item_entities[0].keys()] - - def get_item(self, idx, with_entity_info=False): - desire_entity_indices = self.item_entity_list[idx] - item_entities = [] - replay = None - for desire_item_index in desire_entity_indices: - result = self.get_entity( - desire_item_index, - replay=replay, - with_entity_info=with_entity_info - ) - - if ( - self.strategy == FFPPSampleStrategy.CONTRAST_PAIR or - self.strategy == FFPPSampleStrategy.FORCE_PAIR - ): - replay = result.pop("replay") - else: - result.pop("replay") - - item_entities.append(result) - return item_entities - - def get_entity(self, idx, replay=None, with_entity_info=False): - video_idx, df_type, comp, video_name, num_clips = self.video_info(idx) - video_meta = self.video_table[df_type][comp][video_name] - logging.debug(f"Entity/Video Index:{idx}/{video_idx}") - logging.debug(f"Entity DF/COMP:{df_type}/{comp}") - - # - video path - vid_path = video_meta["path"] - # - create video reader - vid_reader = VideoReader(vid_path, "video", num_threads=1) - # - frames per second - video_sample_freq = vid_reader.get_metadata()["video"]["fps"][0] - - entity_clips = [] - entity_masks = [] - entity_indices = [] - - # desire all clips in the video under pack mode, else fetch only the clip of index. - if (self.pack): - clips_desire = range(num_clips) - else: - clips_desire = [idx - (0 if video_idx == 0 else self.stack_video_clips[video_idx - 1])] - - for clip_of_video in clips_desire: - # video frame processing - frames = [] - - # derive the video offset - video_offset_duration = clip_of_video * self.clip_duration - - # augment the data only while training. - if (self.random_speed): - # the slow motion factor for video data augmentation - video_speed_factor = random.random() * 0.5 + 0.5 - video_shift_factor = random.random() * (1 - video_speed_factor) - else: - video_speed_factor = 1 - video_shift_factor = 0 - logging.debug(f"Video Speed Motion Factor: {video_speed_factor}") - logging.debug(f"Video Shift Factor: {video_shift_factor}") - - # the amount of frames to skip - video_sample_offset = int( - video_offset_duration + self.clip_duration * video_shift_factor - ) - # the amount of frames for the duration of a clip - video_clip_samples = int( - video_sample_freq * self.clip_duration * video_speed_factor - ) - # the amount of frames to skip in order to meet the num_frames per clip.(excluding the head & tail frames ) - if (self.num_frames == 1): - video_sample_stride = 0 - else: - video_sample_stride = ( - (video_clip_samples - 1) / (self.num_frames - 1) - ) / video_sample_freq - - logging.debug(f"Loading Video: {vid_path}") - logging.debug(f"Sample Offset: {video_sample_offset}") - logging.debug(f"Sample Stride: {video_sample_stride}") - - # fetch frames of clip duration - indices = [] - for sample_idx in range(self.num_frames): - vid_reader.seek(video_sample_offset + sample_idx * video_sample_stride) - frame = next(vid_reader) - frames.append(frame["data"]) - fps = vid_reader.get_metadata()['video']['fps'][0] - pts = frame["pts"] - indices.append(round(pts * fps)) - - # augment the data only while training. - frames, replay = self.training_augmentations(frames, replay) - logging.debug("Augmentations Applied.") - - # stack list of torch frames to tensor - frames = torch.stack(frames) - - # transformation - frames = self.transform(frames) - - # padding and masking missing frames. - mask = torch.tensor( - [1.] * len(frames) + - [0.] * (self.num_frames - len(frames)), - dtype=torch.bool - ) - if frames.shape[0] < self.num_frames: - diff = self.num_frames - len(frames) - padding = torch.zeros( - (diff, *frames.shape[1:]), - dtype=frames.dtype - ) - frames = torch.concatenate( - frames, - padding - ) - indices += ([-1] * diff) - - entity_clips.append(frames) - entity_masks.append(mask) - entity_indices.append(indices) - logging.debug( - "Video Clip: {}({}s~{}s), Completed!".format( - vid_path, - self.clip_duration * clip_of_video, - (self.clip_duration + 1) * clip_of_video - ) - ) - - del vid_reader - - entity_clips = torch.stack(entity_clips) - entity_masks = torch.stack(entity_masks) - - entity_info = { - "comp": comp, - "video_name": video_name, - "df_type": df_type, - "vid_path": vid_path, - "indices": entity_indices - } - entity_data = { - "clips": entity_clips, - "label": 0 if (df_type == "REAL") else 1, - "df_label": list(self.TYPE_DIRS.keys()).index(df_type), - "masks": entity_masks, - "idx": idx, - "replay": replay - } - - if with_entity_info: - return {**entity_data, **entity_info} - else: - return entity_data - - def video_info(self, idx): - if (self.pack): - video_idx = idx - else: - video_idx = next(i for i, x in enumerate(self.stack_video_clips) if idx < x) - return video_idx, *self.video_list[video_idx] - - def video_meta(self, idx): - df_type, comp, name = self.video_info(idx)[1:4] - return self.video_table[df_type][comp][name] - - def video_repr(self, idx): - return '/'.join([str(i) for i in self.video_info(idx)[1:-1]]) - - def collate_fn(self, batch): - item_videos, item_labels, item_df_labels, item_masks, item_entity_indices = list(zip(*batch)) - - batch_entity_clips = [i for l in item_videos for i in l] - batch_entity_label = [i for l in item_labels for i in l] - batch_entity_df_label = [i for l in item_df_labels for i in l] - batch_entity_masks = [i for l in item_masks for i in l] - batch_entity_indices = [i for l in item_entity_indices for i in l] - - clips = torch.cat(batch_entity_clips) - masks = torch.cat(batch_entity_masks) - - # post-process the label & index to match the shape of corresponding clips - num_clips_per_entity = torch.tensor([entity_clips.shape[0] for entity_clips in batch_entity_clips]) - labels = torch.tensor(batch_entity_label).repeat_interleave(num_clips_per_entity) - df_labels = torch.tensor(batch_entity_df_label).repeat_interleave(num_clips_per_entity) - indices = torch.tensor(batch_entity_indices).repeat_interleave(num_clips_per_entity) - - assert clips.shape[0] == masks.shape[0] == labels.shape[0] == indices.shape[0] - - dts_name = self.cls_name - names = [self.video_repr(i) for i in indices] - - return dict( - xyz=( - clips, - labels, - dict( - masks=masks - ) - ), - indices=indices, - dts_name=dts_name, - names=names, - df_labels=df_labels - ) - - -class FFPPDataModule(DeepFakeDataModule): - def __init__( - self, - df_types: List[str] = [], - compressions: List[str] = [], - strategy: FFPPSampleStrategy = FFPPSampleStrategy.NORMAL, - augmentations: List[FFPPAugmentation] = [FFPPAugmentation.NONE], - force_random_speed: bool = None, - *args, - **kargs - ): - super().__init__(*args, **kargs) - self.df_types = sorted( - set([i for i in df_types if i in FFPP.TYPE_DIRS]), - reverse=True - ) - self.compressions = sorted( - set([i for i in compressions if i in FFPP.COMPRESSIONS]), - reverse=True - ) - self.strategy = strategy - self.augmentations = FFPPAugmentation(sum(augmentations)) - self.force_random_speed = force_random_speed - - def affine_model(self, model): - super().affine_model(model) - self.n_px = model.n_px - - def prepare_data(self): - FFPP.prepare_data(self.data_dir, self.compressions, self.vid_ext) - - def setup(self, stage: str): - # Assign train/val datasets for use in dataloaders - data_cls = partial( - FFPP, - data_dir=self.data_dir, - vid_ext=self.vid_ext, - df_types=self.df_types, - compressions=self.compressions, - num_frames=self.num_frames, - clip_duration=self.clip_duration, - transform=self.transform, - n_px=self.n_px, - ratio=self.ratio, - force_random_speed=self.force_random_speed - ) - - if stage == "fit": - self._train_dataset = data_cls( - split="train", - pack=self.pack, - strategy=self.strategy, - augmentations=self.augmentations, - max_clips=self.max_clips - ) - self._val_dataset = data_cls( - split="val", - pack=self.pack, - strategy=FFPPSampleStrategy.NORMAL, - augmentations=FFPPAugmentation.NONE, - max_clips=self.max_clips - ) - - elif stage == "test": - self._test_dataset = data_cls( - split="test", - pack=self.pack, - strategy=FFPPSampleStrategy.NORMAL, - augmentations=FFPPAugmentation.NONE - ) - - -if __name__ == "__main__": - from src.utility.visualize import dataset_entity_visualize - # logging.basicConfig(level="DEBUG") - - class Dummy(): - pass - - dtm = FFPPDataModule( - ["REAL", "DF", "FS", "F2F", "NT"], - ["c23"], - data_dir="datasets/ffpp/", - vid_ext='.avi', - batch_size=24, - num_workers=8, - num_frames=10, - clip_duration=4, - force_random_speed=False, - strategy=FFPPSampleStrategy.CONTRAST_RAND, - augmentations=[ - FFPPAugmentation.NORMAL, - FFPPAugmentation.VIDEO, - FFPPAugmentation.VIDEO_RRC, - FFPPAugmentation.FRAME - ], - pack=False, - ratio=0.5, - max_clips=5 - ) - - model = Dummy() - model.n_px = 224 - model.transform = lambda x: x - dtm.prepare_data() - dtm.affine_model(model) - dtm.setup("fit") - dtm.setup("validate") - dtm.setup("test") - - # # iterate the whole dataset for visualization and sanity check - # for split, iterable in { - # 'train': dtm._train_dataset, 'val': dtm._val_dataset, 'test': dtm._test_dataset - # }.items(): - # save_folder = f"./misc/extern/dump_dataset/ffpp/{split}/" - # # entity dump - # # for entity_idx in tqdm(range(len(iterable))): - # # if (entity_idx > 100): - # # break - # # dataset_entity_visualize(iterable.get_entity(entity_idx, with_entity_info=True), base_dir=save_folder) - - # # item dump - # for item_idx in tqdm(range(len(iterable))): - # if (item_idx > 100): - # break - # save_prefix = f"{item_idx}-" - # for entity_data in iterable.get_item(item_idx, with_entity_info=True): - # dataset_entity_visualize(entity_data, base_dir=save_folder, save_prefix=save_prefix) - - # iterate the all dataloaders for debugging. - for fn in [dtm.train_dataloader, dtm.val_dataloader, dtm.test_dataloader]: - iterable = fn() - for batch in tqdm(iterable): - pass diff --git a/video/dfd-fcg/model_code/src/dataset/fsh.py b/video/dfd-fcg/model_code/src/dataset/fsh.py deleted file mode 100755 index a00187b470c282c1b61500acec09d851d5533c86..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/dataset/fsh.py +++ /dev/null @@ -1,341 +0,0 @@ -from .base import * - - -class FSh(DeepFakeDataset): - TYPE_DIRS = { - 'REAL': 'real/', - 'FSh': 'FSh/', - } - - COMPRESSIONS = {'c23', 'raw', 'c40'} - - @classmethod - def prepare_data(cls, data_dir, compressions, vid_ext): - progress_bar = tqdm(cls.TYPE_DIRS.keys()) - for df_type in progress_bar: - for comp in compressions: - # description for progress bar - progress_bar.set_description(f"{df_type}: {comp}/videos") - - # compose the path for metadata cache - meta_cache_path = path.expanduser(cls.get_cache_dir(df_type, comp)) - - # next entity if cache exists - if path.exists(meta_cache_path): - continue - - # video directory for df_type of compression - video_dir = path.join(data_dir, cls.TYPE_DIRS[df_type], f'{comp}/videos') - - # build metadata - video_metas = cls.build_metadata(data_dir, video_dir, vid_ext) - - # cache the metadata - makedirs(path.dirname(meta_cache_path), exist_ok=True) - with open(meta_cache_path, 'wb') as f: - pickle.dump(video_metas, f) - - def __init__( - self, - compressions: List[str], - *args, - **kargs - ): - super().__init__(*args, **kargs) - assert self.split == "test", "FSh only supports the test set." - # configurations - self.df_types = list(FSh.TYPE_DIRS.keys()) - self.compressions = compressions - - # record missing videos in the csv file for further usage. - self.stray_videos = {} - - # stacking data clips - self.stack_video_clips = [] - - # build video metadata structure for fast retreival - self._build_video_table() - self._build_video_list() - - def _build_video_table(self): - self.video_table = {} - for df_type in self.df_types: - self.video_table[df_type] = {} - for comp in self.compressions: - # compose cache directory path - meta_cache_path = path.expanduser(self.get_cache_dir(df_type, comp)) - - # load metadatas - with open(meta_cache_path, 'rb') as f: - video_metas = pickle.load(f) - - # post process the video path - for idx in video_metas: - video_metas[idx]["path"] = path.join(self.data_dir, video_metas[idx]["path"]) + self.vid_ext - - # store in video table. - self.video_table[df_type][comp] = video_metas - - def _build_video_list(self): - self.video_list = [] - - with open(path.join(self.data_dir, 'csv_files', f'{self.split}.json')) as f: - idxs = json.load(f) - - logging.debug(f"DF TYPES:{self.df_types}") - logging.debug(f"DF TYPES:{self.compressions}") - - for df_type in self.df_types: - for comp in self.compressions: - comp_videos = [] - adj_idxs = sorted( - [i for inner in idxs for i in inner] - if df_type == 'REAL' else - ['_'.join(idx) for idx in idxs] + ['_'.join(reversed(idx)) for idx in idxs] - ) - - for idx in adj_idxs: - if idx in self.video_table[df_type][comp]: - clips = int(self.video_table[df_type][comp][idx]["duration"] // self.clip_duration) - if (clips > 0): - clips = min(clips, self.max_clips) - comp_videos.append((df_type, comp, idx, clips)) - else: - logging.warning( - f'Video {path.join(self.data_dir, self.TYPE_DIRS[df_type], comp, "videos", idx)} does not present in the processed dataset.' - ) - self.stray_videos[f"{df_type}/{comp}/{idx}"] = (0 if df_type == "REAL" else 1) - self.video_list += comp_videos[:int(len(comp_videos) * self.ratio)] - - # permanant shuffle - random.Random(1019).shuffle(self.video_list) - - # stacking up the amount of data clips for further usage - self.stack_video_clips = [0] - for df_type, _, idx, i in self.video_list: - self.stack_video_clips.append(self.stack_video_clips[-1] + i) - self.stack_video_clips.pop(0) - - def __len__(self): - if (self.pack): - return len(self.video_list) - else: - return self.stack_video_clips[-1] - - def __getitem__(self, idx): - item_entities = self.get_item(idx) - return [[entity[k] for entity in item_entities] for k in item_entities[0].keys()] - - def get_item(self, idx, with_entity_info=False): - item_entities = [ - self.get_entity( - idx, - with_entity_info=with_entity_info - ) - ] - return item_entities - - def get_entity(self, idx, replay=None, with_entity_info=False): - video_idx, df_type, comp, video_name, num_clips = self.video_info(idx) - video_meta = self.video_table[df_type][comp][video_name] - logging.debug(f"Entity/Video Index:{idx}/{video_idx}") - logging.debug(f"Entity DF/COMP:{df_type}/{comp}") - - # - video path - vid_path = video_meta["path"] - # - create video reader - vid_reader = VideoReader(vid_path, "video") - # - frames per second - video_sample_freq = vid_reader.get_metadata()["video"]["fps"][0] - - entity_clips = [] - entity_masks = [] - - # desire all clips in the video under pack mode, else fetch only the clip of index. - if (self.pack): - clips_desire = range(num_clips) - else: - clips_desire = [idx - (0 if video_idx == 0 else self.stack_video_clips[video_idx - 1])] - - for clip_of_video in clips_desire: - # video frame processing - frames = [] - - # the amount of frames to skip - video_sample_offset = int(clip_of_video * self.clip_duration) - - # the amount of frames for the duration of a clip - video_clip_samples = int(video_sample_freq * self.clip_duration) - - # the amount of frames to skip in order to meet the num_frames per clip.(excluding the head & tail frames ) - if (self.num_frames == 1): - video_sample_stride = 0 - else: - video_sample_stride = ( - (video_clip_samples - 1) / (self.num_frames - 1) - ) / video_sample_freq - - logging.debug(f"Loading Video: {vid_path}") - logging.debug(f"Sample Offset: {video_sample_offset}") - logging.debug(f"Sample Stride: {video_sample_stride}") - - # fetch frames of clip duration - for sample_idx in range(self.num_frames): - vid_reader.seek(video_sample_offset + sample_idx * video_sample_stride) - frame = next(vid_reader) - frames.append(frame["data"]) - - # stack list of torch frames to tensor - frames = torch.stack(frames) - - # transformation - frames = self.transform(frames) - - # padding and masking missing frames. - mask = torch.tensor( - [1.] * len(frames) + - [0.] * (self.num_frames - len(frames)), - dtype=torch.bool - ) - if frames.shape[0] < self.num_frames: - diff = self.num_frames - len(frames) - padding = torch.zeros( - (diff, *frames.shape[1:]), - dtype=frames.dtype - ) - frames = torch.concatenate( - frames, - padding - ) - - entity_clips.append(frames) - entity_masks.append(mask) - logging.debug( - "Video Clip: {}({}s~{}s), Completed!".format( - vid_path, - self.clip_duration * clip_of_video, - (self.clip_duration + 1) * clip_of_video - ) - ) - - del vid_reader - - entity_clips = torch.stack(entity_clips) - entity_masks = torch.stack(entity_masks) - - entity_info = { - "comp": comp, - "video_name": video_name, - "df_type": df_type, - "vid_path": vid_path - } - entity_data = { - "clips": entity_clips, - "label": 0 if (df_type == "REAL") else 1, - "masks": entity_masks, - "idx": idx - } - - if with_entity_info: - return {**entity_data, **entity_info} - else: - return entity_data - - def video_info(self, idx): - if (self.pack): - video_idx = idx - else: - video_idx = next(i for i, x in enumerate(self.stack_video_clips) if idx < x) - return video_idx, *self.video_list[video_idx] - - def video_meta(self, idx): - df_type, comp, name = self.video_info(idx)[1:4] - return self.video_table[df_type][comp][name] - - def video_repr(self, idx): - return '/'.join([str(i) for i in self.video_info(idx)[1:-1]]) - - -class FShDataModule(DeepFakeDataModule): - def __init__( - self, - compressions: List[str] = [], - *args, **kargs - - ): - super().__init__(*args, **kargs) - self.compressions = sorted( - set([i for i in compressions if i in FSh.COMPRESSIONS]), - reverse=True - ) - - def prepare_data(self): - FSh.prepare_data(self.data_dir, self.compressions, self.vid_ext) - - def setup(self, stage: str): - # Assign train/val datasets for use in dataloaders - data_cls = partial( - FSh, - data_dir=self.data_dir, - vid_ext=self.vid_ext, - compressions=self.compressions, - num_frames=self.num_frames, - clip_duration=self.clip_duration, - transform=self.transform, - ratio=self.ratio, - max_clips=self.max_clips, - split="test", - pack=self.pack - ) - - if (stage == "fit" or stage == "valid"): - self._val_dataset = data_cls( - max_clips=self.max_clips - ) - elif (stage == "test"): - self._test_dataset = data_cls() - - -if __name__ == "__main__": - from src.utility.visualize import dataset_entity_visualize - # logging.basicConfig(level="DEBUG") - - class Dummy(): - pass - - dtm = FShDataModule( - ["c23"], - data_dir="datasets/ffpp/", - vid_ext='.avi', - batch_size=5, - num_workers=8, - num_frames=10, - clip_duration=5, - pack=False, - ratio=1.0, - max_clips=3 - ) - - model = Dummy() - model.transform = lambda x: x - dtm.prepare_data() - dtm.affine_model(model) - dtm.setup("fit") - dtm.setup("validate") - dtm.setup("test") - - # iterate the whole dataset for visualization and sanity check - iterable = dtm._test_dataset - save_folder = f"./misc/extern/dump_dataset/fsh/test/" - - # entity dump - for entity_idx in tqdm(range(len(iterable))): - if (entity_idx > 300): - break - dataset_entity_visualize(iterable.get_entity(entity_idx, with_entity_info=True), base_dir=save_folder) - - # iterate the all dataloaders for debugging. - # for fn in [dtm.val_dataloader, dtm.test_dataloader]: - # iterable = fn() - # for batch in tqdm(iterable): - # pass diff --git a/video/dfd-fcg/model_code/src/dataset/heygen.py b/video/dfd-fcg/model_code/src/dataset/heygen.py deleted file mode 100755 index 4e467ab1955ba928f938391a1a826b7c38788bdd..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/dataset/heygen.py +++ /dev/null @@ -1,305 +0,0 @@ -from .base import * - - -from .base import * - - -class HeyGen(DeepFakeDataset): - - def __init__(self, *args, **kargs): - super().__init__(*args, **kargs) - self._build_video_table() - self._build_video_list() - - @classmethod - def prepare_data(cls, data_dir, vid_ext): - # compose the path for metadata cache - meta_cache_path = path.expanduser(cls.get_cache_dir()) - - # exit if cache exists - if path.exists(meta_cache_path): - return - - # video directory for df_type - video_dir = path.join(data_dir, 'videos') - - # fetch video metadatas - video_metas = cls.build_metadata(data_dir, video_dir, vid_ext) - - # cache the metadata - makedirs(path.dirname(meta_cache_path), exist_ok=True) - with open(meta_cache_path, 'wb') as f: - pickle.dump(video_metas, f) - - def _build_video_table(self): - self.video_table = {} - - # compose cache directory path - meta_cache_path = path.expanduser(self.get_cache_dir()) - - # load metadatas - with open(meta_cache_path, 'rb') as f: - video_metas = pickle.load(f) - - # post process the video path - for idx in video_metas: - video_metas[idx]["path"] = path.join(self.data_dir, video_metas[idx]["path"]) + self.vid_ext - - # store in video table. - self.video_table = video_metas - - def _build_video_list(self): - video_table = pd.read_csv( - path.join(self.data_dir, 'csv_files', f'{self.split}.csv'), - sep=' ', - header=None, - names=["name", "label"] - ) - - self.video_list = [] - label_videos = { - "REAL": [], - "FAKE": [] - } - for index, row in video_table.iterrows(): - filename = row["name"] - name, ext = path.splitext(filename) - label = "REAL" if row["label"] == 0 else "FAKE" - if name in self.video_table: - clips = int(self.video_table[name]["duration"] // self.clip_duration) - if (clips > 0): - clips = min(clips, self.max_clips) - label_videos[label].append((label, name, clips)) - else: - name = f"{label}/{name}" - logging.warning( - f'Video {path.join(self.data_dir, "videos", name)} does not present in the processed dataset.' - ) - self.stray_videos[name] = (0 if label == "REAL" else 1) - for label in label_videos: - _videos = label_videos[label] - self.video_list += _videos[:int(len(_videos) * self.ratio)] - - # permanant shuffle - random.Random(1019).shuffle(self.video_list) - - # stacking up the amount of data clips for further usage - self.stack_video_clips = [0] - for _, _, i in self.video_list: - self.stack_video_clips.append(self.stack_video_clips[-1] + i) - self.stack_video_clips.pop(0) - - def __len__(self): - if (self.pack): - return len(self.video_list) - else: - return self.stack_video_clips[-1] - - def __getitem__(self, idx): - item_entities = self.get_item(idx) - return [[entity[k] for entity in item_entities] for k in item_entities[0].keys()] - - def get_item(self, idx, with_entity_info=False): - item_entities = [ - self.get_entity( - idx, - with_entity_info=with_entity_info - ) - ] - return item_entities - - def get_entity(self, idx, with_entity_info=False): - video_idx, df_type, video_name, num_clips = self.video_info(idx) - video_meta = self.video_table[video_name] - logging.debug(f"Entity/Video Index:{idx}/{video_idx}") - logging.debug(f"Entity DF:{df_type}") - - # - video path - vid_path = video_meta["path"] - # - create video reader - vid_reader = VideoReader(vid_path, "video") - # - frames per second - video_sample_freq = vid_reader.get_metadata()["video"]["fps"][0] - - entity_clips = [] - entity_masks = [] - - # desire all clips in the video under pack mode, else fetch only the clip of index. - if (self.pack): - clips_desire = range(num_clips) - else: - clips_desire = [idx - (0 if video_idx == 0 else self.stack_video_clips[video_idx - 1])] - - for clip_of_video in clips_desire: - # video frame processing - frames = [] - - # derive the video offset - video_offset_duration = clip_of_video * self.clip_duration - - # the amount of frames to skip - video_sample_offset = int(video_offset_duration) - - # the amount of frames for the duration of a clip - video_clip_samples = int(video_sample_freq * self.clip_duration) - - # the amount of frames to skip in order to meet the num_frames per clip.(excluding the head & tail frames ) - if (self.num_frames == 1): - video_sample_stride = 0 - else: - video_sample_stride = ( - (video_clip_samples - 1) / (self.num_frames - 1) - ) / video_sample_freq - - logging.debug(f"Loading Video: {vid_path}") - logging.debug(f"Sample Offset: {video_sample_offset}") - logging.debug(f"Sample Stride: {video_sample_stride}") - - # fetch frames of clip duration - for sample_idx in range(self.num_frames): - vid_reader.seek(video_sample_offset + sample_idx * video_sample_stride) - frame = next(vid_reader) - frames.append(frame["data"]) - - # stack list of torch frames to tensor - frames = torch.stack(frames) - - # transformation - frames = self.transform(frames) - - # padding and masking missing frames. - mask = torch.tensor( - [1.] * len(frames) + - [0.] * (self.num_frames - len(frames)), - dtype=torch.bool - ) - if frames.shape[0] < self.num_frames: - diff = self.num_frames - len(frames) - padding = torch.zeros( - (diff, *frames.shape[1:]), - dtype=frames.dtype - ) - frames = torch.concatenate( - frames, - padding - ) - - entity_clips.append(frames) - entity_masks.append(mask) - logging.debug( - "Video Clip: {}({}s~{}s), Completed!".format( - vid_path, - self.clip_duration * clip_of_video, - (self.clip_duration + 1) * clip_of_video - ) - ) - - del vid_reader - - entity_clips = torch.stack(entity_clips) - entity_masks = torch.stack(entity_masks) - - entity_info = { - "video_name": video_name, - "df_type": df_type, - "vid_path": vid_path - } - entity_data = { - "clips": entity_clips, - "label": 0 if (df_type == "REAL") else 1, - "masks": entity_masks, - "idx": idx - } - - if with_entity_info: - return {**entity_data, **entity_info} - else: - return entity_data - - def video_info(self, idx): - if (self.pack): - video_idx = idx - else: - video_idx = next(i for i, x in enumerate(self.stack_video_clips) if idx < x) - return video_idx, *self.video_list[video_idx] - - def video_repr(self, idx): - return '/'.join([str(i) for i in self.video_info(idx)[1:-1]]) - - def video_meta(self, idx): - df_type, name = self.video_info(idx)[1:3] - return self.video_table[name] - - -class HeyGenDataModule(DeepFakeDataModule): - def __init__( - self, - *args, - **kargs - ): - super().__init__(*args, **kargs) - - def prepare_data(self): - HeyGen.prepare_data(self.data_dir, self.vid_ext) - - def setup(self, stage: str): - # Assign train/val datasets for use in dataloaders - data_cls = partial( - HeyGen, - data_dir=self.data_dir, - vid_ext=self.vid_ext, - num_frames=self.num_frames, - clip_duration=self.clip_duration, - transform=self.transform, - ratio=self.ratio, - split="test", - pack=self.pack - ) - - if (stage == "fit" or stage == "valid"): - self._val_dataset = data_cls( - max_clips=self.max_clips - ) - elif (stage == "test"): - self._test_dataset = data_cls() - - -if __name__ == "__main__": - from src.utility.visualize import dataset_entity_visualize - - class Dummy(): - pass - - dtm = HeyGenDataModule( - data_dir="datasets/heygen/", - vid_ext=".avi", - batch_size=1, - num_workers=8, - num_frames=10, - clip_duration=3, - ratio=1, - pack=False - ) - - model = Dummy() - model.transform = lambda x: x - dtm.prepare_data() - dtm.affine_model(model) - dtm.setup("fit") - dtm.setup("validate") - dtm.setup("test") - - # # iterate the whole dataset for visualization and sanity check - # iterable = dtm._test_dataset - # save_folder = f"./misc/extern/dump_dataset/heygen/test/" - # # entity dump - # for entity_idx in tqdm(range(len(iterable))): - # if (entity_idx > 100): - # break - # dataset_entity_visualize(iterable.get_entity(entity_idx, with_entity_info=True), base_dir=save_folder) - - # iterate the all dataloaders for debugging. - for fn in [dtm.val_dataloader, dtm.test_dataloader]: - iterable = fn() - for batch in tqdm(iterable): - pass diff --git a/video/dfd-fcg/model_code/src/dataset/higen.py b/video/dfd-fcg/model_code/src/dataset/higen.py deleted file mode 100755 index 8e31fe04459510fb768a8ab65e31eba6db2a72e8..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/dataset/higen.py +++ /dev/null @@ -1,438 +0,0 @@ -from .base import * - - -from .base import * - - -class HiGen(DeepFakeDataset): - - def __init__(self, n_px, *args, **kargs): - super().__init__(*args, **kargs) - self._build_video_table() - self._build_video_list() - self.n_px = n_px - augmentations = [ - alb.HorizontalFlip(), - alb.Resize( - self.n_px, self.n_px, cv2.INTER_CUBIC - ), - alb.RGBShift( - (-20, 20), (-20, 20), (-20, 20), p=0.3 - ), - alb.HueSaturationValue( - hue_shift_limit=(-0.3, 0.3), sat_shift_limit=(-0.3, 0.3), val_shift_limit=(-0.3, 0.3), p=0.3 - ), - alb.RandomBrightnessContrast( - brightness_limit=(-0.1, 0.1), contrast_limit=(-0.1, 0.1), p=0.3 - ), - alb.RandomResizedCrop( - self.n_px, self.n_px, scale=(0.6, 1.0), ratio=(1, 1), p=1.0 - ), - alb.OneOf( - [ - alb.ImageCompression( - quality_lower=40, quality_upper=100, p=1 - ), - alb.Compose( - [ - alb.RandomScale( - (-0.4, -0.2), always_apply=True - ), - alb.Resize( - self.n_px, self.n_px, cv2.INTER_CUBIC, always_apply=True - ) - ], p=1 - ), - alb.Blur( - [3, 5], - p=1 - ) - ], - p=0.5 - ) - ] - - self.video_augmentation = alb.ReplayCompose( - augmentations, - p=1. - ) - - augmentations = [ - alb.Resize( - self.n_px, self.n_px, cv2.INTER_CUBIC - ), - alb.RGBShift( - (-5, 5), (-5, 5), (-5, 5), p=0.1 - ), - alb.HueSaturationValue( - hue_shift_limit=(-0.05, 0.05), sat_shift_limit=(-0.05, 0.05), val_shift_limit=(-0.05, 0.05), p=0.1 - ), - alb.RandomBrightnessContrast( - brightness_limit=(-0.05, 0.05), contrast_limit=(-0.05, 0.05), p=0.1 - ), - alb.ImageCompression( - quality_lower=80, quality_upper=100, p=0.1 - ), - ] - - self.frame_augmentation = alb.ReplayCompose( - augmentations, - p=1.0 - ) - - def driver(x, replay=None): - # transform to numpy, the alb required format - x = [_x.numpy().transpose((1, 2, 0)) for _x in x] - - # initialize replay data - if (replay == None): - replay = {} - - # frame augmentation - if (not self.frame_augmentation == None): - if ("frame" in replay): - assert len(replay["frame"]) == len(x), "Error! frame replay should match the number of frames" - x = [ - alb.ReplayCompose.replay( - _r, - image=_x - )["image"] - for _x, _r in zip(x, replay["frame"]) - ] - - else: - replay["frame"] = [None for _ in x] - for i, _x in enumerate(x): - result = self.frame_augmentation(image=_x) - x[i] = result["image"] - replay["frame"][i] = result["replay"] - # sequence augmentation - if (not self.video_augmentation == None): - if ("video" in replay): - x = [ - alb.ReplayCompose.replay( - replay["video"], - image=_x - )["image"] - for _x in x - ] - else: - replay["video"] = self.video_augmentation(image=x[0])["replay"] - x = [ - alb.ReplayCompose.replay( - replay["video"], - image=_x - )["image"] - for _x in x - ] - # revert to tensor - x = [torch.from_numpy(_x.transpose((2, 0, 1))) for _x in x] - return x, replay - - self.training_augmentations = driver - - @classmethod - def prepare_data(cls, data_dir, vid_ext): - # compose the path for metadata cache - meta_cache_path = path.expanduser(cls.get_cache_dir()) - - # exit if cache exists - if path.exists(meta_cache_path): - return - - # video directory for df_type - video_dir = path.join(data_dir, 'videos') - - # fetch video metadatas - video_metas = cls.build_metadata(data_dir, video_dir, vid_ext) - - # cache the metadata - makedirs(path.dirname(meta_cache_path), exist_ok=True) - with open(meta_cache_path, 'wb') as f: - pickle.dump(video_metas, f) - - def _build_video_table(self): - self.video_table = {} - - # compose cache directory path - meta_cache_path = path.expanduser(self.get_cache_dir()) - - # load metadatas - with open(meta_cache_path, 'rb') as f: - video_metas = pickle.load(f) - - # post process the video path - for idx in video_metas: - video_metas[idx]["path"] = path.join(self.data_dir, video_metas[idx]["path"]) + self.vid_ext - - # store in video table. - self.video_table = video_metas - - def _build_video_list(self): - video_table = pd.read_csv( - path.join(self.data_dir, 'csv_files', f'{self.split}.csv'), - sep=' ', - header=None, - names=["name", "label"] - ) - - self.video_list = [] - label_videos = { - "REAL": [], - "FAKE": [] - } - for index, row in video_table.iterrows(): - filename = row["name"] - name, ext = path.splitext(filename) - label = "REAL" if row["label"] == 0 else "FAKE" - if name in self.video_table: - clips = int(self.video_table[name]["duration"] // self.clip_duration) - if (clips > 0): - clips = min(clips, self.max_clips) - label_videos[label].append((label, name, clips)) - else: - name = f"{label}/{name}" - logging.warning( - f'Video {path.join(self.data_dir, "videos", name)} does not present in the processed dataset.' - ) - self.stray_videos[name] = (0 if label == "REAL" else 1) - for label in label_videos: - _videos = label_videos[label] - self.video_list += _videos[:int(len(_videos) * self.ratio)] - - # permanant shuffle - random.Random(1019).shuffle(self.video_list) - - # stacking up the amount of data clips for further usage - self.stack_video_clips = [0] - for _, _, i in self.video_list: - self.stack_video_clips.append(self.stack_video_clips[-1] + i) - self.stack_video_clips.pop(0) - - def __len__(self): - if (self.pack): - return len(self.video_list) - else: - return self.stack_video_clips[-1] - - def __getitem__(self, idx): - item_entities = self.get_item(idx) - return [[entity[k] for entity in item_entities] for k in item_entities[0].keys()] - - def get_item(self, idx, with_entity_info=False): - item_entities = [ - self.get_entity( - idx, - with_entity_info=with_entity_info - ) - ] - return item_entities - - def get_entity(self, idx, with_entity_info=False): - video_idx, df_type, video_name, num_clips = self.video_info(idx) - video_meta = self.video_table[video_name] - logging.debug(f"Entity/Video Index:{idx}/{video_idx}") - logging.debug(f"Entity DF:{df_type}") - - # - video path - vid_path = video_meta["path"] - # - create video reader - vid_reader = VideoReader(vid_path, "video") - # - frames per second - video_sample_freq = vid_reader.get_metadata()["video"]["fps"][0] - - entity_clips = [] - entity_masks = [] - - # desire all clips in the video under pack mode, else fetch only the clip of index. - if (self.pack): - clips_desire = range(num_clips) - else: - clips_desire = [idx - (0 if video_idx == 0 else self.stack_video_clips[video_idx - 1])] - - for clip_of_video in clips_desire: - # video frame processing - frames = [] - - # derive the video offset - video_offset_duration = clip_of_video * self.clip_duration - - # augment the data only while training. - video_speed_factor = random.random() * 0.5 + 0.5 - video_shift_factor = random.random() * (1 - video_speed_factor) - logging.debug(f"Video Speed Motion Factor: {video_speed_factor}") - logging.debug(f"Video Shift Factor: {video_shift_factor}") - - # the amount of frames to skip - video_sample_offset = int( - video_offset_duration + self.clip_duration * video_shift_factor - ) - # the amount of frames for the duration of a clip - video_clip_samples = int( - video_sample_freq * self.clip_duration * video_speed_factor - ) - # the amount of frames to skip in order to meet the num_frames per clip.(excluding the head & tail frames ) - if (self.num_frames == 1): - video_sample_stride = 0 - else: - video_sample_stride = ( - (video_clip_samples - 1) / (self.num_frames - 1) - ) / video_sample_freq - - logging.debug(f"Loading Video: {vid_path}") - logging.debug(f"Sample Offset: {video_sample_offset}") - logging.debug(f"Sample Stride: {video_sample_stride}") - - # fetch frames of clip duration - for sample_idx in range(self.num_frames): - vid_reader.seek(video_sample_offset + sample_idx * video_sample_stride) - frame = next(vid_reader) - frames.append(frame["data"]) - - # augment the data only while training. - frames, _ = self.training_augmentations(frames) - logging.debug("Augmentations Applied.") - - # stack list of torch frames to tensor - frames = torch.stack(frames) - - # transformation - frames = self.transform(frames) - - # padding and masking missing frames. - mask = torch.tensor( - [1.] * len(frames) + - [0.] * (self.num_frames - len(frames)), - dtype=torch.bool - ) - if frames.shape[0] < self.num_frames: - diff = self.num_frames - len(frames) - padding = torch.zeros( - (diff, *frames.shape[1:]), - dtype=frames.dtype - ) - frames = torch.concatenate( - frames, - padding - ) - - entity_clips.append(frames) - entity_masks.append(mask) - logging.debug( - "Video Clip: {}({}s~{}s), Completed!".format( - vid_path, - self.clip_duration * clip_of_video, - (self.clip_duration + 1) * clip_of_video - ) - ) - - del vid_reader - - entity_clips = torch.stack(entity_clips) - entity_masks = torch.stack(entity_masks) - - entity_info = { - "video_name": video_name, - "df_type": df_type, - "vid_path": vid_path - } - entity_data = { - "clips": entity_clips, - "label": 0 if (df_type == "REAL") else 1, - "masks": entity_masks, - "idx": idx - } - - if with_entity_info: - return {**entity_data, **entity_info} - else: - return entity_data - - def video_info(self, idx): - if (self.pack): - video_idx = idx - else: - video_idx = next(i for i, x in enumerate(self.stack_video_clips) if idx < x) - return video_idx, *self.video_list[video_idx] - - def video_repr(self, idx): - return '/'.join([str(i) for i in self.video_info(idx)[1:-1]]) - - def video_meta(self, idx): - df_type, name = self.video_info(idx)[1:3] - return self.video_table[name] - - -class HiGenDataModule(DeepFakeDataModule): - def __init__( - self, - *args, - **kargs - ): - super().__init__(*args, **kargs) - - def prepare_data(self): - HiGen.prepare_data(self.data_dir, self.vid_ext) - - def affine_model(self, model): - super().affine_model(model) - self.n_px = model.n_px - - def setup(self, stage: str): - # Assign train/val datasets for use in dataloaders - data_cls = partial( - HiGen, - data_dir=self.data_dir, - vid_ext=self.vid_ext, - num_frames=self.num_frames, - clip_duration=self.clip_duration, - transform=self.transform, - n_px=self.n_px, - ratio=self.ratio, - split="train", - pack=self.pack - ) - - if (stage == "fit"): - self._train_dataset = data_cls( - max_clips=self.max_clips - ) - - -if __name__ == "__main__": - from src.utility.visualize import dataset_entity_visualize - - class Dummy(): - pass - - dtm = HiGenDataModule( - data_dir="datasets/higen/", - vid_ext=".avi", - batch_size=1, - num_workers=4, - num_frames=10, - clip_duration=1, - ratio=1.0 - ) - - model = Dummy() - model.transform = lambda x: x - model.n_px = 224 - dtm.prepare_data() - dtm.affine_model(model) - dtm.setup("fit") - - # # iterate the whole dataset for visualization and sanity check - iterable = dtm._train_dataset - save_folder = f"./misc/extern/dump_dataset/higen/train/" - # entity dump - for entity_idx in tqdm(range(len(iterable))): - if (entity_idx > 100): - break - dataset_entity_visualize(iterable.get_entity(entity_idx, with_entity_info=True), base_dir=save_folder) - - # iterate the all dataloaders for debugging. - # for fn in [dtm.train_dataloader]: - # iterable = fn() - # for batch in tqdm(iterable): - # pass diff --git a/video/dfd-fcg/model_code/src/dataset/wdf.py b/video/dfd-fcg/model_code/src/dataset/wdf.py deleted file mode 100755 index e744aad1777ac5a66e173315831d20abba1ceea5..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/dataset/wdf.py +++ /dev/null @@ -1,306 +0,0 @@ -from .base import * -from glob import glob - - -class WDF(DeepFakeDataset): - TYPE_DIRS = { - 'REAL': 'real/', - 'FAKE': 'fake/' - } - - def __init__(self, *args, **kargs): - super().__init__(*args, **kargs) - self._build_video_table() - self._build_video_list() - - @classmethod - def prepare_data(cls, data_dir, vid_ext): - progress_bar = tqdm(list(cls.TYPE_DIRS.keys())) - for df_type in progress_bar: - # description for progress bar - progress_bar.set_description(f"{df_type}/videos") - - # compose the path for metadata cache - meta_cache_path = path.expanduser(cls.get_cache_dir(df_type)) - - # next entity if cache exists - if path.exists(meta_cache_path): - continue - - # video directory for df_type - video_dir = path.join(data_dir, cls.TYPE_DIRS[df_type], 'videos') - - # fetch video metadatas - video_metas = cls.build_metadata(data_dir, video_dir, vid_ext) - - # cache the metadata - makedirs(path.dirname(meta_cache_path), exist_ok=True) - with open(meta_cache_path, 'wb') as f: - pickle.dump(video_metas, f) - - def _build_video_table(self): - self.video_table = {} - for df_type in self.TYPE_DIRS: - # compose cache directory path - meta_cache_path = path.expanduser(self.get_cache_dir(df_type)) - - # load metadatas - with open(meta_cache_path, 'rb') as f: - video_metas = pickle.load(f) - - # post process the video path - for idx in video_metas: - video_metas[idx]["path"] = path.join(self.data_dir, video_metas[idx]["path"]) + self.vid_ext - - # store in video table. - self.video_table[df_type] = video_metas - - def _build_video_list(self): - self.video_list = [] - - for df_type in self.TYPE_DIRS: - - _videos = [] - - for file_path in glob(path.join(self.data_dir, self.TYPE_DIRS[df_type], "videos", f"*{self.vid_ext}")): - name, ext = path.splitext(path.basename(file_path)) - if name in self.video_table[df_type]: - clips = int(self.video_table[df_type][name]["duration"] // self.clip_duration) - if (clips > 0): - clips = min(clips, self.max_clips) - _videos.append((df_type.upper(), name, clips)) - else: - name = f"{df_type.upper()}/{name}" - logging.warning( - f'Video {path.join(self.data_dir, self.TYPE_DIRS[df_type], "videos", name)} does not present in the processed dataset.' - ) - self.stray_videos[name] = (0 if df_type == "REAL" else 1) - - self.video_list += _videos[:int(len(_videos) * self.ratio)] - - # permanant shuffle - random.Random(1019).shuffle(self.video_list) - - # stacking up the amount of data clips for further usage - self.stack_video_clips = [0] - for _, _, i in self.video_list: - self.stack_video_clips.append(self.stack_video_clips[-1] + i) - self.stack_video_clips.pop(0) - - def __len__(self): - if (self.pack): - return len(self.video_list) - else: - return self.stack_video_clips[-1] - - def __getitem__(self, idx): - item_entities = self.get_item(idx) - return [[entity[k] for entity in item_entities] for k in item_entities[0].keys()] - - def get_item(self, idx, with_entity_info=False): - item_entities = [ - self.get_entity( - idx, - with_entity_info=with_entity_info - ) - ] - return item_entities - - def get_entity(self, idx, with_entity_info=False): - video_idx, df_type, video_name, num_clips = self.video_info(idx) - video_meta = self.video_table[df_type][video_name] - logging.debug(f"Entity/Video Index:{idx}/{video_idx}") - logging.debug(f"Entity DF:{df_type}") - - # - video path - vid_path = video_meta["path"] - # - create video reader - vid_reader = VideoReader(vid_path, "video") - # - frames per second - video_sample_freq = vid_reader.get_metadata()["video"]["fps"][0] - - entity_clips = [] - entity_masks = [] - - # desire all clips in the video under pack mode, else fetch only the clip of index. - if (self.pack): - clips_desire = range(num_clips) - else: - clips_desire = [idx - (0 if video_idx == 0 else self.stack_video_clips[video_idx - 1])] - - for clip_of_video in clips_desire: - # video frame processing - frames = [] - - # derive the video offset - video_offset_duration = clip_of_video * self.clip_duration - - # the amount of frames to skip - video_sample_offset = int(video_offset_duration) - - # the amount of frames for the duration of a clip - video_clip_samples = int(video_sample_freq * self.clip_duration) - - # the amount of frames to skip in order to meet the num_frames per clip.(excluding the head & tail frames ) - if (self.num_frames == 1): - video_sample_stride = 0 - else: - video_sample_stride = ( - (video_clip_samples - 1) / (self.num_frames - 1) - ) / video_sample_freq - - logging.debug(f"Loading Video: {vid_path}") - logging.debug(f"Sample Offset: {video_sample_offset}") - logging.debug(f"Sample Stride: {video_sample_stride}") - - # fetch frames of clip duration - for sample_idx in range(self.num_frames): - vid_reader.seek(video_sample_offset + sample_idx * video_sample_stride) - frame = next(vid_reader) - frames.append(frame["data"]) - - # stack list of torch frames to tensor - frames = torch.stack(frames) - - # transformation - frames = self.transform(frames) - - # padding and masking missing frames. - mask = torch.tensor( - [1.] * len(frames) + - [0.] * (self.num_frames - len(frames)), - dtype=torch.bool - ) - if frames.shape[0] < self.num_frames: - diff = self.num_frames - len(frames) - padding = torch.zeros( - (diff, *frames.shape[1:]), - dtype=frames.dtype - ) - frames = torch.concatenate( - frames, - padding - ) - - entity_clips.append(frames) - entity_masks.append(mask) - logging.debug( - "Video Clip: {}({}s~{}s), Completed!".format( - vid_path, - self.clip_duration * clip_of_video, - (self.clip_duration + 1) * clip_of_video - ) - ) - - del vid_reader - - entity_clips = torch.stack(entity_clips) - entity_masks = torch.stack(entity_masks) - - entity_info = { - "video_name": video_name, - "df_type": df_type, - "vid_path": vid_path - } - entity_data = { - "clips": entity_clips, - "label": 0 if (df_type == "REAL") else 1, - "masks": entity_masks, - "idx": idx - } - - if with_entity_info: - return {**entity_data, **entity_info} - else: - return entity_data - - def video_info(self, idx): - if (self.pack): - video_idx = idx - else: - video_idx = next(i for i, x in enumerate(self.stack_video_clips) if idx < x) - return video_idx, *self.video_list[video_idx] - - def video_repr(self, idx): - return '/'.join([str(i) for i in self.video_info(idx)[1:-1]]) - - def video_meta(self, idx): - df_type, name = self.video_info(idx)[1:3] - return self.video_table[df_type][name] - - -class WDFDataModule(DeepFakeDataModule): - def __init__( - self, - *args, - **kargs - ): - super().__init__(*args, **kargs) - - def prepare_data(self): - WDF.prepare_data(self.data_dir, self.vid_ext) - - def setup(self, stage: str): - # Assign train/val datasets for use in dataloaders - data_cls = partial( - WDF, - data_dir=self.data_dir, - vid_ext=self.vid_ext, - num_frames=self.num_frames, - clip_duration=self.clip_duration, - transform=self.transform, - ratio=self.ratio, - split="test", - pack=self.pack - ) - - if (stage == "fit" or stage == "valid"): - self._val_dataset = data_cls( - max_clips=self.max_clips - ) - elif (stage == "test"): - self._test_dataset = data_cls() - - -if __name__ == "__main__": - from src.utility.visualize import dataset_entity_visualize - - class Dummy(): - pass - - dtm = WDFDataModule( - data_dir="datasets/wdf/", - vid_ext=".avi", - batch_size=1, - num_workers=0, - num_frames=10, - clip_duration=1, - ratio=0.5, - pack=True - ) - - model = Dummy() - model.transform = lambda x: x - dtm.prepare_data() - dtm.affine_model(model) - dtm.setup("fit") - dtm.setup("validate") - dtm.setup("test") - - # iterate the whole dataset for visualization and sanity check - iterable = dtm._test_dataset - save_folder = f"./misc/extern/dump_dataset/wdf/test/" - # entity dump - for entity_idx in tqdm(range(len(iterable))): - if (entity_idx > 100): - break - dataset_entity_visualize(iterable.get_entity(entity_idx, with_entity_info=True), base_dir=save_folder) - - # # single dump - # dataset_entity_visualize(iterable.get_entity(167, with_entity_info=True), base_dir=save_folder) - - # iterate the all dataloaders for debugging. - for fn in [dtm.val_dataloader, dtm.test_dataloader]: - iterable = fn() - for batch in tqdm(iterable): - pass diff --git a/video/dfd-fcg/model_code/src/example.py b/video/dfd-fcg/model_code/src/example.py deleted file mode 100755 index f23ccd86b11895777347e4573f4c2a240496c04b..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/example.py +++ /dev/null @@ -1,108 +0,0 @@ - -import lightning.pytorch as pl - -from torch import optim, nn -from functools import partial -from torchvision.datasets import MNIST -from torch.utils.data import random_split, DataLoader - -from model.clip.lprobe import LinearProbe - - -# define the LightningModule -class EasyCLIPClassifier(pl.LightningModule): - def __init__(self, output_dim=10): - super().__init__() - self.save_hyperparameters() - self.model = LinearProbe(output_dim=output_dim) - - @property - def transform(self): - return self.model.transform - - @property - def n_px(self): - return self.model.model.visual.input_resolution - - def training_step(self, batch, batch_idx): - # training_step defines the train loop. - # it is independent of forward - x, y = batch - x = self.model(x) - loss = nn.functional.cross_entropy(x, y) - self.log( - "train/loss", - loss, - batch_size=x.shape[0] - ) - return loss - - def test_step(self, batch, batch_idx, dataloader_idx=0): - # this is the test loop - x, y = batch - x = self.model(x) - loss = nn.functional.cross_entropy(x, y) - self.log( - f"test/loss", - loss, - batch_size=x.shape[0] - ) - return loss - - def validation_step(self, batch, batch_idx, dataloader_idx=0): - # this is the validation loop - x, y = batch - x = self.model(x) - loss = nn.functional.cross_entropy(x, y) - self.log( - f"valid/loss", - loss, - batch_size=x.shape[0] - ) - return loss - - def configure_optimizers(self): - optimizer = optim.AdamW(self.parameters(), lr=1e-3) - return optimizer - - -class MNISTDataModule(pl.LightningDataModule): - def __init__(self, data_dir: str = "./datasets/", batch_size: int = 64, num_workers: int = 8): - super().__init__() - self.data_dir = data_dir - self.transform = None - self.batch_size = batch_size - self.num_workers = num_workers - - def affine_model(self, model): - self.transform = model.transform - - def prepare_data(self): - # download - MNIST(self.data_dir, train=True, download=True) - MNIST(self.data_dir, train=False, download=True) - - def setup(self, stage: str): - # Assign train/val datasets for use in dataloaders - if stage == "fit": - mnist_full = MNIST(self.data_dir, train=True, transform=self.transform) - self.mnist_train, self.mnist_val = random_split(mnist_full, [55000, 5000]) - - # Assign test dataset for use in dataloader(s) - if stage == "test": - self.mnist_test = MNIST(self.data_dir, train=False, transform=self.transform) - - if stage == "predict": - self.mnist_predict = MNIST(self.data_dir, train=False, transform=self.transform) - - def train_dataloader(self): - return DataLoader(self.mnist_train, batch_size=self.batch_size, num_workers=self.num_workers) - - def val_dataloader(self): - return DataLoader(self.mnist_val, batch_size=self.batch_size, num_workers=self.num_workers) - - def test_dataloader(self): - return DataLoader(self.mnist_test, batch_size=self.batch_size, num_workers=self.num_workers) - - def predict_dataloader(self): - return DataLoader(self.mnist_predict, batch_size=self.batch_size, num_workers=self.num_workers) diff --git a/video/dfd-fcg/model_code/src/model/base.py b/video/dfd-fcg/model_code/src/model/base.py deleted file mode 100755 index 1edf92ad4c5c2a0e0a80b13d8e2a607cc0d34557..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/model/base.py +++ /dev/null @@ -1,192 +0,0 @@ -import torch -import torch.nn as nn -import lightning.pytorch as pl - -from torch import optim -from functools import partial -from torchmetrics import Metric -from torchmetrics.aggregation import MeanMetric -from torchmetrics.classification import AUROC, Accuracy, BinaryConfusionMatrix, AveragePrecision - - -class GenericStatistics(Metric): - def __init__(self): - super().__init__() - self.add_state("values", default=torch.tensor([]), dist_reduce_fx="sum") - - def update(self, values: torch.Tensor): - assert len(values.shape) == 1 - - self.values = torch.cat([self.values, values]) - - def compute(self): - return torch.stack( - [ - torch.mean(self.values), - torch.std(self.values) - ] - ) - - -class ODClassifier(pl.LightningModule): - def __init__(self): - super().__init__() - params = dict(add_dataloader_idx=False, rank_zero_only=True) - self.log = partial(self.log, **params) - self.log_dict = partial(self.log_dict, **params) - self.model = None - - def forward(self, *args, **kargs): - return self.model(*args, **kargs) - - @property - def transform(self): - raise NotImplementedError() - - @property - def n_px(self): - raise NotImplementedError() - - def training_step(self, batch, batch_idx): - results = [self.shared_step(batch[dts_name], 'train') for dts_name in batch] - return sum([_results['loss'] for _results in results]) - - def test_step(self, batch, batch_idx, dataloader_idx=0): - result = self.shared_step(batch, 'test') - return result['loss'] - - def validation_step(self, batch, batch_idx, dataloader_idx=0): - result = self.shared_step(batch, 'valid') - return result['loss'] - - def shared_step(self, batch, stage): - x, y, z = batch["xyz"] - indices = batch["indices"] - dts_name = batch["dts_name"] - logits = self(x, **z) - loss = nn.functional.cross_entropy(logits, y) - self.log( - f"{stage}/{dts_name}/loss", - loss, - batch_size=x.shape[0] - ) - return { - "logits": logits, - "labels": y, - "loss": loss, - "dts_name": dts_name, - "indices": indices - } - - def evaluate(self, x, **kargs): - return self.model(x, **kargs) - - def on_validation_model_train(self): - self.model.train() - - -class ODBinaryMetricClassifier(ODClassifier): - def __init__(self): - super().__init__() - self.dts_metrics = {} - self.metric_map = { - "auc": partial(AUROC, task="BINARY", num_classes=2), - "acc": partial(Accuracy, task="BINARY", num_classes=2), - "cm": partial(BinaryConfusionMatrix, normalize="true"), - "ap": partial(AveragePrecision, task="BINARY", num_classes=2), - "loss": MeanMetric, - # "stats/real": GenericStatistics, - # "stats/fake": GenericStatistics - } - - def get_metric(self, dts_name, metric_name, device): - if (not dts_name in self.dts_metrics): - self.dts_metrics[dts_name] = {} - if (not metric_name in self.dts_metrics[dts_name]): - self.dts_metrics[dts_name][metric_name] = self.metric_map[metric_name]().to(device) - return self.dts_metrics[dts_name][metric_name] - - def reset_metrics(self): - for dts_name, metrics in self.dts_metrics.items(): - for metric_name, metric_obj in metrics.items(): - metric_obj.reset() - self.dts_metrics.clear() - - # shared procedures - def shared_metric_update_procedure(self, result): - # save metrics - logits = result['logits'].detach().softmax(dim=-1) - labels = result['labels'].detach() - loss = result["loss"].detach() - self.get_metric(result['dts_name'], 'auc', logits.device).update(logits[:, 1], labels) - self.get_metric(result['dts_name'], 'acc', logits.device).update(logits[:, 1], labels) - self.get_metric(result['dts_name'], 'ap', logits.device).update(logits[:, 1], labels) - self.get_metric(result['dts_name'], 'cm', logits.device).update(logits[:, 1], labels) - self.get_metric(result['dts_name'], 'loss', logits.device).update(loss) - labels = labels.to(dtype=bool) - # self.get_metric(result['dts_name'], 'stats/real', logits.device).update(logits[~labels, 0]) - # self.get_metric(result['dts_name'], 'stats/fake', logits.device).update(logits[labels, 1]) - - def shared_beg_epoch_procedure(self, phase): - self.reset_metrics() - - def shared_end_epoch_procedure(self, phase): - log_datas = {} - for dts_name, metrics in self.dts_metrics.items(): - for metric_name, metric_obj in metrics.items(): - values = metric_obj.compute().flatten() - name = f'{phase}/{dts_name}/{metric_name}' - if (len(values) == 1): - log_datas[name] = values - else: - for i, v in enumerate(values): - log_datas[f"{name}/#{i}"] = v - self.log_dict(log_datas) - self.reset_metrics() - - # validation - def on_validation_epoch_start(self) -> None: - self.shared_beg_epoch_procedure('valid') - - def validation_step(self, batch, batch_idx, dataloader_idx=0): - result = self.shared_step(batch, 'valid') - self.shared_metric_update_procedure(result) - return result['loss'] - - def on_validation_epoch_end(self) -> None: - self.shared_end_epoch_procedure('valid') - - # test - def on_test_epoch_start(self) -> None: - self.shared_beg_epoch_procedure('test') - - def test_step(self, batch, batch_idx, dataloader_idx=0): - result = self.shared_step(batch, 'test') - self.shared_metric_update_procedure(result) - return result['loss'] - - def on_test_epoch_end(self) -> None: - self.shared_end_epoch_procedure('test') - - # predict - def predict_step(self, batch, batch_idx, dataloader_idx=0): - x, y, z = batch["xyz"] - dts_name = batch['dts_name'] - names = batch["names"] - z = { - _k: z[_k] - for _k in z - } - y = y.tolist() - results = self.evaluate( - x, - **z - ) - probs = results["logits"].softmax(dim=-1)[:, 1].flatten().cpu() - - return dict( - y=y, - probs=probs, - names=names, - dts_name=dts_name - ) diff --git a/video/dfd-fcg/model_code/src/model/clip/__init__.py b/video/dfd-fcg/model_code/src/model/clip/__init__.py deleted file mode 100644 index e9a832b2e768e86127b84f52833e7817889063e3..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/model/clip/__init__.py +++ /dev/null @@ -1,132 +0,0 @@ -import torch -import random -import logging -import open_clip -import torch.nn as nn -import src.clip.clip as CLIP - - -def load_model(architecture, **kargs): - # architecture parameter split - # e.g: ViT-B/16|laion2b_s34b_b79k - params = architecture.split('|') - - clip_arch = params[0] - if (len(params) == 1): - model, transform = CLIP.load( - clip_arch, - "cpu", - **kargs - ) - - elif (len(params) == 2): - open_pretrain = params[1] - - _model, _, _ = open_clip.create_model_and_transforms( - clip_arch.replace("/", "-"), - pretrained=open_pretrain, - device="cpu" - ) - - model, transform = CLIP.load( - _model.state_dict(), - "cpu", - **kargs - ) - del _model - - elif (len(params) > 2): - raise NotImplementedError() - - return model, transform - - -class VideoAttrExtractor(nn.Module): - def __init__( - self, - architecture, - text_embed, - store_attrs=[], - attn_record=False, - pretrain=None - ): - super().__init__() - self.model, self.transform = load_model( - architecture, - store_attrs=store_attrs, - attn_record=attn_record - ) - self.model = self.model.visual.float() - - if (pretrain): - logging.info("Loading image encoder pretrain weights...") - state_dict = torch.load(pretrain, "cpu") - try: - self.model.load_state_dict(state_dict, strict=True) - except: - conflicts = self.model.load_state_dict(state_dict, strict=False) - logging.warning( - f"during visual pretrain weights loading, disabling strict mode with conflicts:\n{conflicts}" - ) - - self.model.requires_grad_(False) - - if not text_embed: - self.model.proj = None - self.feat_dim = self.model.transformer.width - else: - self.feat_dim = self.model.output_dim - - @property - def n_px(self): - return self.model.input_resolution - - @property - def n_layers(self): - return self.model.transformer.layers - - @property - def n_heads(self): - return self.model.transformer.heads - - @property - def patch_size(self): - return self.model.patch_size - - @property - def patch_num(self): - return self.model.patch_num - - @property - def n_patch(self): - return int(self.n_px // self.patch_size) - - @property - def embed_dim(self): - return self.feat_dim - - def forward(self, x): - b, t = x.shape[:2] - - # pass throught for attributes - embeds = self.model(x) - # retrieve all layer attributes - layer_attrs = [] - for blk in self.model.transformer.resblocks: - attrs = blk.pop_attr() - layer_attrs.append(attrs) - return dict( - layer_attrs=layer_attrs, - embeds=embeds - ) - - def train(self, mode=True): - self.model.eval() - return self - - -if __name__ == "__main__": - VideoAttrExtractor( - "ViT-L/14|laion2b_s32b_b82k", - text_embed=False - ) diff --git a/video/dfd-fcg/model_code/src/model/clip/evl.py b/video/dfd-fcg/model_code/src/model/clip/evl.py deleted file mode 100755 index 25b6e73214fa3c89c48c1b54dae908a6247bce52..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/model/clip/evl.py +++ /dev/null @@ -1,684 +0,0 @@ -import torch -from torch import nn - -from collections import OrderedDict -import numpy as np -from typing import Tuple, List, Dict - -import torch -import torch.nn as nn -import torch.nn.functional as F - -### -from src.model.base import ODBinaryMetricClassifier -from src.model.clip import VideoAttrExtractor -from src.utility.loss import focal_loss - -''' -QuickGELU and LayerNorm w/ fp16 from official CLIP repo -(https://github.com/openai/CLIP/blob/3b473b0e682c091a9e53623eebc1ca1657385717/clip/model.py) -''' - - -class QuickGELU(nn.Module): - def forward(self, x: torch.Tensor): - return x * torch.sigmoid(1.702 * x) - - -class LayerNorm(nn.LayerNorm): - """Subclass torch's LayerNorm to handle fp16.""" - - def forward(self, x: torch.Tensor): - orig_type = x.dtype - ret = super().forward(x.type(torch.float32)) - return ret.type(orig_type) - - -class Attention(nn.Module): - ''' - A generalized attention module with more flexibility. - ''' - - def __init__( - self, q_in_dim: int, k_in_dim: int, v_in_dim: int, - qk_proj_dim: int, v_proj_dim: int, num_heads: int, out_dim: int, - return_all_features: bool = False, - ): - super().__init__() - - self.q_proj = nn.Linear(q_in_dim, qk_proj_dim) - self.k_proj = nn.Linear(k_in_dim, qk_proj_dim) - self.v_proj = nn.Linear(v_in_dim, v_proj_dim) - self.out_proj = nn.Linear(v_proj_dim, out_dim) - - self.num_heads = num_heads - self.return_all_features = return_all_features - assert qk_proj_dim % num_heads == 0 and v_proj_dim % num_heads == 0 - - self._initialize_weights() - - def _initialize_weights(self): - for m in (self.q_proj, self.k_proj, self.v_proj, self.out_proj): - nn.init.xavier_uniform_(m.weight) - nn.init.constant_(m.bias, 0.) - - def forward(self, q: torch.Tensor, k: torch.Tensor, v: torch.Tensor): - assert q.ndim == 3 and k.ndim == 3 and v.ndim == 3 - N = q.size(0) - assert k.size(0) == N and v.size(0) == N - Lq, Lkv = q.size(1), k.size(1) - assert v.size(1) == Lkv - - q, k, v = self.q_proj(q), self.k_proj(k), self.v_proj(v) - - H = self.num_heads - Cqk, Cv = q.size(-1) // H, v.size(-1) // H - - q = q.view(N, Lq, H, Cqk) - k = k.view(N, Lkv, H, Cqk) - v = v.view(N, Lkv, H, Cv) - - aff = torch.einsum('nqhc,nkhc->nqkh', q / (Cqk ** 0.5), k) - aff = aff.softmax(dim=-2) - mix = torch.einsum('nqlh,nlhc->nqhc', aff, v) - - out = self.out_proj(mix.flatten(-2)) - - if self.return_all_features: - return dict(q=q, k=k, v=v, aff=aff, out=out) - else: - return out - - -class PatchEmbed2D(nn.Module): - - def __init__( - self, - patch_size: Tuple[int, int] = (16, 16), - in_channels: int = 3, - embed_dim: int = 768, - ): - super().__init__() - - self.patch_size = patch_size - self.in_channels = in_channels - - self.proj = nn.Linear(np.prod(patch_size) * in_channels, embed_dim) - - def _initialize_weights(self, x): - nn.init.kaiming_normal_(self.proj.weight, 0.) - nn.init.constant_(self.proj.bias, 0.) - - def forward(self, x: torch.Tensor): - B, C, H, W = x.size() - pH, pW = self.patch_size - - assert C == self.in_channels and H % pH == 0 and W % pW == 0 - - x = x.view(B, C, H // pH, pH, W // pW, pW).permute(0, 2, 4, 1, 3, 5).flatten(3).flatten(1, 2) - x = self.proj(x) - - return x - - -class TransformerEncoderLayer(nn.Module): - - def __init__( - self, - in_feature_dim: int = 768, - qkv_dim: int = 768, - num_heads: int = 12, - mlp_factor: float = 4.0, - mlp_dropout: float = 0.0, - act: nn.Module = QuickGELU, - return_all_features: bool = False, - ): - super().__init__() - - self.return_all_features = return_all_features - - self.attn = Attention( - q_in_dim=in_feature_dim, k_in_dim=in_feature_dim, v_in_dim=in_feature_dim, - qk_proj_dim=qkv_dim, v_proj_dim=qkv_dim, num_heads=num_heads, out_dim=in_feature_dim, - return_all_features=return_all_features, - ) - - mlp_dim = round(mlp_factor * in_feature_dim) - self.mlp = nn.Sequential(OrderedDict([ - ('fc1', nn.Linear(in_feature_dim, mlp_dim)), - ('act', act()), - ('dropout', nn.Dropout(mlp_dropout)), - ('fc2', nn.Linear(mlp_dim, in_feature_dim)), - ])) - - self.norm1 = LayerNorm(in_feature_dim) - self.norm2 = LayerNorm(in_feature_dim) - - self._initialize_weights() - - def _initialize_weights(self): - for m in (self.mlp[0], self.mlp[-1]): - nn.init.xavier_uniform_(m.weight) - nn.init.normal_(m.bias, std=1e-6) - - def forward(self, x: torch.Tensor): - if self.return_all_features: - ret_dict = {} - - x_norm = self.norm1(x) - attn_out = self.attn(x_norm, x_norm, x_norm) - ret_dict['q'] = attn_out['q'] - ret_dict['k'] = attn_out['k'] - ret_dict['v'] = attn_out['v'] - ret_dict['attn_out'] = attn_out['out'] - x = x + attn_out['out'] - - x = x + self.mlp(self.norm2(x)) - ret_dict['out'] = x - - return ret_dict - - else: - x_norm = self.norm1(x) - x = x + self.attn(x_norm, x_norm, x_norm) - x = x + self.mlp(self.norm2(x)) - - return x - - -class TransformerDecoderLayer(nn.Module): - - def __init__( - self, - in_feature_dim: int = 768, - qkv_dim: int = 768, - num_heads: int = 12, - mlp_factor: float = 4.0, - mlp_dropout: float = 0.0, - act: nn.Module = QuickGELU, - ): - super().__init__() - - self.attn = Attention( - q_in_dim=in_feature_dim, k_in_dim=in_feature_dim, v_in_dim=in_feature_dim, - qk_proj_dim=qkv_dim, v_proj_dim=qkv_dim, num_heads=num_heads, out_dim=in_feature_dim, - ) - - mlp_dim = round(mlp_factor * in_feature_dim) - self.mlp = nn.Sequential(OrderedDict([ - ('fc1', nn.Linear(in_feature_dim, mlp_dim)), - ('act', act()), - ('dropout', nn.Dropout(mlp_dropout)), - ('fc2', nn.Linear(mlp_dim, in_feature_dim)), - ])) - - self.norm1 = LayerNorm(in_feature_dim) - self.norm2 = LayerNorm(in_feature_dim) - self.norm3 = LayerNorm(in_feature_dim) - - self._initialize_weights() - - def _initialize_weights(self): - for m in (self.mlp[0], self.mlp[-1]): - nn.init.xavier_uniform_(m.weight) - nn.init.normal_(m.bias, std=1e-6) - - def forward(self, x: torch.Tensor, y: torch.Tensor): - y_norm = self.norm3(y) - x = x + self.attn(self.norm1(x), y_norm, y_norm) - x = x + self.mlp(self.norm2(x)) - - return x - - -class VisionTransformer2D(nn.Module): - - def __init__( - self, - feature_dim: int = 768, - input_size: Tuple[int, int] = (224, 224), - patch_size: Tuple[int, int] = (16, 16), - num_heads: int = 12, - num_layers: int = 12, - mlp_factor: float = 4.0, - act: nn.Module = QuickGELU, - return_all_features: bool = False, - ln_pre: bool = False, - ): - super().__init__() - - self.return_all_features = return_all_features - - self.patch_embed = PatchEmbed2D(patch_size=patch_size, embed_dim=feature_dim) - self.num_patches = np.prod([x // y for x, y in zip(input_size, patch_size)]) + 1 - - self.cls_token = nn.Parameter(torch.zeros([feature_dim])) - self.pos_embed = nn.Parameter(torch.zeros([self.num_patches, feature_dim])) - - self.blocks = nn.ModuleList([ - TransformerEncoderLayer( - in_feature_dim=feature_dim, qkv_dim=feature_dim, num_heads=num_heads, mlp_factor=mlp_factor, act=act, - return_all_features=return_all_features, - ) for _ in range(num_layers) - ]) - - if ln_pre: - self.ln_pre = LayerNorm(feature_dim) - else: - self.ln_pre = nn.Identity() - - self._initialize_weights() - - def _initialize_weights(self): - nn.init.normal_(self.cls_token, std=0.02) - nn.init.normal_(self.pos_embed, std=0.02) - - def forward(self, x: torch.Tensor): - dtype = self.patch_embed.proj.weight.dtype - x = x.to(dtype) - - x = self.patch_embed(x) - x = torch.cat([self.cls_token.view(1, 1, -1).repeat(x.size(0), 1, 1), x], dim=1) - x = x + self.pos_embed - - x = self.ln_pre(x) - - if self.return_all_features: - all_features = [] - for blk in self.blocks: - x = blk(x) - all_features.append(x) - x = x['out'] - return all_features - - else: - for blk in self.blocks: - x = blk(x) - return x - - -vit_presets = { - 'ViT-B/16-lnpre': dict( - feature_dim=768, - input_size=(224, 224), - patch_size=(16, 16), - num_heads=12, - num_layers=12, - mlp_factor=4.0, - ln_pre=True, - ), - 'ViT-L/14-lnpre': dict( - feature_dim=1024, - input_size=(224, 224), - patch_size=(14, 14), - num_heads=16, - num_layers=24, - mlp_factor=4.0, - ln_pre=True, - ), -} - - -class TransformerDecoderLayer(nn.Module): - - def __init__( - self, - in_feature_dim: int = 768, - qkv_dim: int = 768, - num_heads: int = 12, - mlp_factor: float = 4.0, - mlp_dropout: float = 0.0, - act: nn.Module = QuickGELU, - ): - super().__init__() - - self.attn = Attention( - q_in_dim=in_feature_dim, k_in_dim=in_feature_dim, v_in_dim=in_feature_dim, - qk_proj_dim=qkv_dim, v_proj_dim=qkv_dim, num_heads=num_heads, out_dim=in_feature_dim, - ) - - mlp_dim = round(mlp_factor * in_feature_dim) - self.mlp = nn.Sequential(OrderedDict([ - ('fc1', nn.Linear(in_feature_dim, mlp_dim)), - ('act', act()), - ('dropout', nn.Dropout(mlp_dropout)), - ('fc2', nn.Linear(mlp_dim, in_feature_dim)), - ])) - - self.norm1 = LayerNorm(in_feature_dim) - self.norm2 = LayerNorm(in_feature_dim) - self.norm3 = LayerNorm(in_feature_dim) - - self._initialize_weights() - - def _initialize_weights(self): - for m in (self.mlp[0], self.mlp[-1]): - nn.init.xavier_uniform_(m.weight) - nn.init.normal_(m.bias, std=1e-6) - - def forward(self, x: torch.Tensor, y: torch.Tensor): - y_norm = self.norm3(y) - x = x + self.attn(self.norm1(x), y_norm, y_norm) - x = x + self.mlp(self.norm2(x)) - - return x - - -class TemporalCrossAttention(nn.Module): - - def __init__( - self, - spatial_size: Tuple[int, int] = (14, 14), - feature_dim: int = 768, - ): - super().__init__() - - self.spatial_size = spatial_size - - w_size = np.prod([x * 2 - 1 for x in spatial_size]) - self.w1 = nn.Parameter(torch.zeros([w_size, feature_dim])) - self.w2 = nn.Parameter(torch.zeros([w_size, feature_dim])) - - idx_tensor = torch.zeros([np.prod(spatial_size) for _ in (0, 1)], dtype=torch.long) - for q in range(np.prod(spatial_size)): - qi, qj = q // spatial_size[1], q % spatial_size[1] - for k in range(np.prod(spatial_size)): - ki, kj = k // spatial_size[1], k % spatial_size[1] - i_offs = qi - ki + spatial_size[0] - 1 - j_offs = qj - kj + spatial_size[1] - 1 - idx_tensor[q, k] = i_offs * (spatial_size[1] * 2 - 1) + j_offs - self.idx_tensor = idx_tensor - - def forward_half(self, q: torch.Tensor, k: torch.Tensor, w: torch.Tensor) -> torch.Tensor: - q, k = q[:, :, 1:], k[:, :, 1:] # remove cls token - - assert q.size() == k.size() - assert q.size(2) == np.prod(self.spatial_size) - - attn = torch.einsum('ntqhd,ntkhd->ntqkh', q / (q.size(-1) ** 0.5), k) - attn = attn.softmax(dim=-2).mean(dim=-1) # L, L, N, T - - self.idx_tensor = self.idx_tensor.to(w.device) - w_unroll = w[self.idx_tensor] # L, L, C - ret = torch.einsum('ntqk,qkc->ntqc', attn, w_unroll) - - return ret - - def forward(self, q: torch.Tensor, k: torch.Tensor): - N, T, L, H, D = q.size() - assert L == np.prod(self.spatial_size) + 1 - - ret = torch.zeros([N, T, L, self.w1.size(-1)], device='cuda') - ret[:, 1:, 1:, :] += self.forward_half(q[:, 1:, :, :, :], k[:, :-1, :, :, :], self.w1) - ret[:, :-1, 1:, :] += self.forward_half(q[:, :-1, :, :, :], k[:, 1:, :, :, :], self.w2) - - return ret - - -class EVLDecoder(nn.Module): - - def __init__( - self, - num_frames: int = 8, - spatial_size: Tuple[int, int] = (14, 14), - num_layers: int = 4, - in_feature_dim: int = 768, - qkv_dim: int = 768, - num_heads: int = 12, - mlp_factor: float = 4.0, - enable_temporal_conv: bool = True, - enable_temporal_pos_embed: bool = True, - enable_temporal_cross_attention: bool = True, - mlp_dropout: float = 0.5, - ): - super().__init__() - - self.enable_temporal_conv = enable_temporal_conv - self.enable_temporal_pos_embed = enable_temporal_pos_embed - self.enable_temporal_cross_attention = enable_temporal_cross_attention - self.num_layers = num_layers - - self.decoder_layers = nn.ModuleList( - [TransformerDecoderLayer(in_feature_dim, qkv_dim, num_heads, mlp_factor, mlp_dropout) - for _ in range(num_layers)] - ) - - if enable_temporal_conv: - self.temporal_conv = nn.ModuleList( - [nn.Conv1d(in_feature_dim, in_feature_dim, kernel_size=3, stride=1, - padding=1, groups=in_feature_dim) for _ in range(num_layers)] - ) - if enable_temporal_pos_embed: - self.temporal_pos_embed = nn.ParameterList( - [nn.Parameter(torch.zeros([num_frames, in_feature_dim])) for _ in range(num_layers)] - ) - if enable_temporal_cross_attention: - self.cross_attention = nn.ModuleList( - [TemporalCrossAttention(spatial_size, in_feature_dim) for _ in range(num_layers)] - ) - - self.cls_token = nn.Parameter(torch.zeros([in_feature_dim])) - - def _initialize_weights(self): - nn.init.normal_(self.cls_token, std=0.02) - - def forward(self, in_features: List[Dict[str, torch.Tensor]]): - N, T, L, C = in_features[0]['out'].size() - assert len(in_features) == self.num_layers - x = self.cls_token.view(1, 1, -1).repeat(N, 1, 1) - - for i in range(self.num_layers): - frame_features = in_features[i]['out'] - - if self.enable_temporal_conv: - feat = in_features[i]['out'] - feat = feat.permute(0, 2, 3, 1).contiguous().flatten(0, 1) # N * L, C, T - feat = self.temporal_conv[i](feat) - feat = feat.view(N, L, C, T).permute(0, 3, 1, 2).contiguous() # N, T, L, C - frame_features += feat - - if self.enable_temporal_pos_embed: - frame_features += self.temporal_pos_embed[i].view(1, T, 1, C) - - if self.enable_temporal_cross_attention: - frame_features += self.cross_attention[i](in_features[i]['q'], in_features[i]['k']) - - frame_features = frame_features.flatten(1, 2) # N, T * L, C - - x = self.decoder_layers[i](x, frame_features) - - return x.squeeze(1) - - -class EVLVideoAttrExtractor(VideoAttrExtractor): - - def __init__( - self, - architecture, - num_frames=1, - decoder_layers=4, - attn_record=False - ): - super(EVLVideoAttrExtractor, self).__init__( - architecture=architecture, - text_embed=False, - store_attrs=["q", "k", "out"], - attn_record=attn_record - ) - - self.decoder = EVLDecoder( - num_frames=num_frames, - spatial_size=(self.n_patch, self.n_patch), - num_layers=decoder_layers, - in_feature_dim=self.embed_dim, - qkv_dim=self.embed_dim, - num_heads=self.n_heads, - mlp_factor=4.0, - enable_temporal_conv=True, - enable_temporal_pos_embed=True, - enable_temporal_cross_attention=True, - mlp_dropout=0.5 - ) - self.decoder_layers = decoder_layers - - def forward(self, x): - results = super(EVLVideoAttrExtractor, self).forward(x) - - # remove cls_token attrs - # layer_attrs = results["layer_attrs"] - # for i in range(len(layer_attrs)): - # for k in layer_attrs[i]: - # layer_attrs[i][k] = layer_attrs[i][k][:, :, 1:] - - reps = self.decoder(results["layer_attrs"][-self.decoder_layers:]) - results["reps"] = reps - return results - - def train(self, mode=True): - super().train(mode) - if (mode): - self.model.eval() - return self - - -class BinaryLinearClassifier(nn.Module): - def __init__( - self, - *args, - **kargs, - ): - super().__init__() - self.encoder = EVLVideoAttrExtractor( - *args, - **kargs - ) - self.head = self.make_linear(self.encoder.embed_dim) - - def make_linear(self, embed_dim): - linear = nn.Linear( - embed_dim, - 2 - ) - return nn.Sequential( - nn.LayerNorm(embed_dim), - linear - ) - - @property - def transform(self): - return self.encoder.transform - - @property - def n_px(self): - return self.encoder.model.input_resolution - - def forward(self, x, *args, **kargs): - results = self.encoder(x) - logits = self.head(results["reps"]) - return dict( - logits=logits, - ** results - ) - - -class EfficientVideoLearner(ODBinaryMetricClassifier): - def __init__( - self, - architecture: str = 'ViT-B/16', - num_frames: int = 1, - attn_record: bool = False, - decoder_layers: int = 4, - - is_focal_loss: bool = True, - - cls_weight: float = 10.0, - label_weights: List[float] = [1, 1], - ): - super().__init__() - self.save_hyperparameters() - params = dict( - architecture=architecture, - attn_record=attn_record, - num_frames=num_frames, - decoder_layers=decoder_layers - ) - self.model = BinaryLinearClassifier(**params) - self.label_weights = torch.tensor(label_weights) - self.cls_weight = cls_weight - self.is_focal_loss = is_focal_loss - - @property - def transform(self): - return self.model.transform - - @property - def n_px(self): - return self.model.n_px - - def shared_step(self, batch, stage): - x, y, z = batch["xyz"] - indices = batch["indices"] - dts_name = batch["dts_name"] - names = batch["names"] - - output = self(x, **z) - logits = output["logits"] - loss = 0 - # classification loss - if (stage == "train"): - if self.is_focal_loss: - cls_loss = focal_loss( - logits, - y, - gamma=4, - weight=( - self.label_weights.to(y.device) - if stage == "train" else - None - ) - ) - else: - cls_loss = nn.functional.cross_entropy( - logits, - y, - reduction="none", - weight=( - self.label_weights.to(y.device) - if stage == "train" else - None - ) - ) - loss += cls_loss.mean() * self.cls_weight - self.log( - f"{stage}/{dts_name}/loss", - cls_loss.mean(), - batch_size=logits.shape[0] - ) - else: - # classification loss - cls_loss = nn.functional.cross_entropy( - logits, - y, - reduction="none", - weight=None - ) - loss += cls_loss.mean() - - return { - "logits": logits, - "labels": y, - "loss": loss, - "dts_name": dts_name, - "indices": indices, - "output": output - } - - -if __name__ == "__main__": - frames = 5 - model = EfficientVideoLearner(num_frames=frames, attn_record=True) - model.to("cuda") - logit = model(torch.randn(9, frames, 3, 224, 224).to("cuda"))["logits"] - logit.sum().backward() - print([k for k, v in model.named_parameters() if v.requires_grad]) - print("done") diff --git a/video/dfd-fcg/model_code/src/model/clip/finetune.py b/video/dfd-fcg/model_code/src/model/clip/finetune.py deleted file mode 100755 index 6f4551e0160f848098866f1113c6d15c06dd4d96..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/model/clip/finetune.py +++ /dev/null @@ -1,149 +0,0 @@ -import wandb -import torch -import pickle -import torch.nn as nn - -from typing import List - -from src.model.base import ODBinaryMetricClassifier -from src.model.clip import VideoAttrExtractor -from src.utility.loss import focal_loss - - -class BinaryLinearClassifier(nn.Module): - def __init__( - self, - *args, - **kargs, - ): - super().__init__() - self.encoder = VideoAttrExtractor( - *args, - **kargs - ) - self.encoder.model.requires_grad_(True) - self.projs = self.make_linear(self.encoder.embed_dim) - - def make_linear(self, embed_dim): - linear = nn.Linear( - embed_dim, - 2 - ) - nn.init.normal_(linear.weight, std=0.001) - nn.init.normal_(linear.bias, std=0.001) - return linear - - @property - def transform(self): - return self.encoder.transform - - @property - def n_px(self): - return self.encoder.model.input_resolution - - def forward(self, x, *args, **kargs): - results = self.encoder(x) - embeds = results["embeds"] - logits = self.projs(embeds.mean(1)) - return dict( - logits=logits, - ** results - ) - - -class FullTuneVideoLearner(ODBinaryMetricClassifier): - def __init__( - self, - architecture: str = 'ViT-B/16', - text_embed: bool = False, - attn_record: bool = False, - pretrain: str = None, - label_weights: List[float] = [1, 1], - cls_weight: float = 10.0, - store_attrs: List[str] = [], - ): - super().__init__() - self.save_hyperparameters() - params = dict( - architecture=architecture, - text_embed=text_embed, - attn_record=attn_record, - pretrain=pretrain, - store_attrs=store_attrs, - ) - self.model = BinaryLinearClassifier(**params) - self.label_weights = torch.tensor(label_weights) - self.cls_weight = cls_weight - - @property - def transform(self): - return self.model.transform - - @property - def n_px(self): - return self.model.n_px - - def shared_step(self, batch, stage): - x, y, z = batch["xyz"] - indices = batch["indices"] - dts_name = batch["dts_name"] - names = batch["names"] - - output = self(x, **z) - logits = output["logits"] - loss = 0 - # classification loss - if (stage == "train"): - cls_loss = focal_loss( - logits, - y, - gamma=4, - weight=( - self.label_weights.to(y.device) - if stage == "train" else - None - ) - ) - loss += cls_loss.mean() * self.cls_weight - self.log( - f"{stage}/{dts_name}/loss", - cls_loss.mean(), - batch_size=logits.shape[0] - ) - else: - # classification loss - cls_loss = nn.functional.cross_entropy( - logits, - y, - reduction="none", - weight=( - self.label_weights.to(y.device) - if stage == "train" else - None - ) - ) - loss += cls_loss.mean() - - return { - "logits": logits, - "labels": y, - "loss": loss, - "dts_name": dts_name, - "indices": indices, - "output": output - } - - -if __name__ == "__main__": - frames = 5 - model = BinaryLinearClassifier( - architecture="ViT-L/14", - attn_record=True, - text_embed=False - ) - model.to("cuda") - result = model(torch.randn(5, frames, 3, 224, 224).to("cuda")) - logit = result["logits"] - logit.sum().backward() - print([m for m, v in model.named_parameters() if v.requires_grad]) - print("done") diff --git a/video/dfd-fcg/model_code/src/model/clip/linear.py b/video/dfd-fcg/model_code/src/model/clip/linear.py deleted file mode 100755 index 26142c04eee00573ecae94c0ea1229529734d99f..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/model/clip/linear.py +++ /dev/null @@ -1,149 +0,0 @@ -import wandb -import torch -import pickle -import torch.nn as nn - -from typing import List - -from src.model.base import ODBinaryMetricClassifier -from src.model.clip import VideoAttrExtractor -from src.utility.loss import focal_loss - - -class BinaryLinearClassifier(nn.Module): - def __init__( - self, - *args, - **kargs, - ): - super().__init__() - self.encoder = VideoAttrExtractor( - *args, - **kargs - ) - - self.projs = self.make_linear(self.encoder.embed_dim) - - def make_linear(self, embed_dim): - linear = nn.Linear( - embed_dim, - 2 - ) - nn.init.normal_(linear.weight, std=0.001) - nn.init.normal_(linear.bias, std=0.001) - return linear - - @property - def transform(self): - return self.encoder.transform - - @property - def n_px(self): - return self.encoder.model.input_resolution - - def forward(self, x, *args, **kargs): - results = self.encoder(x) - embeds = results["embeds"] - logits = self.projs(embeds.mean(1)) - return dict( - logits=logits, - ** results - ) - - -class LinearVideoLearner(ODBinaryMetricClassifier): - def __init__( - self, - architecture: str = 'ViT-B/16', - text_embed: bool = False, - attn_record: bool = False, - pretrain: str = None, - label_weights: List[float] = [1, 1], - cls_weight: float = 10.0, - store_attrs: List[str] = [], - ): - super().__init__() - self.save_hyperparameters() - params = dict( - architecture=architecture, - text_embed=text_embed, - attn_record=attn_record, - pretrain=pretrain, - store_attrs=store_attrs, - ) - self.model = BinaryLinearClassifier(**params) - self.label_weights = torch.tensor(label_weights) - self.cls_weight = cls_weight - - @property - def transform(self): - return self.model.transform - - @property - def n_px(self): - return self.model.n_px - - def shared_step(self, batch, stage): - x, y, z = batch["xyz"] - indices = batch["indices"] - dts_name = batch["dts_name"] - names = batch["names"] - - output = self(x, **z) - logits = output["logits"] - loss = 0 - # classification loss - if (stage == "train"): - cls_loss = focal_loss( - logits, - y, - gamma=4, - weight=( - self.label_weights.to(y.device) - if stage == "train" else - None - ) - ) - loss += cls_loss.mean() * self.cls_weight - self.log( - f"{stage}/{dts_name}/loss", - cls_loss.mean(), - batch_size=logits.shape[0] - ) - else: - # classification loss - cls_loss = nn.functional.cross_entropy( - logits, - y, - reduction="none", - weight=( - self.label_weights.to(y.device) - if stage == "train" else - None - ) - ) - loss += cls_loss.mean() - - return { - "logits": logits, - "labels": y, - "loss": loss, - "dts_name": dts_name, - "indices": indices, - "output": output - } - - -if __name__ == "__main__": - frames = 5 - model = BinaryLinearClassifier( - architecture="ViT-L/14", - attn_record=True, - text_embed=False - ) - model.to("cuda") - result = model(torch.randn(9, frames, 3, 224, 224).to("cuda")) - logit = result["logits"] - logit.sum().backward() - print([m for m, v in model.named_parameters() if v.requires_grad]) - print("done") diff --git a/video/dfd-fcg/model_code/src/model/clip/svl.py b/video/dfd-fcg/model_code/src/model/clip/svl.py deleted file mode 100644 index ad4caf8b2f0f3958eeb54413ec48f762eeecb004..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/model/clip/svl.py +++ /dev/null @@ -1,975 +0,0 @@ -import wandb -import torch -import pickle -import random - -import torch.nn as nn -import torch.nn.functional as F - -from operator import or_ -from typing import List -from functools import reduce -from enum import IntFlag, auto - -from src.model.base import ODBinaryMetricClassifier -from src.model.clip import VideoAttrExtractor -from src.utility.loss import focal_loss - - -class OpMode(IntFlag): - S = auto() # spatial - T = auto() # temporal - - -def call_module(module): - def fn(*args, **kwargs): - return module(*args, **kwargs) - return fn - - -def get_module(module): - def fn(): - return module - return fn - - -class SynoBlock(nn.Module): - def __init__( - self, - n_synos, - d_model, - n_head, - n_patch, - n_frames, - ksize_t, - ksize_s, - t_attrs, - s_k_attr, - s_v_attr, - op_mode, - store_attrs=[], - attn_record=False - ): - super().__init__() - - # parameters - self.n_patch = n_patch - self.t_attrs = t_attrs - self.s_k_attr = s_k_attr - self.s_v_attr = s_v_attr - - self.op_mode = op_mode - - if (OpMode.T in op_mode): - # modules - self.t_conv = self.make_2dconv( - ksize_t, - sum([ - 1 if attr in ["out", "emb"] else n_head - for attr in t_attrs - ]), - 1 - ) - - self.t_proj = nn.Sequential( - nn.LayerNorm(n_frames**2), - nn.Linear( - n_frames**2, - n_frames - ), - nn.GELU(), - nn.Linear( - n_frames, - n_frames**2 - ) - ) - - self.p_conv = self.make_2dconv( - ksize_s, - n_frames ** 2, - 1 - ) - - if (OpMode.S in op_mode): - - self.syno_embedding = nn.Parameter( - torch.zeros(n_synos, d_model) - ) - - # attribute storage - self.store_attrs = store_attrs - self.attr = {} - - # attention map recording - self.attn_record = attn_record - self.aff = None - - def make_2dconv(self, ksize, in_c, out_c, groups=1): - conv = nn.Conv2d( - in_channels=in_c, - out_channels=out_c, - kernel_size=ksize, - stride=1, - padding=ksize // 2, - groups=groups, - bias=True - ) - - nn.init.normal_(conv.weight, std=0.001) - nn.init.zeros_(conv.bias) - - return conv - - def pop_attr(self): - ret = self.get_attr() - self.attr.clear() - return ret - - def get_attr(self): - return {k: self.attr[k] for k in self.attr} - - def set_attr(self, **attr): - self.attr = { - k: attr[k] - for k in attr - if k in self.store_attrs - } - - def temporal_detection(self, attrs): - b, t, l, h, d = attrs['q'][:, :, 1:].shape # ignore cls token - p = self.n_patch # p = l ** 0.5 - - affs = [] - for attr in self.t_attrs: - _attr = attrs[attr][:, :, 1:] # ignore cls token - - if (len(_attr.shape) == 4): - _attr = _attr.unsqueeze(-2) - - _attr = _attr.permute(0, 2, 1, 3, 4) - - aff = torch.einsum( - 'nlqhc,nlkhc->nlqkh', - _attr / (_attr.size(-1) ** 0.5), - _attr - ) - - aff = aff.softmax(dim=-2) - - aff = aff.flatten(0, 1) # shape = (n*l,t,t,h) - aff = aff.permute(0, 3, 1, 2) # shape = (n*l,h,t,t) - affs.append(aff) - - aff = torch.cat(affs, dim=1) # shape = (n*l, 3*h, t, t) - - aff = self.t_conv(aff) # shape = (n*l, r, t, t) where r is number of filters - - aff = aff.unflatten(0, (b, p, p)).flatten(3) # shape = (n, p, p, t*t) - aff = aff + self.t_proj(aff) - aff = aff.permute(0, 3, 1, 2) # shape = (n, t*t, p, p) - - aff = self.p_conv(aff) # shape = (n, 1, p, p) - - y = aff.flatten(1) - - return dict(y=y) # shape = (n, p*p) - - def spatial_detection(self, attrs): - b, t, l, h, d = attrs['q'][:, :, 1:].shape # ignore cls token - - _k = attrs[self.s_k_attr][:, :, 1:] # ignore cls token - _v = attrs[self.s_v_attr][:, :, 1:] # ignore cls token - - # prepare query - s_q = self.syno_embedding.unsqueeze(0).repeat(b, 1, 1) # shape = (b, synos, width) - - if (len(_k.shape) == 5): - _k = _k.flatten(-2).contiguous() # match shape - - if (len(_v.shape) == 5): - _v = _v.flatten(-2).contiguous() # match shape - - # =============================== - # Version 1: Original Attention Module (Square Normalized) - # s_aff = torch.einsum( - # 'nqw,ntkw->ntqk', - # s_q / (s_q.size(-1) ** 0.5), - # _k - # ) - - # s_aff = s_aff.softmax(dim=-1) - - # Version 2: Modified Attention Module (Cosine Similarity) - s_aff = torch.einsum( - 'nqw,ntkw->ntqk', - s_q / (s_q.norm(dim=-1, keepdim=True) + 1e-4), - _k / (_k.norm(dim=-1, keepdim=True) + 1e-4) - ) - - s_aff = (s_aff * 100).softmax(dim=-1) - # =============================== - s_mix = torch.einsum( - 'ntql,ntlw->ntqw', - s_aff, - _v - ) - - y = s_mix.flatten(1, 2).mean(dim=1) # shape = (b,w) - - if self.attn_record: - self.aff = s_aff - - return dict(s_q=s_q, y=y) - - def forward(self, attrs): - self.pop_attr() - y_t = 0 - y_s = 0 - if OpMode.T in self.op_mode: - ret_t = self.temporal_detection(attrs) - y_t = ret_t.pop('y') - self.set_attr( - **ret_t - ) - if OpMode.S in self.op_mode: - ret_s = self.spatial_detection(attrs) - y_s = ret_s.pop('y') - self.set_attr( - **ret_s - ) - - return y_t, y_s - - -class SynoDecoder(nn.Module): - def __init__( - self, - encoder, - num_synos, - num_frames, - ksize_s, - ksize_t, - t_attrs, - s_k_attr, - s_v_attr, - op_mode, - store_attrs=[], - attn_record=False - ): - super().__init__() - d_model = encoder.transformer.width - n_head = encoder.transformer.heads - n_patch = int((encoder.patch_num)**0.5) - - self.encoder = get_module(encoder) - - self.decoder_layers = nn.ModuleList([ - SynoBlock( - n_synos=num_synos, - d_model=d_model, - n_head=n_head, - n_patch=n_patch, - n_frames=num_frames, - ksize_t=ksize_t, - ksize_s=ksize_s, - t_attrs=t_attrs, - s_k_attr=s_k_attr, - s_v_attr=s_v_attr, - op_mode=op_mode, - store_attrs=store_attrs, - attn_record=attn_record - ) - for _ in range(encoder.transformer.layers) - ]) - self.op_mode = op_mode - self.feat_t_dim = n_patch**2 - self.feat_s_dim = d_model - - @property - def spatial_dim(self): - return self.feat_s_dim - - @property - def temporal_dim(self): - return self.feat_t_dim - - def forward(self, x): - b = x.shape[0] - layer_output = dict( - y_t=[], - y_s=[] - ) - - # first, we prepare the encoder before the transformer layers. - x = self.encoder()._prepare(x) - - # now, we alternate between synoptic and encoder layers - for enc_blk, dec_blk in zip( - self.encoder().transformer.resblocks, - self.decoder_layers - ): - data = enc_blk(x) - x = data["emb"] - y_t, y_s = dec_blk(data) - layer_output["y_t"].append(y_t) - layer_output["y_s"].append(y_s) - - # last, we are done with the encoder, therefore skipping the _finalize step. - # x = self.encoder()._finalize(x) - - # aggregate the layer outputs - y_s = sum(layer_output["y_s"]) - y_t = sum(layer_output["y_t"]) - - return y_s, y_t - - -class SynoVideoAttrExtractor(VideoAttrExtractor): - def __init__( - self, - # VideoAttrExtractor - architecture, - text_embed, - pretrain=None, - store_attrs=[], - attn_record=False, - # synoptic - ksize_t=3, - ksize_s=3, - num_synos=1, - num_frames=1, - s_k_attr="k", - s_v_attr="v", - op_mode=(OpMode.S | OpMode.T), - t_attrs=["q", "k", "v"], - ): - super(SynoVideoAttrExtractor, self).__init__( - architecture=architecture, - text_embed=text_embed, - store_attrs=store_attrs, - attn_record=attn_record, - pretrain=pretrain - ) - self.decoder = SynoDecoder( - encoder=self.model, - num_synos=num_synos, - num_frames=num_frames, - t_attrs=t_attrs, - ksize_t=ksize_t, - ksize_s=ksize_s, - s_k_attr=s_k_attr, - s_v_attr=s_v_attr, - op_mode=op_mode, - store_attrs=store_attrs, - attn_record=attn_record - ) - - @property - def spatial_dim(self): - return self.decoder.spatial_dim - - @property - def temporal_dim(self): - return self.decoder.temporal_dim - - def forward(self, x): - syno_s, syno_t = self.decoder(x=x) - - layer_attrs = [] - for enc_blk, dec_blk in zip(self.model.transformer.resblocks, self.decoder.decoder_layers): - layer_attrs.append( - { - **enc_blk.pop_attr(), - **dec_blk.pop_attr() - } - ) - - return dict( - layer_attrs=layer_attrs, - syno_s=syno_s, - syno_t=syno_t - ) - - def train(self, mode=True): - super().train(mode) - if (mode): - self.model.eval() - self.decoder.train() - return self - - -class BinaryLinearClassifier(nn.Module): - def __init__( - self, - *args, - op_mode, - **kargs, - - ): - super().__init__() - self.encoder = SynoVideoAttrExtractor( - *args, - **kargs, - op_mode=op_mode - ) - self.op_mode = op_mode - if (OpMode.S in self.op_mode): - self.s_ln = nn.LayerNorm(self.encoder.spatial_dim) - self.s_head = nn.Linear(self.encoder.spatial_dim, 2) - - if (OpMode.T in self.op_mode): - self.t_ln = nn.LayerNorm(self.encoder.temporal_dim) - self.t_head = nn.Linear(self.encoder.temporal_dim, 2) - - if (self.op_mode == (OpMode.T | OpMode.S)): - self.a_head = nn.Linear( - self.encoder.temporal_dim + self.encoder.spatial_dim, - 2 - ) - - @property - def transform(self): - return self.encoder.transform - - @property - def n_px(self): - return self.encoder.model.input_resolution - - def forward(self, x, *args, **kargs): - results = self.encoder(x) - logits_ = dict() - if (OpMode.S in self.op_mode): - _s = self.s_ln(results["syno_s"]) - logits_s = self.s_head(_s) - logits_["logits_s"] = logits_s - logits_["logits"] = logits_s - - if (OpMode.T in self.op_mode): - _t = self.t_ln(results["syno_t"]) - logits_t = self.t_head(_t) - logits = logits_t - logits_["logits_t"] = logits_t - logits_["logits"] = logits_t - - if (self.op_mode == (OpMode.S | OpMode.T)): - logits_a = self.a_head(torch.cat([_s, _t], dim=-1)) - logits = torch.log( - ( - logits_s.softmax(dim=-1) + - logits_t.softmax(dim=-1) + - logits_a.softmax(dim=-1) - ) / 3 + 1e-4 - ) - logits_["logits_a"] = logits_a - logits_["logits"] = logits - - return dict( - **logits_, - ** results - ) - - -class SynoVideoLearner(ODBinaryMetricClassifier): - def __init__( - self, - num_synos: int = 1, - num_frames: int = 1, - ksize_s: int = 3, - ksize_t: int = 3, - t_attrs: List[str] = ["q", "k", "v"], - s_k_attr: str = "k", - s_v_attr: str = "v", - op_mode: List[str] = ["S", "T"], - architecture: str = 'ViT-B/16', - text_embed: bool = False, - pretrain: str = None, - - attn_record: bool = False, - - store_attrs: List[str] = [], - is_focal_loss: bool = True, - - cls_weight: float = 10.0, - label_weights: List[float] = [1, 1], - ): - super().__init__() - self.save_hyperparameters() - op_mode = reduce(or_, [OpMode[m] for m in op_mode]) - params = dict( - architecture=architecture, - text_embed=text_embed, - attn_record=attn_record, - pretrain=pretrain, - num_synos=num_synos, - num_frames=num_frames, - ksize_s=ksize_s, - ksize_t=ksize_t, - store_attrs=store_attrs, - t_attrs=t_attrs, - s_k_attr=s_k_attr, - s_v_attr=s_v_attr, - op_mode=op_mode - ) - self.model = BinaryLinearClassifier(**params) - - self.label_weights = torch.tensor(label_weights) - self.cls_weight = cls_weight - self.is_focal_loss = is_focal_loss - - @property - def transform(self): - return self.model.transform - - @property - def n_px(self): - return self.model.n_px - - def shared_step(self, batch, stage): - x, y, z = batch["xyz"] - indices = batch["indices"] - dts_name = batch["dts_name"] - names = batch["names"] - - output = self(x, **z) - logits = output["logits"] - loss = 0 - # classification loss - if (stage == "train"): - logits = [output[k] for k in output if "logits_" in k] - y = y.repeat(len(logits)) - logits = torch.cat(logits, dim=0) - if self.is_focal_loss: - cls_loss = focal_loss( - logits, - y, - gamma=4, - weight=( - self.label_weights.to(y.device) - if stage == "train" else - None - ) - ) - else: - cls_loss = nn.functional.cross_entropy( - logits, - y, - reduction="none", - weight=( - self.label_weights.to(y.device) - if stage == "train" else - None - ) - ) - loss += cls_loss.mean() * self.cls_weight - self.log( - f"{stage}/{dts_name}/loss", - cls_loss.mean(), - batch_size=logits.shape[0] - ) - else: - # classification loss - cls_loss = nn.functional.cross_entropy( - logits, - y, - reduction="none", - weight=None - ) - loss += cls_loss.mean() - - return { - "logits": logits, - "labels": y, - "loss": loss, - "dts_name": dts_name, - "indices": indices, - "output": output - } - - -class FFGSynoVideoLearner(SynoVideoLearner): - def __init__( - self, - # ffg - face_feature_path: str, - face_parts: List[str] = [ - "lips", - "skin", - "eyes", - "nose" - ], - face_attn_attr: str = "k", - syno_attn_attr: str = "s_q", - ffg_temper: float = 30, - ffg_weight: float = 1.5, - ffg_layers: int = -1, - ffg_reverse: bool = False, - - # generic - architecture: str = 'ViT-B/16', - text_embed: bool = False, - pretrain: str = None, - - num_frames: int = 1, - ksize_s: int = 3, - ksize_t: int = 3, - t_attrs: List[str] = ["q", "k", "v"], - s_k_attr: str = "k", - s_v_attr: str = "v", - op_mode: List[str] = ["S", "T"], - attn_record: bool = False, - - store_attrs: List[str] = [], - is_focal_loss: bool = True, - - cls_weight: float = 10.0, - label_weights: List[float] = [1, 1], - ): - assert 'S' in op_mode, "FFG must include the spatial branch for operation." - - self.num_face_parts = len(face_parts) - self.face_attn_attr = face_attn_attr - self.syno_attn_attr = syno_attn_attr - self.ffg_temper = ffg_temper - self.ffg_weight = ffg_weight - self.ffg_layers = ffg_layers - self.ffg_reverse = ffg_reverse - - super().__init__( - num_frames=num_frames, - num_synos=self.num_face_parts, - ksize_s=ksize_s, - ksize_t=ksize_t, - op_mode=op_mode, - t_attrs=t_attrs, - s_k_attr=s_k_attr, - s_v_attr=s_v_attr, - architecture=architecture, - text_embed=text_embed, - attn_record=attn_record, - pretrain=pretrain, - store_attrs=set([*store_attrs, self.syno_attn_attr]), - cls_weight=cls_weight, - label_weights=label_weights, - is_focal_loss=is_focal_loss - ) - - self.save_hyperparameters() - - with open(face_feature_path, "rb") as f: - _face_features = pickle.load(f) - self.face_features = torch.stack( - [ - torch.stack([ - _face_features[self.face_attn_attr][p][l] - for p in face_parts - ]) - for l in range(self.model.encoder.model.transformer.layers) - ] - ) - self.face_features = self.face_features.unsqueeze(1) - - for i, dec_blk in enumerate(self.model.encoder.decoder.decoder_layers): - dec_blk.syno_embedding.data = self.face_features[i].squeeze(0).data.clone() - - def shared_step(self, batch, stage): - result = super().shared_step(batch, stage) - - if (stage == "train"): - dts_name = result["dts_name"] - x = batch["xyz"][0] - - # face feature guided loss - target_attn_attrs = torch.stack( - [ - attrs[self.syno_attn_attr] - for attrs in result["output"]["layer_attrs"] - ] - ) # qs.shape = [layer,b,t,syno,patch,head] - - if (len(target_attn_attrs.shape) == 4): - # shape = [l, b, synos, head*width] - # for: out, emb - pass - elif (len(target_attn_attrs.shape) == 5): - # shape = [l, b, synos, head,width] - # for: q, k, v - target_attn_attrs = target_attn_attrs.flatten(-2) - elif (len(target_attn_attrs.shape) == 6): - # shape = [l, b, t, synos, head, width] - # for: q, k, v - target_attn_attrs = target_attn_attrs.mean(2).flatten(-2) - else: - raise NotImplementedError() - - face_features = self.face_features.to( - dtype=target_attn_attrs.dtype, - device=target_attn_attrs.device - ) - - if self.ffg_layers == -1: - pass - elif self.ffg_layers > 0: - if (self.ffg_reverse): - face_features = face_features[: self.ffg_layers] - target_attn_attrs = target_attn_attrs[: self.ffg_layers] - else: - layers = ( - self.model.encoder.model.transformer.layers - - self.ffg_layers - ) - face_features = face_features[layers:] - target_attn_attrs = target_attn_attrs[layers:] - else: - raise NotImplementedError() - - l, b, q = target_attn_attrs.shape[:3] - face_features = face_features / face_features.norm(dim=-1, keepdim=True) - target_attn_attrs = target_attn_attrs / target_attn_attrs.norm(dim=-1, keepdim=True) - - logits = self.ffg_temper * (target_attn_attrs @ face_features.transpose(-1, -2)) - - cls_sim = torch.nn.functional.cross_entropy( - logits.flatten(0, 2), - ( - torch.arange( - 0, - self.num_face_parts - ) - .repeat((l * b)) - .to(x.device) - ), - reduction="none" - ).mean() - - self.log( - f"{stage}/{dts_name}/syno_sim", - cls_sim, - batch_size=x.shape[0] - ) - result["loss"] += cls_sim * self.ffg_weight - - return result - - -class FFESynoVideoLearner(SynoVideoLearner): - def __init__( - self, - # ffg - face_feature_path: str, - face_parts: List[str] = [ - "lips", - "skin", - "eyes", - "nose" - ], - face_attn_attr: str = "k", - syno_attn_attr: str = "s_q", - ffg_temper: float = 30, - ffg_weight: float = 1.5, - ffg_layers: int = -1, - ffg_reverse: bool = False, - ffe_weight: float = 100, - grad_temper: float = 100, - - # generic - architecture: str = 'ViT-B/16', - text_embed: bool = False, - pretrain: str = None, - - num_frames: int = 1, - ksize_s: int = 3, - ksize_t: int = 3, - t_attrs: List[str] = ["q", "k", "v"], - s_k_attr: str = "k", - s_v_attr: str = "v", - op_mode: List[str] = ["S", "T"], - attn_record: bool = True, - - store_attrs: List[str] = [], - is_focal_loss: bool = True, - - cls_weight: float = 10.0, - label_weights: List[float] = [1, 1], - ): - assert 'S' in op_mode, "FFG must include the spatial branch for operation." - - self.num_face_parts = len(face_parts) - self.face_attn_attr = face_attn_attr - self.syno_attn_attr = syno_attn_attr - self.ffg_temper = ffg_temper - self.ffg_weight = ffg_weight - self.ffg_layers = ffg_layers - self.ffg_reverse = ffg_reverse - self.ffe_weight = ffe_weight - self.grad_temper = grad_temper - - super().__init__( - num_frames=num_frames, - num_synos=self.num_face_parts, - ksize_s=ksize_s, - ksize_t=ksize_t, - op_mode=op_mode, - t_attrs=t_attrs, - s_k_attr=s_k_attr, - s_v_attr=s_v_attr, - architecture=architecture, - text_embed=text_embed, - attn_record=attn_record, - pretrain=pretrain, - store_attrs=set([*store_attrs, self.syno_attn_attr]), - cls_weight=cls_weight, - label_weights=label_weights, - is_focal_loss=is_focal_loss - ) - - self.save_hyperparameters() - - with open(face_feature_path, "rb") as f: - _face_features = pickle.load(f) - self.face_features = torch.stack( - [ - torch.stack([ - _face_features[self.face_attn_attr][p][l] - for p in face_parts - ]) - for l in range(self.model.encoder.model.transformer.layers) - ] - ) - self.face_features = self.face_features.unsqueeze(1) - - for i, dec_blk in enumerate(self.model.encoder.decoder.decoder_layers): - dec_blk.syno_embedding.data = self.face_features[i].squeeze(0).data.clone() - - def shared_step(self, batch, stage): - result = super().shared_step(batch, stage) - - if (stage == "train"): - dts_name = result["dts_name"] - x = batch["xyz"][0] - - # face feature guided loss - target_attn_attrs = torch.stack( - [ - attrs[self.syno_attn_attr] - for attrs in result["output"]["layer_attrs"] - ] - ) # qs.shape = [layer,b,t,syno,patch,head] - - if (len(target_attn_attrs.shape) == 4): - # shape = [l, b, synos, head*width] - # for: out, emb - pass - elif (len(target_attn_attrs.shape) == 5): - # shape = [l, b, synos, head,width] - # for: q, k, v - target_attn_attrs = target_attn_attrs.flatten(-2) - elif (len(target_attn_attrs.shape) == 6): - # shape = [l, b, t, synos, head, width] - # for: q, k, v - target_attn_attrs = target_attn_attrs.mean(2).flatten(-2) - else: - raise NotImplementedError() - - face_features = self.face_features.to( - dtype=target_attn_attrs.dtype, - device=target_attn_attrs.device - ) - - if self.ffg_layers == -1: - pass - elif self.ffg_layers > 0: - if (self.ffg_reverse): - face_features = face_features[: self.ffg_layers] - target_attn_attrs = target_attn_attrs[: self.ffg_layers] - else: - layers = ( - self.model.encoder.model.transformer.layers - - self.ffg_layers - ) - face_features = face_features[layers:] - target_attn_attrs = target_attn_attrs[layers:] - else: - raise NotImplementedError() - - l, b, q = target_attn_attrs.shape[:3] - face_features = face_features / face_features.norm(dim=-1, keepdim=True) - target_attn_attrs = target_attn_attrs / target_attn_attrs.norm(dim=-1, keepdim=True) - - logits = self.ffg_temper * (target_attn_attrs @ face_features.transpose(-1, -2)) - - cls_sim = torch.nn.functional.cross_entropy( - logits.flatten(0, 2), - ( - torch.arange( - 0, - self.num_face_parts - ) - .repeat((l * b)) - .to(x.device) - ), - reduction="none" - ).mean() - - self.log( - f"{stage}/{dts_name}/syno_sim", - cls_sim, - batch_size=x.shape[0] - ) - - result["loss"] += cls_sim * self.ffg_weight - - grad_raw_grid = ( - torch.stack( - torch.autograd.grad( - result["loss"], - [layer.aff for layer in self.model.encoder.decoder.decoder_layers], - grad_outputs=torch.ones_like(result["loss"]), - retain_graph=True, - create_graph=True - ) - ).abs() * self.grad_temper - ) - - attn_grid = ( - torch.stack( - [layer.aff for layer in self.model.encoder.decoder.decoder_layers] - ) - ).detach() - - grad_align = torch.nn.functional.kl_div( - torch.nn.functional.log_softmax(grad_raw_grid.flatten(3), dim=-1), - attn_grid.flatten(3), - ) - - self.log( - f"{stage}/{dts_name}/grad_align", - grad_align, - batch_size=x.shape[0] - ) - - result["loss"] += grad_align * self.ffe_weight - - return result - - -if __name__ == "__main__": - - frames = 5 - # # AttrExtractor Test - model = FFGSynoVideoLearner( - face_feature_path="misc/L14_real_semantic_patches_v2_2000.pickle", - architecture="ViT-L/14", - num_frames=frames - ) - model.to("cuda") - results = model(torch.randn(9, frames, 3, 224, 224).to("cuda")) - synos = results["logits"] - synos.sum().backward() - - # model = GlitchBlock(n_head=12, n_patch=14, n_filt=10, ksize=3, n_frames=frames) - # model.to("cuda") - # logits = model({ - # "q": torch.randn(1, frames, 197, 12, 64).to("cuda"), - # "k": torch.randn(1, frames, 197, 12, 64).to("cuda") - # }) - print("done") diff --git a/video/dfd-fcg/model_code/src/model/clip/vpt.py b/video/dfd-fcg/model_code/src/model/clip/vpt.py deleted file mode 100644 index c0106fc4868f7d8d47b270de38e73ac379f0ec49..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/model/clip/vpt.py +++ /dev/null @@ -1,238 +0,0 @@ -import wandb -import torch -import pickle -import random - -import torch.nn as nn -import torch.nn.functional as F - -from operator import or_ -from typing import List -from functools import reduce -from enum import IntFlag, auto - -from src.model.base import ODBinaryMetricClassifier -from src.model.clip import VideoAttrExtractor -from src.utility.loss import focal_loss - - -class PromptMode(IntFlag): - DEEP = auto() # spatial - SHALLOW = auto() # temporal - - -class PromptedVideoAttrExtractor(VideoAttrExtractor): - def __init__( - self, - # VideoAttrExtractor - architecture, - text_embed, - pretrain=None, - store_attrs=[], - attn_record=False, - # visual prompting - num_prompts=1, - prompt_mode=PromptMode.DEEP - ): - super(PromptedVideoAttrExtractor, self).__init__( - architecture=architecture, - text_embed=text_embed, - store_attrs=store_attrs, - attn_record=attn_record, - pretrain=pretrain - ) - self.num_prompts = num_prompts - self.prompt_mode = prompt_mode - - if (prompt_mode == PromptMode.DEEP): - # shape = batch,frames,layers,prompts,dim - self.visual_prompts = nn.Parameter(torch.zeros(1, 1, self.n_layers, num_prompts, self.feat_dim), requires_grad=True) - elif (prompt_mode == PromptMode.SHALLOW): - # shape = batch,frames,layers,prompts,dim - self.visual_prompts = nn.Parameter(torch.zeros(1, 1, 1, num_prompts, self.feat_dim), requires_grad=True) - nn.init.normal_(self.visual_prompts, std=0.001) - - def forward(self, x): - - # first, we prepare the encoder before the transformer layers. - x = self.model._prepare(x) - - x = torch.cat([x, self.visual_prompts[:, :, 0].repeat(x.shape[0], x.shape[1], 1, 1)], dim=-2) - - # now, we alternate between synoptic and encoder layers - for i, enc_blk in enumerate(self.model.transformer.resblocks): - if i > 0 and self.prompt_mode == PromptMode.DEEP: - x[:, :, :self.num_prompts] = ( - x[:, :, :self.num_prompts] + - self.visual_prompts[:, :, i].repeat(x.shape[0], x.shape[1], 1, 1) - ) - data = enc_blk(x) - x = data["emb"] - - layer_attrs = [] - for enc_blk in self.model.transformer.resblocks: - layer_attrs.append( - { - **enc_blk.pop_attr() - } - ) - - embeds = x[:, :, :self.num_prompts].mean(dim=2) - - return dict( - layer_attrs=layer_attrs, - embeds=embeds - ) - - def train(self, mode=True): - super().train(mode) - - if (mode): - self.model.eval() - - return self - - -class BinaryLinearClassifier(nn.Module): - def __init__( - self, - *args, - **kargs, - ): - super().__init__() - self.encoder = PromptedVideoAttrExtractor( - *args, - **kargs - ) - - self.projs = self.make_linear(self.encoder.embed_dim) - - def make_linear(self, embed_dim): - linear = nn.Linear( - embed_dim, - 2 - ) - nn.init.normal_(linear.weight, std=0.001) - nn.init.normal_(linear.bias, std=0.001) - return linear - - @property - def transform(self): - return self.encoder.transform - - @property - def n_px(self): - return self.encoder.model.input_resolution - - def forward(self, x, *args, **kargs): - results = self.encoder(x) - embeds = results["embeds"] - logits = self.projs(embeds.mean(1)) - return dict( - logits=logits, - ** results - ) - - -class PromptedLinearVideoLearner(ODBinaryMetricClassifier): - def __init__( - self, - architecture: str = 'ViT-B/16', - text_embed: bool = False, - attn_record: bool = False, - pretrain: str = None, - label_weights: List[float] = [1, 1], - cls_weight: float = 10.0, - store_attrs: List[str] = [], - num_prompts=1, - prompt_mode=PromptMode.DEEP - ): - super().__init__() - self.save_hyperparameters() - params = dict( - architecture=architecture, - text_embed=text_embed, - attn_record=attn_record, - pretrain=pretrain, - store_attrs=store_attrs, - num_prompts=num_prompts, - prompt_mode=PromptMode[prompt_mode] - ) - self.model = BinaryLinearClassifier(**params) - self.label_weights = torch.tensor(label_weights) - self.cls_weight = cls_weight - - @property - def transform(self): - return self.model.transform - - @property - def n_px(self): - return self.model.n_px - - def shared_step(self, batch, stage): - x, y, z = batch["xyz"] - indices = batch["indices"] - dts_name = batch["dts_name"] - names = batch["names"] - - output = self(x, **z) - logits = output["logits"] - loss = 0 - # classification loss - if (stage == "train"): - cls_loss = focal_loss( - logits, - y, - gamma=4, - weight=( - self.label_weights.to(y.device) - if stage == "train" else - None - ) - ) - loss += cls_loss.mean() * self.cls_weight - self.log( - f"{stage}/{dts_name}/loss", - cls_loss.mean(), - batch_size=logits.shape[0] - ) - else: - # classification loss - cls_loss = nn.functional.cross_entropy( - logits, - y, - reduction="none", - weight=( - self.label_weights.to(y.device) - if stage == "train" else - None - ) - ) - loss += cls_loss.mean() - - return { - "logits": logits, - "labels": y, - "loss": loss, - "dts_name": dts_name, - "indices": indices, - "output": output - } - - -if __name__ == "__main__": - frames = 5 - model = BinaryLinearClassifier( - architecture="ViT-L/14", - attn_record=False, - text_embed=False, - num_prompts=4, - prompt_mode=PromptMode.SHALLOW - ) - model.to("cuda") - result = model(torch.randn(5, frames, 3, 224, 224).to("cuda")) - logit = result["logits"] - logit.sum().backward() - print([m for m, v in model.named_parameters() if v.requires_grad]) - print("done") diff --git a/video/dfd-fcg/model_code/src/preprocess/crop_main_face.py b/video/dfd-fcg/model_code/src/preprocess/crop_main_face.py deleted file mode 100644 index 5b83ef335697001411cbb9826339e58136207e60..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/preprocess/crop_main_face.py +++ /dev/null @@ -1,512 +0,0 @@ -import os -import cv2 -import pickle -import argparse -import numpy as np -from glob import glob -from tqdm import tqdm -from typing import List -from os.path import exists -from dataclasses import dataclass -from multiprocessing import Pool, cpu_count - - -def load_args(args): - parser = argparse.ArgumentParser( - description='Pre-processing' - ) - parser.add_argument( - '--root-dir', default=None, help='video directory' - ) - parser.add_argument( - '--mean-face', default='./misc/20words_mean_face.npy', help='mean face path' - ) - parser.add_argument( - '--crop-size', default=150, type=int, help='width of face crop' - ) - parser.add_argument( - '--target-size', default=256, type=int, help='the target width of affined faces.' - ) - parser.add_argument( - '--start-idx', default=15, type=int, help='start of landmark frame_idx' - ) - parser.add_argument( - '--stop-idx', default=68, type=int, help='end of landmark frame_idx' - ) - parser.add_argument( - '--window-margin', default=12, type=int, help='window margin for smoothed landmarks' - ) - parser.add_argument( - '--video-dir', default="videos", type=str, help='video folder' - ) - parser.add_argument( - '--fdata-dir', default="frame_data", type=str, help='frame data folder' - ) - parser.add_argument( - '--glob-exp', default="*/*", type=str, help='additional glob expressions.' - ) - parser.add_argument( - '--crop-dir', default="cropped", type=str, help="folder destination to save the process results." - ) - parser.add_argument( - '--max-pad-secs', default=3, type=int, help="maximum seconds to pad for the untrack faces." - ) - parser.add_argument( - '--min-crop-rate', default=0.9, type=float, help="minimum ratio of duration with tracked faces." - ) - - parser.add_argument( - '--d-rate', type=float, default=0.65, help="the maximum distance between the landmarks according to the ratio of face size." - ) - - parser.add_argument( - '--replace', action="store_true", default=False - ) - - parser.add_argument( - '--workers', default=int(cpu_count() / 2), type=int - ) - - args = parser.parse_args(args) - - return args - - -class FaceData: - def __init__(self, _lm, _bbox, _idx): - self.ema_lm = _lm # shape = (68, 2) - self.ema_bbox = _bbox # shape = (2, 2) - self.lm = [_lm] - self.bbox = [_bbox] - self.idx = [_idx] - self.paddings = 0 - - def last_landmark(self): - return self.ema_lm - - def last_bbox(self): - return self.ema_bbox - - def face_size(self): - bbox = self.last_bbox() - return np.linalg.norm(bbox[0] - bbox[1], axis=-1) - - def d_lm(self, landmarks): - return np.mean( - np.linalg.norm(landmarks - self.last_landmark(), axis=-1), - axis=1 - ) - - def d_bbox(self, bboxes): - return np.mean( - np.linalg.norm(bboxes - self.last_bbox(), axis=-1), - axis=1 - ) - - def pad(self): - self.paddings += 1 - - def add(self, _lm, _bbox, _idx): - self.ema_lm = self.ema_lm * 0.5 + _lm * 0.5 - self.ema_bbox = self.ema_bbox * 0.5 + _bbox * 0.5 - self.lm.append(_lm) - self.bbox.append(_bbox) - self.idx.append(_idx) - - if (self.paddings > 0): - self.paddings = 0 - - def __len__(self): - return len(self.lm) - - -def get_main_face_data(frame_landmarks, frame_bboxes, d_rate, max_paddings): - # post-process the extracted frame faces. - # create face identity database to track landmark motion. - face_dbs = [] - num_frames = len(frame_landmarks) - for frame_idx, landmarks, bboxes in zip(range(num_frames), frame_landmarks, frame_bboxes): - - if ( - landmarks == None or len(landmarks) == 0 or - bboxes == None or len(bboxes) == 0 - ): - for face in face_dbs: - face.pad() - - else: - assert len(landmarks) == len(bboxes), "length of landmark and bbox in frame mismatch." - num_faces = len(landmarks) - landmarks = np.stack(landmarks) - bboxes = np.stack(bboxes) - - matched_indices = {} - - # find and connect with the closest face in the database. - for db_idx, db_face in enumerate(face_dbs): - # face landmark and bbox motion distance. - d = db_face.d_bbox(bboxes) + db_face.d_lm(landmarks) - - # the motion continues if the landmark motion distance is lower than 100. - if (np.min(d) > db_face.face_size() * d_rate * 2): - continue - # get the closest face in the database. - closest_idx = np.argmin(d) - proximity = d[closest_idx] - - if ( - (not closest_idx in matched_indices) or - (matched_indices[closest_idx]["d"] > proximity) - ): - matched_indices[closest_idx] = dict(d=proximity, db_idx=db_idx) - - # (hacky!) pad current frame in advance, in further process, tracked faces will reset the padding. - for db_face in face_dbs: - db_face.pad() - - # finalize and update the database entity. - for face_idx, save_data in matched_indices.items(): - face_dbs[save_data["db_idx"]].add(landmarks[face_idx], bboxes[face_idx], frame_idx) - - # create new database entity for untracked landmarks. - for face_idx, landmark, bbox in zip(range(num_faces), landmarks, bboxes): - if face_idx in matched_indices: - continue - else: - face_dbs.append(FaceData(landmark, bbox, frame_idx)) - - # report only the most consistant face in the video. - main_face = sorted(face_dbs, key=lambda x: len(x), reverse=True)[0] - - return main_face.lm, main_face.bbox, main_face.idx - - -def save_video( - filename, - frames, - fps -): - fourcc = cv2.VideoWriter_fourcc("F", "F", "V", "1") - writer = cv2.VideoWriter(filename, fourcc, fps, (frames.shape[2], frames.shape[1])) - for frame in frames: - writer.write(frame) - writer.release() # close the writer - - -def affine_transform( - frame, - bboxes, - landmarks, - reference, - target_size, - stable_points=(28, 33, 36, 39, 42, 45, 48, 54), - interpolation=cv2.INTER_LINEAR, - border_mode=cv2.BORDER_CONSTANT, - border_value=0 -): - stable_reference = np.vstack([reference[x] for x in stable_points]) - stable_reference[:, 0] *= (target_size / 256) - stable_reference[:, 1] *= (target_size / 256) - - # Warp the face patch and the landmarks - transform = cv2.estimateAffinePartial2D( - np.vstack([landmarks[x] for x in stable_points]), - stable_reference, method=cv2.LMEDS - )[0] - - transformed_frame = cv2.warpAffine( - frame, - transform, - dsize=(target_size, target_size), - flags=interpolation, - borderMode=border_mode, - borderValue=border_value - ) - transformed_landmarks = np.matmul( - landmarks, - transform[:, :2].transpose() - ) + transform[:, 2].transpose() - - transformed_bboxes = np.matmul( - bboxes, - transform[:, :2].transpose() - ) + transform[:, 2].transpose() - - return transformed_frame, transformed_landmarks, transformed_bboxes - - -def crop_driver( - img, - bboxes, - landmarks, - size, - start_idx, - stop_idx -): - center_x, center_y = np.mean(landmarks[start_idx:stop_idx], axis=0) - - if center_y - size < 0: - center_y = size + 1 - elif (center_y + size) > img.shape[0]: - center_y = img.shape[0] - size - 1 - - if center_x - size < 0: - center_x = size + 1 - elif (center_x + size) > img.shape[1]: - center_x = img.shape[1] - size - 1 - - uy, by = int(center_y - size), int(center_y + size) - lx, rx = int(center_x - size), int(center_x + size) - cutted_img = np.copy(img[uy:by, lx:rx]) - cutted_landmarks = np.copy(landmarks) - [lx, uy] - cutted_bboxes = np.copy(bboxes) - [lx, uy] - - return cutted_img, cutted_landmarks, cutted_bboxes - - -def crop_patch( - frames, - landmarks, - bboxes, - indices, - reference, - window_margin, - start_idx, - stop_idx, - crop_size, - target_size, -): - assert len(landmarks) == len(bboxes), f"length of landmarks and bboxes mismatch." - - crop_frames = [] - crop_bboxes = [] - crop_landmarks = [] - - length = len(frames) - - # preprocess for window margin - _landmarks = [None for _ in range(length)] - _bboxes = [None for _ in range(length)] - for i, idx in enumerate(indices): - _landmarks[idx] = landmarks[i] - _bboxes[idx] = bboxes[i] - - for frame_idx in range(length): - # check landmark exists - if (not frame_idx in indices): - crop_frame = np.zeros((crop_size, crop_size, 3), dtype=np.uint8) - crop_landmark = None - crop_bbox = None - else: - frame = frames[frame_idx] - margin = min(window_margin // 2, frame_idx, length - 1 - frame_idx) - - # smoothed landmarks - smoothed_landmarks = np.mean( - [ - _landmarks[i] - for i in range(frame_idx - margin, frame_idx + margin + 1) - if (not _landmarks[i] is None) - ], - axis=0 - ) - smoothed_landmarks += (_landmarks[frame_idx].mean(axis=0) - smoothed_landmarks.mean(axis=0)) - # smoothed bboxes - smoothed_bboxes = np.mean( - [ - _bboxes[i] - for i in range(frame_idx - margin, frame_idx + margin + 1) - if (not _bboxes[i] is None) - ], - axis=0 - ) - smoothed_bboxes += (_bboxes[frame_idx].mean(axis=0) - smoothed_bboxes.mean(axis=0)) - # affine transform - transformed_frame, transformed_landmarks, transformed_bboxes = affine_transform( - frame, - smoothed_bboxes, - smoothed_landmarks, - reference, - target_size=target_size - ) - crop_frame, crop_landmark, crop_bbox = crop_driver( - transformed_frame, - transformed_bboxes, - transformed_landmarks, - crop_size // 2, - start_idx=start_idx, - stop_idx=stop_idx - ) - - assert crop_frame.shape[0] == crop_frame.shape[1] == crop_size, "crop size doesn't match." - - crop_frames.append(crop_frame) - crop_landmarks.append(crop_landmark) - crop_bboxes.append(crop_bbox) - - # convert to numpy array for better extensibility. - crop_frames = np.array(crop_frames) - crop_landmarks = crop_landmarks - crop_bboxes = crop_bboxes - - return crop_frames, crop_landmarks, crop_bboxes - - -def get_video_frames(video_path): - cap = cv2.VideoCapture(video_path) - fps = round(cap.get(cv2.CAP_PROP_FPS)) - frames = [] - while cap.isOpened(): - ret, frame = cap.read() - if not ret: - break - frames.append(frame.copy()) - cap.release() - return fps, frames - - -def get_video_frame_data(fdata_path): - with open(fdata_path, "rb") as f: - frame_data = pickle.load(f) - frame_landmarks = [[] if frame is None else frame["landmarks"] for frame in frame_data] - frame_bboxes = [[] if frame is None else frame["bboxes"] for frame in frame_data] - - assert len(frame_landmarks) == len(frame_bboxes), f"length of landmark and bbox mismatch." - - _98_to_68_mapping = [ - 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, - 26, 28, 30, 32, 33, 34, 35, 36, 37, 42, 43, 44, - 45, 46, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 63, 64, 65, 67, 68, 69, 71, 72, 73, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 95 - ] - - frame_landmarks = [ - [ - (lm[_98_to_68_mapping] if len(lm) == 98 else lm) - for lm in landmarks - ] - for landmarks in frame_landmarks - ] - - # assert len(frame_landmarks[0][0]) == 68, "landmark should be 68 points." - - frame_bboxes = [ - [ - ( - bbox.reshape((2, 2)) - if len(bbox.shape) == 1 else - bbox - ) - for bbox in bboxes - ] - for bboxes in frame_bboxes - ] - - return frame_landmarks, frame_bboxes - - -@dataclass -class RunnerParams: - video_path: str - args: argparse.Namespace - - -def runner(params: RunnerParams): - try: - args = params.args - video_path = params.video_path - - rel_video_path = os.path.splitext(os.path.relpath(video_path, args.video_root))[0] - fdata_path = os.path.join(args.fdata_root, rel_video_path) + ".pickle" - crop_video_path = os.path.join(args.crop_root, args.video_dir, rel_video_path) + ".avi" - crop_fdata_path = os.path.join(args.crop_root, args.fdata_dir, rel_video_path) + ".pickle" - - if (exists(f"{crop_video_path}") and exists(f"{crop_fdata_path}") and not args.replace): - return - - fps, frames = get_video_frames(video_path) - - frame_landmarks, frame_bboxes = get_video_frame_data(fdata_path) - - assert len(frames) == len(frame_landmarks) == len(frame_bboxes) - - landmarks, bboxes, indices = get_main_face_data( - frame_landmarks=frame_landmarks, - frame_bboxes=frame_bboxes, - d_rate=args.d_rate, - max_paddings=fps * args.max_pad_secs - ) - - if (len(landmarks) < len(frames) * args.min_crop_rate): - raise Exception("number of tracked landmarks below the minimum ratio of frames.") - - crop_frames, crop_landmarks, crop_bboxes = crop_patch( - frames, - landmarks, - bboxes, - indices, - args.reference, - window_margin=args.window_margin, - start_idx=args.start_idx, - stop_idx=args.stop_idx, - crop_size=args.crop_size, - target_size=args.target_size - ) - - # save video - os.makedirs(os.path.dirname(crop_video_path), exist_ok=True) - - save_video(crop_video_path, crop_frames, fps) - - # save frame data - os.makedirs(os.path.dirname(crop_fdata_path), exist_ok=True) - - with open(crop_fdata_path, "wb") as f: - assert crop_bboxes[0].shape == (2, 2) - pickle.dump( - [ - dict(landmarks=[landmarks], bboxes=[bboxes]) - for landmarks, bboxes in zip(crop_landmarks, crop_bboxes) - ], - f - ) - except Exception as e: - print("Video Process Error:", video_path, e) - - -def main(args=None): - args = load_args(args) - args.reference = np.load(args.mean_face) - - args.video_root = os.path.join(args.root_dir, args.video_dir) - args.fdata_root = os.path.join(args.root_dir, args.fdata_dir) - args.crop_root = os.path.join(args.root_dir, args.crop_dir) - - video_files = sorted(glob(os.path.join(args.video_root, args.glob_exp))) - - if (args.workers == 0): - for video_path in tqdm(video_files): - runner(RunnerParams(args=args, video_path=video_path)) - - else: - with Pool(args.workers) as p: - for _ in tqdm( - p.imap_unordered( - runner, - [ - RunnerParams( - args=args, - video_path=video_path - ) - for video_path in video_files - ] - ), - total=len(video_files) - ): - continue - - -if __name__ == "__main__": - main() diff --git a/video/dfd-fcg/model_code/src/preprocess/fetch_landmark_bbox.py b/video/dfd-fcg/model_code/src/preprocess/fetch_landmark_bbox.py deleted file mode 100644 index 49202cf87d4bf3ead2abeae7d0e12691c81547eb..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/preprocess/fetch_landmark_bbox.py +++ /dev/null @@ -1,152 +0,0 @@ -import os -import cv2 -import math -import torch -import pickle -import argparse -import numpy as np -from tqdm import tqdm -from glob import glob -import face_alignment - - -def load_args(args): - parser = argparse.ArgumentParser() - parser.add_argument("--root-dir", type=str, default="") - parser.add_argument("--video-dir", type=str, default="videos") - parser.add_argument("--fdata-dir", type=str, default="frame_data") - parser.add_argument("--glob-exp", type=str, default="*/*") - parser.add_argument("--split-num", type=int, default=1) - parser.add_argument("--part-num", type=int, default=1) - parser.add_argument("--batch", type=int, default=1) - parser.add_argument("--max-res", type=int, default=800) - args = parser.parse_args(args) - - assert args.part_num > 0 and args.split_num > 0, "split and part value should be > 0" - - args.part_num = args.part_num - 1 - - return args - - -@torch.inference_mode() -def landmark_extract(fn, org_path, batch_size, max_res): - - cap_org = cv2.VideoCapture(org_path) - - try: - width = cap_org.get(cv2.CAP_PROP_FRAME_WIDTH) - height = cap_org.get(cv2.CAP_PROP_FRAME_HEIGHT) - frames = [] - - # determine the scaling factor to shrink the size of input image(for efficiency). - if (max(height, width) > max_res): - scale = max_res / max(height, width) - else: - scale = 1 - - while (1): - ret_org, frame_org = cap_org.read() - if (not ret_org): - break - frame_org = cv2.cvtColor(frame_org, cv2.COLOR_BGR2RGB) - frame_org = cv2.resize(frame_org, None, fx=scale, fy=scale) - frames.append(frame_org) - - frame_count = len(frames) - frame_faces = [None for _ in range(frame_count)] - batch_indices = [] - batch_frames = [] - - for cnt_frame in range(frame_count): - batch_frames.append(frames[cnt_frame]) - batch_indices.append(cnt_frame) - - if (len(batch_frames) == batch_size or (cnt_frame == (frame_count - 1) and len(batch_frames) > 0)): - - results = fn(torch.tensor(np.stack(batch_frames).transpose((0, 3, 1, 2)))) - batch_size = len(results[0]) - - batch_landmarks = results[0] - batch_bboxes = results[2] - - for index, frame_landmarks, frame_bboxes in zip(batch_indices, batch_landmarks, batch_bboxes): - if (len(frame_landmarks) > 0): - frame_landmarks = frame_landmarks.reshape(-1, 68, 2) / scale - frame_landmarks = [lm for lm in frame_landmarks] - frame_bboxes = [bbox[:-1] / scale for bbox in frame_bboxes] - frame_faces[index] = { - "landmarks": frame_landmarks, - "bboxes": frame_bboxes - } - - batch_frames.clear() - batch_indices.clear() - - return frame_faces - - except Exception as e: - raise e - - finally: - cap_org.release() - - -def main(args=None): - # This file extract video landmarks from a given folder. - # In addition, the landmarks are tracked with landmarks from previous frames. - # By doing so, we expect to extract the most consistently appeared faces from a given video. - # Note that under 'pack' save mode, the extracted faces must match the length of the video. - # That's to say, if there exists a single frame without appearing faces in the video, the extract operation fails. - - args = load_args(args=args) - - model = face_alignment.FaceAlignment( - face_alignment.LandmarksType.TWO_D, - face_detector='sfd', - dtype=torch.float16, # float16 to boost efficiency. - flip_input=False, - device="cuda", - ) - - def driver(x): return model.get_landmarks_from_batch(x, return_bboxes=True) - - if (not args.root_dir[-1] == "/"): - args.root_dir += "/" - - video_files = sorted(glob(os.path.join(args.root_dir, args.video_dir, args.glob_exp))) - _, video_ext = os.path.splitext(video_files[0]) - - # splitting - split_size = math.ceil(len(video_files) / args.split_num) - video_files = video_files[args.part_num * split_size:(args.part_num + 1) * split_size] - n_videos = len(video_files) - - print("{} videos in {}".format(n_videos, args.root_dir)) - print("path sample:{}".format(video_files[0])) - - cont = input(f"Processing Part {args.part_num+1}/{args.split_num}, Confirm?(y/n)") - if (not cont.lower() == "y"): - print("abort.") - return - - for i in tqdm(range(n_videos)): - lm_path = video_files[i].replace(args.video_dir, args.fdata_dir).replace(video_ext, '.pickle') - - if (os.path.exists(lm_path)): - continue - - datas = landmark_extract( - fn=driver, - org_path=video_files[i], - batch_size=args.batch, - max_res=args.max_res - ) - - os.makedirs(os.path.split(lm_path)[0], exist_ok=True) - with open(lm_path, "wb") as f: - pickle.dump(datas, f) - - -if __name__ == '__main__': - main() diff --git a/video/dfd-fcg/model_code/src/preprocess/robustness/distortions.py b/video/dfd-fcg/model_code/src/preprocess/robustness/distortions.py deleted file mode 100755 index 4a7faaf72a396593e3309266ec6e3bc0fb7f5c1b..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/preprocess/robustness/distortions.py +++ /dev/null @@ -1,92 +0,0 @@ -import math -import os -import random - -import cv2 -import numpy as np - - -def bgr2ycbcr(img_bgr): - img_bgr = img_bgr.astype(np.float32) - img_ycrcb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2YCR_CB) - img_ycbcr = img_ycrcb[:, :, (0, 2, 1)].astype(np.float32) - # to [16/255, 235/255] - img_ycbcr[:, :, 0] = (img_ycbcr[:, :, 0] * (235 - 16) + 16) / 255.0 - # to [16/255, 240/255] - img_ycbcr[:, :, 1:] = (img_ycbcr[:, :, 1:] * (240 - 16) + 16) / 255.0 - - return img_ycbcr - - -def ycbcr2bgr(img_ycbcr): - img_ycbcr = img_ycbcr.astype(np.float32) - # to [0, 1] - img_ycbcr[:, :, 0] = (img_ycbcr[:, :, 0] * 255.0 - 16) / (235 - 16) - # to [0, 1] - img_ycbcr[:, :, 1:] = (img_ycbcr[:, :, 1:] * 255.0 - 16) / (240 - 16) - img_ycrcb = img_ycbcr[:, :, (0, 2, 1)].astype(np.float32) - img_bgr = cv2.cvtColor(img_ycrcb, cv2.COLOR_YCR_CB2BGR) - - return img_bgr - - -def color_saturation(img, param): - ycbcr = bgr2ycbcr(img) - ycbcr[:, :, 1] = 0.5 + (ycbcr[:, :, 1] - 0.5) * param - ycbcr[:, :, 2] = 0.5 + (ycbcr[:, :, 2] - 0.5) * param - img = ycbcr2bgr(ycbcr).astype(np.uint8) - - return img - - -def color_contrast(img, param): - img = img.astype(np.float32) * param - img = img.astype(np.uint8) - - return img - - -def block_wise(img, param): - width = 8 - block = np.ones((width, width, 3)).astype(int) * 128 - param = min(img.shape[0], img.shape[1]) // 256 * param - for i in range(param): - r_w = random.randint(0, img.shape[1] - 1 - width) - r_h = random.randint(0, img.shape[0] - 1 - width) - img[r_h:r_h + width, r_w:r_w + width, :] = block - - return img - - -def gaussian_noise_color(img, param): - ycbcr = bgr2ycbcr(img) / 255 - size_a = ycbcr.shape - b = (ycbcr + math.sqrt(param) * - np.random.randn(size_a[0], size_a[1], size_a[2])) * 255 - b = ycbcr2bgr(b) - img = np.clip(b, 0, 255).astype(np.uint8) - - return img - - -def gaussian_blur(img, param): - img = cv2.GaussianBlur(img, (param, param), param * 1.0 / 6) - - return img - - -def jpeg_compression(img, param): - h, w, _ = img.shape - s_h = h // param - s_w = w // param - img = cv2.resize(img, (s_w, s_h)) - img = cv2.resize(img, (w, h)) - - return img - - -def video_compression(vid_in, vid_out, param): - cmd = f'ffmpeg -i {vid_in} -crf {param} -y {vid_out}' - os.system(cmd) - - return diff --git a/video/dfd-fcg/model_code/src/preprocess/robustness/phase1_apply_all_to_videos.py b/video/dfd-fcg/model_code/src/preprocess/robustness/phase1_apply_all_to_videos.py deleted file mode 100755 index 58231d6beb804c946cb7f09e65806fc7607fff87..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/preprocess/robustness/phase1_apply_all_to_videos.py +++ /dev/null @@ -1,240 +0,0 @@ -import os -import math -import argparse -from multiprocessing import Process, Pool -from glob import glob - - -import argparse -import copy -import os -import random - -import cv2 -from tqdm import tqdm -from dataclasses import dataclass -from .distortions import (block_wise, color_contrast, color_saturation, - gaussian_blur, gaussian_noise_color, jpeg_compression, - video_compression) - - -def parse_args(): - parser = argparse.ArgumentParser(description='Add a distortion to video.') - parser.add_argument( - '--dts-root', - type=str, - default="/scratch1/users/od/FaceForensicC23/" - ) - parser.add_argument( - '--vid-dir', - type=str, - default="videos" - ) - parser.add_argument( - '--glob-exp', - type=str, - default="*/*.mp4" - ) - - parser.add_argument( - '--rob-dir', - type=str, - default="robustness" - ) - - parser.add_argument( - '--workers', - type=int, - default=1 - ) - parser.add_argument( - '--split', - type=int, - default=1 - ) - parser.add_argument( - '--part', - type=int, - default=1 - ) - - args = parser.parse_args() - - return args - - -def get_distortion_parameter(type, level): - param_dict = dict() # a dict of list - param_dict['CS'] = [0.4, 0.3, 0.2, 0.1, 0.0] # smaller, worse - param_dict['CC'] = [0.85, 0.725, 0.6, 0.475, 0.35] # smaller, worse - param_dict['BW'] = [16, 32, 48, 64, 80] # larger, worse - param_dict['GNC'] = [0.001, 0.002, 0.005, 0.01, 0.05] # larger, worse - param_dict['GB'] = [7, 9, 13, 17, 21] # larger, worse - param_dict['JPEG'] = [2, 3, 4, 5, 6] # larger, worse - param_dict['VC'] = [30, 32, 35, 38, 40] # larger, worse - - # level starts from 1, list starts from 0 - return param_dict[type][level - 1] - - -def get_distortion_function(type): - func_dict = dict() # a dict of function - func_dict['CS'] = color_saturation - func_dict['CC'] = color_contrast - func_dict['BW'] = block_wise - func_dict['GNC'] = gaussian_noise_color - func_dict['GB'] = gaussian_blur - func_dict['JPEG'] = jpeg_compression - func_dict['VC'] = video_compression - - return func_dict[type] - - -def apply_distortion_log(type, level): - if type == 'CS': - print(f'Apply level-{level} color saturation change distortion...') - elif type == 'CC': - print(f'Apply level-{level} color contrast change distortion...') - elif type == 'BW': - print(f'Apply level-{level} local block-wise distortion...') - elif type == 'GNC': - print(f'Apply level-{level} white Gaussian noise in color components ' - 'distortion...') - elif type == 'GB': - print(f'Apply level-{level} Gaussian blur distortion...') - elif type == 'JPEG': - print(f'Apply level-{level} JPEG compression distortion...') - elif type == 'VC': - print(f'Apply level-{level} video compression distortion...') - - -@dataclass -class Params: - src: str - dts_root: str - video_root: str - rob_dir: str - - -def main(params: Params): - src, dts_root, video_root, rob_dir = params.src, params.dts_root, params.video_root, params.rob_dir - - type_list = ['CS', 'CC', 'BW', 'GNC', 'GB', 'JPEG', 'VC'] - level_list = [1, 2, 3, 4, 5] - - if ("FSh" in src): - return - - frame_list = None - - for type in type_list: - for level in level_list: - tgt = os.path.join( - dts_root, - rob_dir, - f"{type}/{level}", - os.path.relpath(src, video_root) - ) - - if (os.path.exists(tgt)): - continue - - if (frame_list is None): - # extract frames - vid = cv2.VideoCapture(src) - fps = vid.get(cv2.CAP_PROP_FPS) - fourcc = int(vid.get(cv2.CAP_PROP_FOURCC)) - w = int(vid.get(cv2.CAP_PROP_FRAME_WIDTH)) - h = int(vid.get(cv2.CAP_PROP_FRAME_HEIGHT)) - frame_count = int(vid.get(cv2.CAP_PROP_FRAME_COUNT)) - print(f'Input video fps: {fps}') - print(f'Input video fourcc: {fourcc}') - print(f'Input video frame size: {w} * {h}') - print(f'Input video frame count: {frame_count}') - print('Extracting frames...') - frame_list = [] - while True: - success, frame = vid.read() - if not success: - break - frame_list.append(frame) - vid.release() - assert len(frame_list) == frame_count - - # create output root - root = os.path.split(tgt)[0] - root = '.' if root == '' else root - os.makedirs(root, exist_ok=True) - - # get distortion parameter - dist_param = get_distortion_parameter(type, level) - - # get distortion function - dist_function = get_distortion_function(type) - - # apply distortion - if type == 'VC': - apply_distortion_log(type, level) - dist_function(src, tgt, dist_param) - else: - - # add distortion to the frame and write to the new video at 'tgt' - writer = cv2.VideoWriter( - f'{tgt[:-4]}_tmp.avi', - cv2.VideoWriter_fourcc('X', 'V', 'I', 'D'), - fps, - (w, h) - ) - - apply_distortion_log(type, level) - - for frame in tqdm(frame_list): - new_frame = dist_function(frame.copy(), dist_param) - writer.write(new_frame) - - writer.release() - - cmd = f'ffmpeg -hide_banner -loglevel error -i {tgt[:-4]}_tmp.avi -y {tgt}' - os.system(cmd) - - if os.path.exists(f'{tgt[:-4]}_tmp.avi'): - os.remove(f'{tgt[:-4]}_tmp.avi') - - print('Finished.') - - -if __name__ == "__main__": - args = parse_args() - - dts_root = args.dts_root - vid_dir = args.vid_dir - rob_dir = args.rob_dir - - video_root = os.path.join(dts_root, vid_dir) - glob_exp = args.glob_exp - - videos = sorted(glob(os.path.join(video_root, glob_exp))) - - part_vids = math.ceil(len(videos) / args.split) - start = (args.part - 1) * part_vids - end = start + part_vids - - videos = videos[start:end] - - worker_vids = math.ceil(len(videos) / args.workers) - - with Pool(args.workers) as p: - for _ in tqdm( - p.imap_unordered(main, [ - Params( - src=src, - dts_root=dts_root, - video_root=video_root, - rob_dir=rob_dir - ) - for src in videos - ]) - ): - continue - - print("done") diff --git a/video/dfd-fcg/model_code/src/preprocess/robustness/phase1_check.py b/video/dfd-fcg/model_code/src/preprocess/robustness/phase1_check.py deleted file mode 100644 index bce6c39168a64803abe0544c12cd790f3cecba2a..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/preprocess/robustness/phase1_check.py +++ /dev/null @@ -1,49 +0,0 @@ -import cv2 -from glob import glob -from tqdm import tqdm -from multiprocessing import Pool - -# VIDEO_DIR = "/scratch1/users/od/CelebDF/Real/videos/*.mp4" -VIDEO_DIR = "/scratch1/users/od/FaceForensicC23/videos/*/*.mp4" -ROB_DIR = "robustness" - -videos = glob(VIDEO_DIR) - -print("Total videos:", len(videos)) - -type_list = ['CS', 'CC', 'BW', 'GNC', 'GB', 'JPEG', 'VC'] -level_list = [1, 2, 3, 4, 5] - - -def runner(video): - unmatch = [] - - cap = cv2.VideoCapture(video) - frames = cap.get(cv2.CAP_PROP_FRAME_COUNT) - cap.release() - for t in type_list: - for l in level_list: - rob_video = video.replace("videos", f"robustness/{t}/{l}") - cap = cv2.VideoCapture(rob_video) - if (not frames == cap.get(cv2.CAP_PROP_FRAME_COUNT)): - unmatch.append(rob_video) - cap.release() - - return unmatch - - -results = [] -with Pool(10) as p: - - for result in tqdm( - p.imap_unordered( - runner, - videos - ), - total=len(videos) - ): - results.extend(result) - - -for i in results: - print(i) diff --git a/video/dfd-fcg/model_code/src/preprocess/robustness/phase2_face_crop_all_videos.py b/video/dfd-fcg/model_code/src/preprocess/robustness/phase2_face_crop_all_videos.py deleted file mode 100755 index a394dfbcc6ccbac79948b51e4c3c10aeb577ba69..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/preprocess/robustness/phase2_face_crop_all_videos.py +++ /dev/null @@ -1,88 +0,0 @@ -import os -import argparse -from glob import glob -from src.preprocess.crop_main_face import main as crop_entrance - - -def parse_args(): - parser = argparse.ArgumentParser(description='Add a distortion to video.') - - parser.add_argument("action", type=str) - - parser.add_argument( - '--dts-root', - type=str, - default="/scratch1/users/od/FaceForensicC23/" - ) - - parser.add_argument( - '--glob-exp', - type=str, - default="*/*/*/*.mp4" - ) - - parser.add_argument( - '--rob-dir', - type=str, - default="robustness" - ) - - parser.add_argument( - '--fd-dir', - type=str, - default="frame_data" - ) - - parser.add_argument( - '--crop-dir', - type=str, - default="cropped_robust" - ) - - parser.add_argument( - '--mean-face', - type=str, - default="./misc/20words_mean_face.npy" - ) - - parser.add_argument( - '--workers', - type=int, - default=1 - ) - - args = parser.parse_args() - - return args - - -if __name__ == "__main__": - args = parse_args() - rob_root = os.path.join(args.dts_root, args.rob_dir) - fd_root = os.path.join(args.dts_root, args.fd_dir) - - type_list = ['CS', 'CC', 'BW', 'GNC', 'GB', 'JPEG', 'VC'] - level_list = ['1', '2', '3', '4', '5'] - - if args.action == "setup": - for t in type_list: - for l in level_list: - p1 = os.path.join(fd_root) - p2 = os.path.join(fd_root, t) - os.makedirs(p2, exist_ok=True) - p2 = os.path.join(p2, l) - os.system(f"ln -s {p1} {p2}") - elif args.action == "run": - crop_entrance( - [ - "--root-dir", args.dts_root, - "--video-dir", args.rob_dir, - "--mean-face", args.mean_face, - "--glob-exp", args.glob_exp, - "--crop-dir", args.crop_dir - ] - ) - elif args.action == "clean": - for t in type_list: - p = os.path.join(fd_root, t) - os.system(f"rm -rf {p}") diff --git a/video/dfd-fcg/model_code/src/preprocess/robustness/readme.md b/video/dfd-fcg/model_code/src/preprocess/robustness/readme.md deleted file mode 100755 index f3fd750f88829a659868715b89c9083072231612..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/preprocess/robustness/readme.md +++ /dev/null @@ -1 +0,0 @@ -We borrow two modules from [DeeperForensics](https://github.com/EndlessSora/DeeperForensics-1.0/tree/master/perturbation) to apply all perturbations on the video dataset, please refer to the repo for more detail about the distortions and their configurations. \ No newline at end of file diff --git a/video/dfd-fcg/model_code/src/preprocess/show_frame_landmark_bbox.py b/video/dfd-fcg/model_code/src/preprocess/show_frame_landmark_bbox.py deleted file mode 100755 index b024ea585adea7fd25c7753991ac54e40e682c41..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/preprocess/show_frame_landmark_bbox.py +++ /dev/null @@ -1,47 +0,0 @@ -# %% -import cv2 -import pickle -import matplotlib.pyplot as plt -from src.preprocess.crop_main_face import get_video_frame_data, get_video_frames - - -def get_video_frames(video_path): - cap = cv2.VideoCapture(video_path) - fps = round(cap.get(cv2.CAP_PROP_FPS)) - frames = [] - while cap.isOpened(): - ret, frame = cap.read() - if not ret: - break - frames.append(frame.copy()) - cap.release() - return fps, frames - - -def get_video_frame_data(fdata_path): - with open(fdata_path, "rb") as f: - frame_data = pickle.load(f) - frame_landmarks = [frame["landmarks"] if not frame is None else [] for frame in frame_data] - frame_bboxes = [frame["bboxes"] if not frame is None else [] for frame in frame_data] - - assert len(frame_landmarks) == len(frame_bboxes) - - if (len(frame_bboxes[0][0].shape) == 1): - frame_bboxes = [[bbox.reshape((2, 2)) for bbox in bboxes]for bboxes in frame_bboxes] - - return frame_landmarks, frame_bboxes - - -video_path = "/home/od/stock/FaceForensicC23/videos/real/950.mp4" -fdata_path = "/home/od/stock/FaceForensicC23/frame_data/real/950.pickle" - -fps, frames = get_video_frames(video_path) -frame_landmarks, frame_bboxes = get_video_frame_data(fdata_path) - -import random - -idx = random.randrange(0, len(frames)) -plt.imshow(cv2.cvtColor(frames[idx], cv2.COLOR_BGR2RGB)) -for lm, bbox in zip(frame_landmarks[idx], frame_bboxes[idx]): - plt.scatter(lm[:, 0], lm[:, 1], s=1, c="r") - plt.scatter(bbox[:, 0], bbox[:, 1], s=1, c="g") diff --git a/video/dfd-fcg/model_code/src/utility/builtin.py b/video/dfd-fcg/model_code/src/utility/builtin.py deleted file mode 100755 index 2afe537d7ed639b7e9374e5cdfa55b626e2be5a0..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/utility/builtin.py +++ /dev/null @@ -1,95 +0,0 @@ -import os -import torch -import lightning as pl - -from typing import Optional -from lightning.fabric.utilities.types import _PATH -from lightning.pytorch.trainer.trainer import Trainer -from lightning.pytorch.callbacks import ModelCheckpoint -from lightning.pytorch.loggers.tensorboard import TensorBoardLogger -from lightning.pytorch.cli import LightningCLI, SaveConfigCallback -from lightning.pytorch.callbacks import EarlyStopping, LearningRateMonitor, RichProgressBar - - -class ODLightningCLI(LightningCLI): - def add_arguments_to_parser(self, parser): - parser.add_lightning_class_args(EarlyStopping, "early_stop") - parser.set_defaults( - { - "early_stop.patience": 10, - } - ) - parser.add_lightning_class_args(ODModelCheckpoint, "checkpoint") - parser.set_defaults( - { - 'checkpoint.save_last': True, - 'checkpoint.save_top_k': 1, - } - ) - - parser.add_lightning_class_args(LearningRateMonitor, "lr_monitor") - parser.set_defaults( - { - 'lr_monitor.log_momentum': True, - 'lr_monitor.logging_interval': 'step' - } - ) - - parser.add_lightning_class_args(RichProgressBar, "progress_bar") - - parser.add_optimizer_args(torch.optim.AdamW) - parser.add_lr_scheduler_args(torch.optim.lr_scheduler.LinearLR) - - parser.add_argument("--notes", default="") - parser.add_argument("--ckpt_path", default=None) - parser.add_argument("--ckpt_mode", default="cont") - - -class ODTrainer(Trainer): - # rewrite the log_dir property to sync with logger configurations. - @property - def log_dir(self) -> Optional[str]: - """The directory for the current experiment. Use this to save images to, etc... - - .. note:: You must call this on all processes. Failing to do so will cause your program to stall forever. - - .. code-block:: python - - def training_step(self, batch, batch_idx): - img = ... - save_img(img, self.trainer.log_dir) - """ - if len(self.loggers) > 0: - if not isinstance(self.loggers[0], TensorBoardLogger): - dirpath = self.loggers[0].save_dir - else: - dirpath = self.loggers[0].log_dir - name = self.loggers[0].name - version = self.loggers[0].version - version = version if isinstance(version, str) else f"version_{version}" - dirpath = os.path.join(dirpath, str(name), version) - else: - dirpath = self.default_root_dir - - dirpath = self.strategy.broadcast(dirpath) - return dirpath - - -class ODModelCheckpoint(ModelCheckpoint): - # force overwrite the name mangling for checkpoint directory resolution to sync with the trainer's log directory. - def _ModelCheckpoint__resolve_ckpt_dir(self, trainer: "pl.Trainer") -> _PATH: - """Determines model checkpoint save directory at runtime. Reference attributes from the trainer's logger to - determine where to save checkpoints. The path for saving weights is set in this priority: - - 1. The ``ModelCheckpoint``'s ``dirpath`` if passed in - 2. The ``Logger``'s ``log_dir`` if the trainer has loggers - 3. The ``Trainer``'s ``default_root_dir`` if the trainer has no loggers - - The path gets extended with subdirectory "checkpoints". - - """ - if self.dirpath is not None: - # short circuit if dirpath was passed to ModelCheckpoint - return self.dirpath - - return os.path.join(trainer.log_dir, "checkpoints") diff --git a/video/dfd-fcg/model_code/src/utility/loss.py b/video/dfd-fcg/model_code/src/utility/loss.py deleted file mode 100755 index 8c1f94755ee452ecedf7dd8c842fa21004272d62..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/utility/loss.py +++ /dev/null @@ -1,33 +0,0 @@ -import torch - - -def focal_loss(input, target, gamma=2, weight=None): - # Code based on: https://github.com/clcarwin/focal_loss_pytorch/blob/master/focalloss.py - assert len(input.shape) == 2 - assert len(target.shape) == 1 - # input.shape = N,C - # target.shape = N - target = target.unsqueeze(1) - - logpt = torch.log_softmax(input, dim=-1) - logpt = torch.clamp(logpt, max=-0.01, min=-5) - logpt = logpt.gather(1, target) - logpt = logpt.view(-1) - pt = torch.tensor(logpt.data.exp()) - - if (not weight is None): - # target.shape = N, 1 - weight = torch.tensor( - weight, - device=input.device, - dtype=input.dtype - ) - at = weight.gather(0, target.data.view(-1)) - else: - at = 1 - - logpt = logpt * at - - loss = -1 * (1 - pt)**gamma * logpt - - return loss diff --git a/video/dfd-fcg/model_code/src/utility/visualize.py b/video/dfd-fcg/model_code/src/utility/visualize.py deleted file mode 100755 index 0de2259c079c6c017cc7686208a125c79a2e41c9..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/model_code/src/utility/visualize.py +++ /dev/null @@ -1,23 +0,0 @@ -from os import path, makedirs -import matplotlib.pyplot as plt - - -def dataset_entity_visualize(entity_data, normalized=False, unit=2, save=True, base_dir="./misc/extern/test/", save_prefix=""): - if save: - makedirs(base_dir, exist_ok=True) - clips = entity_data['clips'] - idx = entity_data['idx'] - df_type = entity_data['df_type'] - vid_path = entity_data['vid_path'] - num_clips, num_frames = clips.shape[:2] - plt.figure(figsize=(unit * num_frames * 0.9, unit * num_clips), layout="constrained") - plt.suptitle(f"#{idx},{df_type}\n{vid_path}", fontsize=unit * 9) - for i, clip in enumerate(clips): - plt.subplot(num_clips, 1, i + 1) - plt.gca().axis('off') - plt.imshow(clip.permute(2, 0, 3, 1).flatten(1, 2).numpy()) - if save: - plt.savefig(path.join(base_dir, f"{save_prefix}{idx}.jpg")) - else: - plt.show() - plt.close() diff --git a/video/dfd-fcg/requirements.txt b/video/dfd-fcg/requirements.txt deleted file mode 100644 index 5cfd49618f01a07e4bc411fb2668a4308d67c823..0000000000000000000000000000000000000000 --- a/video/dfd-fcg/requirements.txt +++ /dev/null @@ -1,17 +0,0 @@ -fastapi -uvicorn -pydantic -python-multipart -torch>=2.0.0 -torchvision>=0.15.0 -facenet-pytorch -opencv-python-headless -numpy<2.0.0 -Pillow -open-clip-torch -lightning>=2.0.0 -torchmetrics -jsonargparse[omegaconf] -omegaconf -ftfy -regex diff --git a/video/fake-stormer/Dockerfile b/video/fake-stormer/Dockerfile deleted file mode 100644 index 133b87580fb3281d9160246849fdd9967edd73ca..0000000000000000000000000000000000000000 --- a/video/fake-stormer/Dockerfile +++ /dev/null @@ -1,44 +0,0 @@ -FROM pytorch/pytorch:1.13.1-cuda11.6-cudnn8-devel - -ENV DEBIAN_FRONTEND=noninteractive - -WORKDIR /app - -# Fix potential GPG key issues on older CUDA base images -RUN (apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub 2>/dev/null || true) && \ - apt-get update && apt-get install -y \ - libgl1 \ - libglib2.0-0 \ - libsm6 \ - libxext6 \ - libxrender-dev \ - libopencv-dev \ - build-essential \ - git \ - && rm -rf /var/lib/apt/lists/* - -# Copy requirements and install -COPY requirements.txt . -RUN pip install --no-cache-dir -r requirements.txt - -# Create logs directory -RUN mkdir -p logs - -# Copy model code and app -COPY model_code/ ./model_code/ -COPY app.py . - -# Environment variables -ENV MODEL_PORT=7001 -ENV PRELOAD_MODEL=false - -# Expose port -EXPOSE 7001 - -# Drop root privileges -RUN adduser --disabled-password --gecos '' appuser && \ - chown -R appuser:appuser /app/logs -USER appuser - -# Run the service -CMD ["python", "app.py"] diff --git a/video/fake-stormer/app.py b/video/fake-stormer/app.py deleted file mode 100644 index b762e5c01e4bbf916d81288e15092e7240d9a1ea..0000000000000000000000000000000000000000 --- a/video/fake-stormer/app.py +++ /dev/null @@ -1,311 +0,0 @@ -"""FakeSTormer deepfake video detection service. - -Wraps the FakeSTormer (ICCV 2025) video deepfake detection model -with a FastAPI endpoint. -""" - -import base64 -import gc -import logging -import os -import platform -import sys -import tempfile -import time -from typing import Any, Dict, List - -import cv2 -import numpy as np -import torch -import uvicorn -from fastapi import FastAPI, HTTPException -from PIL import Image -from pydantic import BaseModel, ConfigDict, Field - -# Add model_code to path to allow imports -sys.path.insert(0, os.path.join(os.getcwd(), "model_code")) - -from configs.get_config import load_config -from models import MODELS, build_model, load_pretrained -from package_utils.transform import final_transform - -logging.basicConfig(level=logging.INFO) -logger = logging.getLogger(__name__) - -MODEL_PORT = int(os.environ.get("MODEL_PORT", 7001)) -PRELOAD_MODEL = os.environ.get("PRELOAD_MODEL", "false").lower() == "true" -CONFIG_PATH = os.environ.get( - "CONFIG_PATH", "model_code/configs/temporal/FakeSFormer_base_c23.yaml" -) -WEIGHTS_PATH = os.environ.get( - "WEIGHTS_PATH", - "model_code/weights/TopDownDetector_C23_ViTBase224_ST_hm100_tempLOC0.2_4SBI_SAM_mp0.01_temp2_0vidAug_0.35_temp_normlms_normREAL_model_best.pth", -) - - -def _get_device(): - """Select optimal device: MPS (Apple) > CUDA (NVIDIA) > CPU.""" - override = os.environ.get("DEEPSAFE_DEVICE", "").strip().lower() - if override == "cpu": - return torch.device("cpu") - if override == "cuda" and torch.cuda.is_available(): - return torch.device("cuda") - if ( - override == "mps" - and hasattr(torch.backends, "mps") - and torch.backends.mps.is_available() - ): - return torch.device("mps") - if override: - pass # Invalid override, fall through to auto-detect - if ( - platform.system() == "Darwin" - and hasattr(torch.backends, "mps") - and torch.backends.mps.is_available() - ): - return torch.device("mps") - if torch.cuda.is_available(): - return torch.device("cuda") - return torch.device("cpu") - - -# Global model references -_model = None -_cfg = None -_transforms = None -_device = None - - -def _load_models(): - """Load FakeSTormer model.""" - global _model, _cfg, _transforms, _device # noqa: F824 - - if _model is not None: - return - - _device = _get_device() - - if _device.type == "cuda": - torch.backends.cudnn.benchmark = True - if hasattr(torch, "set_float32_matmul_precision"): - torch.set_float32_matmul_precision("high") - - if _device.type == "cuda": - logger.info( - "Device: cuda (%s, %.1f GB VRAM)", - torch.cuda.get_device_name(0), - torch.cuda.get_device_properties(0).total_memory / 1024**3, - ) - else: - logger.warning( - "Device: %s (no CUDA available -- check nvidia-container-toolkit)", - _device, - ) - - logger.info(f"Loading FakeSTormer model on {_device}...") - - try: - # Load config - _cfg = load_config(CONFIG_PATH) - - # Build model - _model = build_model(_cfg.MODEL, MODELS).to(torch.float) - - # Load weights - if not os.path.exists(WEIGHTS_PATH): - logger.error(f"Weights file not found at {WEIGHTS_PATH}") - # Use placeholder if weights missing? User asked for as true as possible results, - # so we should fail if weights are missing, but let's see. - raise FileNotFoundError(f"Weights missing: {WEIGHTS_PATH}") - - logger.info(f"Loading weight ... {WEIGHTS_PATH}") - _model = load_pretrained(_model, WEIGHTS_PATH) - _model = _model.to(_device) - _model.eval() - - # Setup transforms - _transforms = final_transform(_cfg.DATASET) - - logger.info("FakeSTormer model loaded successfully.") - - except Exception as e: - logger.error(f"Failed to load FakeSTormer model: {e}") - raise e - - -def _is_model_loaded(): - return _model is not None - - -app = FastAPI( - title="FakeSTormer Detection Service", - description="Vulnerability-Aware Spatio-Temporal Learning for Generalizable Deepfake Video Detection", - version="1.0.0", -) - - -class PredictRequest(BaseModel): - video_data: str # Base64 encoded video - threshold: float = 0.5 - - -class PredictResponse(BaseModel): - model_config = ConfigDict(populate_by_name=True) - model: str = "fakestormer" - probability: float - prediction: int - class_name: str = Field(..., alias="class") - inference_time: float - metadata: Dict[str, Any] - - -@app.on_event("startup") -async def startup_event(): - if PRELOAD_MODEL: - _load_models() - - -@app.get("/") -def root(): - return { - "service": "fakestormer", - "port": MODEL_PORT, - "model_loaded": _is_model_loaded(), - "device": str(_device) if _device else "unknown", - } - - -def _gpu_health_info() -> dict: - """Return GPU metrics for the health endpoint.""" - if torch.cuda.is_available() and _device is not None and _device.type == "cuda": - return { - "gpu_name": torch.cuda.get_device_name(0), - "vram_used_mb": round(torch.cuda.memory_allocated(0) / 1024**2), - "vram_total_mb": round( - torch.cuda.get_device_properties(0).total_memory / 1024**2 - ), - } - return {} - - -@app.get("/health") -def health(): - return { - "status": "ok", - "model_loaded": _is_model_loaded(), - "weights_exist": os.path.exists(WEIGHTS_PATH), - "device": str(_device) if _device else "cpu", - **_gpu_health_info(), - } - - -def extract_frames(video_path: str, num_frames: int = 4) -> List[Image.Image]: - """Extract frames from video file uniformly.""" - cap = cv2.VideoCapture(video_path) - total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) - - if total_frames <= 0: - cap.release() - return [] - - # Get indices for uniform sampling - indices = np.linspace(0, total_frames - 1, num_frames, dtype=int) - - frames = [] - for idx in indices: - cap.set(cv2.CAP_PROP_POS_FRAMES, idx) - ret, frame = cap.read() - if ret: - # Convert BGR to RGB - frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) - # Crop 15 pixels from each side as in test.py - H, W, _ = frame.shape - if H > 30 and W > 30: - frame = frame[15 : H - 15, 15 : W - 15] - frames.append(Image.fromarray(frame)) - - cap.release() - - # Pad if not enough frames - while len(frames) < num_frames and len(frames) > 0: - frames.append(frames[-1]) - - return frames - - -@app.post("/predict", response_model=PredictResponse) -async def predict(request: PredictRequest): - global _model, _cfg, _transforms, _device # noqa: F824 - - if not _is_model_loaded(): - _load_models() - - start_time = time.time() - - # Create a temporary file to save the video - with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as tmp_video: - try: - video_bytes = base64.b64decode(request.video_data) - tmp_video.write(video_bytes) - tmp_video_path = tmp_video.name - except Exception as e: - raise HTTPException(status_code=400, detail=f"Failed to decode video: {e}") - - try: - num_frames = _cfg.DATASET.DATA.SAMPLES_PER_VIDEO.NUM_FRAMES or 4 - frames = extract_frames(tmp_video_path, num_frames) - - if not frames: - raise HTTPException( - status_code=500, detail="Failed to extract frames from video." - ) - - # Preprocess frames - transformed_imgs = [] - image_size = _cfg.DATASET.IMAGE_SIZE # [224, 224] - - for frame in frames: - img_resize = frame.resize((int(image_size[0]), int(image_size[1]))) - img_resize = np.array(img_resize) / 255.0 - img_tensor = _transforms(img_resize).to(torch.float) - transformed_imgs.append(img_tensor.unsqueeze(0)) - - # Stack and prepare for model [B, T, C, H, W] - input_tensor = torch.cat(transformed_imgs, 0) # [T, C, H, W] - input_tensor = input_tensor.to(_device) - input_tensor = input_tensor.unsqueeze(0) # [1, T, C, H, W] - - # FakeSTormer model expects [1, C, T, H, W] - input_tensor = input_tensor.transpose(1, 2) # [1, C, T, H, W] - - with torch.no_grad(): - outputs = _model(input_tensor) - - if isinstance(outputs, list): - outputs = outputs[0] - - prob = outputs["cls"].sigmoid().cpu().item() - - prediction = 1 if prob >= request.threshold else 0 - class_name = "fake" if prediction == 1 else "real" - - return PredictResponse( - probability=float(prob), - prediction=prediction, - class_name=class_name, - inference_time=time.time() - start_time, - metadata={"frames_extracted": len(frames), "device": str(_device)}, - ) - - except Exception as e: - logger.exception("Error during FakeSTormer prediction") - raise HTTPException(status_code=500, detail=str(e)) - finally: - # Cleanup temporary file - if os.path.exists(tmp_video_path): - os.remove(tmp_video_path) - gc.collect() - - -if __name__ == "__main__": - uvicorn.run(app, host="0.0.0.0", port=MODEL_PORT) diff --git a/video/fake-stormer/model_code/LICENSE b/video/fake-stormer/model_code/LICENSE deleted file mode 100644 index a251c2be404e71aadcf03faaf2310ae89d7f7f9c..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/LICENSE +++ /dev/null @@ -1,14 +0,0 @@ -SnT academic license -(based on the MIT license with academic limitations) - -Copyright 2025 University of Luxembourg - -Permission is hereby granted, free of charge, to any academic and research institution and researcher obtaining a copy of this software, all derivative works and associated documentation files (the “Software”), to deal in the Software for academic research and development, testing, validation and academic or scientific research purposes only, including without limitation the rights to use, copy, modify, merge, and/or publish copies of the Software, and to permit persons to whom the Software are furnished to do so for such purposes only, subject to the following conditions: - -All copies or substantial portions of the Software shall include the above copyright notice and this permission notice. - -All copies of the Software shall be distributed under the terms of this license only. - -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Any other use of the Software requires a separate license agreement. Should you be interested in making other uses of the Software, please send an email to snt-tto@uni.lu. diff --git a/video/fake-stormer/model_code/NOTICE b/video/fake-stormer/model_code/NOTICE deleted file mode 100644 index 0565e669ae2d8594c7fa898d23e24070755d466c..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/NOTICE +++ /dev/null @@ -1,8 +0,0 @@ -FakeSTormer is © 2024 - 2025 University of Luxembourg - -Authors: -- Dat NGUYEN -- Marcella ASTRID -- Anis KACEM -- Enjie GHORBEL -- Djamila AOUADA diff --git a/video/fake-stormer/model_code/README.md b/video/fake-stormer/model_code/README.md deleted file mode 100644 index 060383b0db8c6e938a49a5d518ba4acf019b2548..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/README.md +++ /dev/null @@ -1,187 +0,0 @@ -# [ICCV2025] [FakeSTormer] Vulnerability-Aware Spatio-Temporal Learning for Generalizable Deepfake Video Detection - -![alt text](./demo/method.png?raw=true) -This is an official implementation of FakeSTormer! [[📜Paper](https://openaccess.thecvf.com/content/ICCV2025/papers/Nguyen_Vulnerability-Aware_Spatio-Temporal_Learning_for_Generalizable_Deepfake_Video_Detection_ICCV_2025_paper.pdf)] - - -## Updates -- [x] 26/11/2025:*Official release of code (v1) and pretrained weights 🌈.* -- [x] 08/07/2025: *First version pre-released for this open source code 🌱.* -- [x] 26/06/2025: *FakeSTormer has been accepted to ICCV2025 🎉.* - - -## Abstract -Detecting deepfake videos is highly challenging given the complexity of characterizing spatio-temporal artifacts. Most existing methods rely on binary classifiers trained using real and fake image sequences, therefore hindering their generalization capabilities to unseen generation methods. Moreover, with the constant progress in generative Artificial Intelligence (AI), deepfake artifacts are becoming imperceptible at both the spatial and the temporal levels, making them extremely difficult to capture. To address these issues, we propose a fine-grained deepfake video detection approach called FakeSTormer that enforces the modeling of subtle spatio-temporal inconsistencies while avoiding overfitting. Specifically, we introduce a multi-task learning framework that incorporates two auxiliary branches for explicitly attending artifact-prone spatial and temporal regions. Additionally, we propose a video-level data synthesis strategy that generates pseudo-fake videos with subtle spatio-temporal artifacts, providing high-quality samples and hand-free annotations for our additional branches. Extensive experiments on several challenging benchmarks demonstrate the superiority of our approach compared to recent state-of-the-art methods. - - -## Main Results -Results on 6 datasets ([CDF2](https://github.com/yuezunli/celeb-deepfakeforensics), [DFW](https://github.com/deepfakeinthewild/deepfake-in-the-wild), [DFD](https://blog.research.google/2019/09/contributing-data-to-deepfake-detection.html), [DFDC, DFDCP](https://ai.meta.com/datasets/dfdc/), and [DiffSwap](https://openaccess.thecvf.com/content/CVPR2023/papers/Zhao_DiffSwap_High-Fidelity_and_Controllable_Face_Swapping_via_3D-Aware_Masked_Diffusion_CVPR_2023_paper.pdf)) under cross-dataset evaluation setting reported by AUC (%) at video-level. - -| | CDF2 | DFW | DFD | DFDC | DFDCP | DiffSwap | -|--|--------|------------|------------|------------|---------|-----------| -|
Compression
c23
c0
|
AUC
92.4
96.5
|
AUC
74.2
76.3
|
AUC
98.5
98.9
|
AUC
74.6
77.6
|
AUC
90.0
94.1
|
AUC
96.9
97.7
- - -## Recommended Environment -*For experimental purposes, we encourage the installation of the following libraries. Both Conda or Python virtual env should work.* - -* CUDA: 11.4 -* [Python](https://www.python.org/): >= 3.8.x -* [PyTorch](https://pytorch.org/get-started/previous-versions/): 1.8.0 -* [TensorboardX](https://github.com/lanpa/tensorboardX): 2.5.1 -* [ImgAug](https://github.com/aleju/imgaug): 0.4.0 -* [Scikit-image](https://scikit-image.org/): 0.17.2 -* [Torchvision](https://pytorch.org/vision/stable/index.html): 0.9.0 -* [Albumentations](https://albumentations.ai/): 1.1.0 -* [mmcv](https://github.com/open-mmlab/mmcv): 1.6.1 -* [natsort](https://pypi.org/project/natsort/): 8.4.0 - - - -## Pre-trained Models -* 📌 *The pre-trained weights of FakeSTormer can be found [here](https://www.dropbox.com/scl/fo/elk2szqf0du4l6zm5job9/AAdVmNH--6ywHBZGNQJlR5o?rlkey=j8xesf2fu4ahxdw99w5ndrkb2&st=fe6drzpx&dl=0)* - - -## Docker Build (Optional) -*We further provide an optional Docker file that can be used to build a working env with Docker. More detailed steps can be found [here](dockerfiles/README.md).* - -1. Install docker to the system (skip the step if docker has already been installed): - ```shell - sudo apt install docker - ``` -2. To start your docker environment, please go to the folder **dockerfiles**: - ```shell - cd dockerfiles - ``` -3. Create a docker image (you can put any name you want): - ```shell - docker build --tag 'fakestormer' . - ``` - - -## Quickstart -1. **Preparation** - - 1. ***Prepare environment*** - - Installing main packages as the recommended environment. *Note that we recommend building mmcv from source as below.* - > git clone https://github.com/open-mmlab/mmcv.git \ - cd mmcv \ - git checkout v1.6.1 \ - MMCV_WITH_OPS=1 pip install -e . - - 2. ***Prepare dataset*** - - 1. Downloading [FF++](https://github.com/ondyari/FaceForensics) *Original* dataset for training data preparation. Following the original split convention, it is firstly used to randomly extract frames and facial crops: - ``` - python package_utils/images_crop.py -d {dataset} \ - -c {compression} \ - -n {num_frames} \ - -t {task} - ``` - (*This script can also be utilized for cropping faces in other datasets such as [CDF2](https://github.com/yuezunli/celeb-deepfakeforensics), [DFD](https://blog.research.google/2019/09/contributing-data-to-deepfake-detection.html), [DFDCP, DFDC](https://ai.meta.com/datasets/dfdc/) for cross-evaluation test. You do not need to run crop for [DFW](https://github.com/deepfakeinthewild/deepfake-in-the-wild) as the data is already preprocessed*). - - | Parameter | Value | Definition | - | --- | --- | --- | - | -d | Subfolder in each dataset. For example: *['Face2Face','Deepfakes','FaceSwap','NeuralTextures', ...]*| You can use one of those datasets.| - | -c | *['raw','c23','c40']*| You can use one of those compressions| - | -n | *256* | Number of frames (*default* 32 for val/test and 256 for train) | - | -t | *['train', 'val', 'test']* | Default train| - - These faces cropped are saved for online pseudo-fake generation in the training process, following the data structure below: - - ``` - ROOT = '/data/deepfake_cluster/datasets_df' - └── Celeb-DFv2 - └──... - └── FF++ - └── c0 - └── c23 - ├── test - │   └── videos - │   └── Deepfakes - | ├── 000_003 - | ├── 044_945 - | ├── 138_142 - | ├── ... - │   ├── Face2Face - │   ├── FaceSwap - │   ├── NeuralTextures - │   └── original - | └── frames - ├── train - │   └── videos - │   └── aligned - | ├── 001 - | ├── 002 - | ├── ... - │   └── original - | ├── 001 - | ├── 002 - | ├── ... - | └── frames - └── val - └── videos - ├── aligned - └── original - └── frames - └── c40 - ``` - - 2. Downloading **Dlib** [[81]](https://github.com/codeniko/shape_predictor_81_face_landmarks) facial landmarks detector pretrained and place into ```/pretrained/``` for *SBI* synthesis. - - 3. Landmarks detection. After completing the following script running, a file that stores metadata information of the data is saved at ```processed_data/c23/{SPLIT}_FaceForensics_videos_.json```. - ``` - python package_utils/geo_landmarks_extraction.py \ - --config configs/data_preprocessing_c23.yaml \ - --extract_landmarks - ``` - -2. **Training script** - - We offer a number of config files for different compression levels of training data. For *c23*, opening ```configs/temporal/FakeSTormer_base_c23.yaml```, please make sure you set ```TRAIN: True``` and ```FROM_FILE: True``` and run: - ``` - .scripts/fakestormer_sbi.sh - ``` - - Otherwise, with *[c0, c40]*, the config file is ```configs/temporal/FakeSTormer_base_[c0, c40].yaml```. You can also find other configs for other network architectures in the ```configs/``` folder. - - -3. **Testing script** - - Opening ```configs/temporal/FakeSTormer_base_c23.yaml```, with ```subtask: eval``` in the *test* section, we support evaluation mode, please turn off ```TRAIN: False``` and ```FROM_FILE: False``` and run: - ``` - .scripts/test_fakestormer.sh - ``` - For others (.e.g., data compression levels, network architectures), please change the path of the corresponding config file. - - > ⚠️ *Please make sure you set the correct path to your downloaded pre-trained weights in the config files.* - - > ℹ️ *Flip test can be used by setting ```flip_test: True```* - - > ℹ️ *The mode for single video inference is also provided, please set ```sub_task: test_vid``` and pass a video path as an argument in test.py* - - -## Contact -Please contact dat.nguyen@uni.lu. Any questions or discussions are welcomed! - - -## License -This software is © University of Luxembourg and is licensed under the snt academic license. See [LICENSE](LICENSE) - - -## Acknowledge -We acknowledge the excellent implementation from [OpenMMLab](https://github.com/open-mmlab) ([mmengine](https://github.com/open-mmlab/mmengine), [mmcv](https://github.com/open-mmlab/mmcv)), [SBI](https://github.com/mapooon/SelfBlendedImages), and [LAA-Net](https://github.com/10Ring/LAA-Net). - - -## Citation -Please kindly consider citing our papers in your publications. -``` -@inproceedings{nguyen2025vulnerability, - title={Vulnerability-Aware Spatio-Temporal Learning for Generalizable Deepfake Video Detection}, - author={Nguyen, Dat and Astrid, Marcella and Kacem, Anis and Ghorbel, Enjie and Aouada, Djamila}, - booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision}, - pages={10786--10796}, - year={2025} -} -``` diff --git a/video/fake-stormer/model_code/Third_Party_License_Notice b/video/fake-stormer/model_code/Third_Party_License_Notice deleted file mode 100644 index 728074becf0d25831d1868a35adc309af6415ae4..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/Third_Party_License_Notice +++ /dev/null @@ -1,1606 +0,0 @@ -FakeSTormer is © 2024 - 2025 University of Luxembourg -Developed by: Dat Nguyen at CVI2/SnT - -FakeSTormer is licensed under the SnT academic license (see #LICENSE) - -FakeSTormer includes the following components: - -From PyTorch: - -Copyright (c) 2016- Facebook, Inc (Adam Paszke) -Copyright (c) 2014- Facebook, Inc (Soumith Chintala) -Copyright (c) 2011-2014 Idiap Research Institute (Ronan Collobert) -Copyright (c) 2012-2014 Deepmind Technologies (Koray Kavukcuoglu) -Copyright (c) 2011-2012 NEC Laboratories America (Koray Kavukcuoglu) -Copyright (c) 2011-2013 NYU (Clement Farabet) -Copyright (c) 2006-2010 NEC Laboratories America (Ronan Collobert, Leon Bottou, Iain Melvin, Jason Weston) -Copyright (c) 2006 Idiap Research Institute (Samy Bengio) -Copyright (c) 2001-2004 Idiap Research Institute (Ronan Collobert, Samy Bengio, Johnny Mariethoz) - - -From Caffe2: - -Copyright (c) 2016-present, Facebook Inc. All rights reserved. - -All contributions by Facebook: -Copyright (c) 2016 Facebook Inc. - -All contributions by Google: -Copyright (c) 2015 Google Inc. -All rights reserved. - -All contributions by Yangqing Jia: -Copyright (c) 2015 Yangqing Jia -All rights reserved. - -All contributions by Kakao Brain: -Copyright 2019-2020 Kakao Brain - -All contributions by Cruise LLC: -Copyright (c) 2022 Cruise LLC. -All rights reserved. - -All contributions from Caffe: -Copyright(c) 2013, 2014, 2015, the respective contributors -All rights reserved. - -All other contributions: -Copyright(c) 2015, 2016 the respective contributors -All rights reserved. - -Caffe2 uses a copyright model similar to Caffe: each contributor holds -copyright over their contributions to Caffe2. The project versioning records -all such contribution and copyright details. If a contributor wants to further -mark their specific copyright on a particular contribution, they should -indicate their copyright solely in the commit message of the change when it is -committed. - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -3. Neither the names of Facebook, Deepmind Technologies, NYU, NEC Laboratories America - and IDIAP Research Institute nor the names of its contributors may be - used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - - -From TorchVision: - -BSD 3-Clause License - -Copyright (c) Soumith Chintala 2016, -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -From Tensorboard: - -Copyright 2017 The TensorFlow Authors. All rights reserved. - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2017, The TensorFlow Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -From TensorboardX: - -MIT License - -Copyright (c) 2017 Tzu-Wei Huang - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -From ImgAug: - -The MIT License (MIT) - -Copyright (c) 2015 aleju - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -From Torchcam: - -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -From Dlib: - -Boost Software License - Version 1.0 - August 17th, 2003 - -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: - -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - - -From Matplotlib: - -License agreement for matplotlib versions 1.3.0 and later -========================================================= - -1. This LICENSE AGREEMENT is between the Matplotlib Development Team -("MDT"), and the Individual or Organization ("Licensee") accessing and -otherwise using matplotlib software in source or binary form and its -associated documentation. - -2. Subject to the terms and conditions of this License Agreement, MDT -hereby grants Licensee a nonexclusive, royalty-free, world-wide license -to reproduce, analyze, test, perform and/or display publicly, prepare -derivative works, distribute, and otherwise use matplotlib -alone or in any derivative version, provided, however, that MDT's -License Agreement and MDT's notice of copyright, i.e., "Copyright (c) -2012- Matplotlib Development Team; All Rights Reserved" are retained in -matplotlib alone or in any derivative version prepared by -Licensee. - -3. In the event Licensee prepares a derivative work that is based on or -incorporates matplotlib or any part thereof, and wants to -make the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to matplotlib . - -4. MDT is making matplotlib available to Licensee on an "AS -IS" basis. MDT MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, MDT MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF MATPLOTLIB -WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. - -5. MDT SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF MATPLOTLIB - FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR -LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING -MATPLOTLIB , OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF -THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -7. Nothing in this License Agreement shall be deemed to create any -relationship of agency, partnership, or joint venture between MDT and -Licensee. This License Agreement does not grant permission to use MDT -trademarks or trade name in a trademark sense to endorse or promote -products or services of Licensee, or any third party. - -8. By copying, installing or otherwise using matplotlib , -Licensee agrees to be bound by the terms and conditions of this License -Agreement. - -License agreement for matplotlib versions prior to 1.3.0 -======================================================== - -1. This LICENSE AGREEMENT is between John D. Hunter ("JDH"), and the -Individual or Organization ("Licensee") accessing and otherwise using -matplotlib software in source or binary form and its associated -documentation. - -2. Subject to the terms and conditions of this License Agreement, JDH -hereby grants Licensee a nonexclusive, royalty-free, world-wide license -to reproduce, analyze, test, perform and/or display publicly, prepare -derivative works, distribute, and otherwise use matplotlib -alone or in any derivative version, provided, however, that JDH's -License Agreement and JDH's notice of copyright, i.e., "Copyright (c) -2002-2011 John D. Hunter; All Rights Reserved" are retained in -matplotlib alone or in any derivative version prepared by -Licensee. - -3. In the event Licensee prepares a derivative work that is based on or -incorporates matplotlib or any part thereof, and wants to -make the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to matplotlib. - -4. JDH is making matplotlib available to Licensee on an "AS -IS" basis. JDH MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, JDH MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF MATPLOTLIB -WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. - -5. JDH SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF MATPLOTLIB - FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR -LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING -MATPLOTLIB , OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF -THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -7. Nothing in this License Agreement shall be deemed to create any -relationship of agency, partnership, or joint venture between JDH and -Licensee. This License Agreement does not grant permission to use JDH -trademarks or trade name in a trademark sense to endorse or promote -products or services of Licensee, or any third party. - -8. By copying, installing or otherwise using matplotlib, -Licensee agrees to be bound by the terms and conditions of this License -Agreement. - - -From tqdm: - -`tqdm` is a product of collaborative work. -Unless otherwise stated, all authors (see commit logs) retain copyright -for their respective work, and release the work under the MIT licence -(text below). - -Exceptions or notable authors are listed below -in reverse chronological order: - -* files: * - MPL-2.0 2015-2024 (c) Casper da Costa-Luis - [casperdcl](https://github.com/casperdcl). -* files: tqdm/_tqdm.py - MIT 2016 (c) [PR #96] on behalf of Google Inc. -* files: tqdm/_tqdm.py README.rst .gitignore - MIT 2013 (c) Noam Yorav-Raphael, original author. - -[PR #96]: https://github.com/tqdm/tqdm/pull/96 - - -Mozilla Public Licence (MPL) v. 2.0 - Exhibit A ------------------------------------------------ - -This Source Code Form is subject to the terms of the -Mozilla Public License, v. 2.0. -If a copy of the MPL was not distributed with this project, -You can obtain one at https://mozilla.org/MPL/2.0/. - - -MIT License (MIT) ------------------ - -Copyright (c) 2013 noamraph - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -From scikit-image: - -Copyright: 2009-2022 the scikit-image team -License: BSD-3-Clause - -Files: doc/source/themes/scikit-image/layout.html -Copyright: 2007-2010 the Sphinx team -License: BSD-3-Clause - -Files: skimage/feature/_canny.py - skimage/filters/edges.py - skimage/filters/_rank_order.py - skimage/morphology/_skeletonize.py - skimage/morphology/tests/test_watershed.py - skimage/morphology/watershed.py - skimage/segmentation/heap_general.pxi - skimage/segmentation/heap_watershed.pxi - skimage/segmentation/_watershed.py - skimage/segmentation/_watershed_cy.pyx -Copyright: 2003-2009 Massachusetts Institute of Technology - 2009-2011 Broad Institute - 2003 Lee Kamentsky - 2003-2005 Peter J. Verveer -License: BSD-3-Clause - -Files: skimage/filters/thresholding.py - skimage/graph/_mcp.pyx - skimage/graph/heap.pyx -Copyright: 2009-2015 Board of Regents of the University of - Wisconsin-Madison, Broad Institute of MIT and Harvard, - and Max Planck Institute of Molecular Cell Biology and - Genetics - 2009 Zachary Pincus - 2009 Almar Klein -License: BSD-2-Clause - -File: skimage/morphology/grayreconstruct.py - skimage/morphology/tests/test_reconstruction.py -Copyright: 2003-2009 Massachusetts Institute of Technology - 2009-2011 Broad Institute - 2003 Lee Kamentsky -License: BSD-3-Clause - -File: skimage/morphology/_grayreconstruct.pyx -Copyright: 2003-2009 Massachusetts Institute of Technology - 2009-2011 Broad Institute - 2003 Lee Kamentsky - 2022 Gregory Lee (added a 64-bit integer variant for large images) -License: BSD-3-Clause - -File: skimage/segmentation/_expand_labels.py -Copyright: 2020 Broad Institute - 2020 CellProfiler team -License: BSD-3-Clause - -File: skimage/exposure/_adapthist.py -Copyright: 1994 Karel Zuiderveld -License: BSD-3-Clause - -Function: skimage/morphology/_skeletonize_cy.pyx:_skeletonize_loop -Copyright: 2003-2009 Massachusetts Institute of Technology - 2009-2011 Broad Institute - 2003 Lee Kamentsky -License: BSD-3-Clause - -Function: skimage/_shared/version_requirements.py:_check_version -Copyright: 2013 The IPython Development Team -License: BSD-3-Clause - -Function: skimage/_shared/version_requirements.py:is_installed -Copyright: 2009-2011 Pierre Raybaut -License: MIT - -File: skimage/feature/_fisher_vector.py -Copyright: 2014 2014 Dan Oneata -License: MIT - -File: skimage/_vendored/numpy_lookfor.py -Copyright: 2005-2023, NumPy Developers -License: BSD-3-Clause - - -License: BSD-2-Clause - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -License: BSD-3-Clause - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. Neither the name of the University nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. -. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -License: MIT - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -From opencv-python: - -MIT License - -Copyright (c) Olli-Pekka Heinisuo - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -From numpy: - -Copyright (c) 2005-2024, NumPy Developers. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - * Neither the name of the NumPy Developers nor the names of any - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -From python-box: - -MIT License - -Copyright (c) 2017-2023 Chris Griffith - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -From Imutils: - -The MIT License (MIT) - -Copyright (c) 2015-2016 Adrian Rosebrock, http://www.pyimagesearch.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -From Pillow: - -The Python Imaging Library (PIL) is - - Copyright © 1997-2011 by Secret Labs AB - Copyright © 1995-2011 by Fredrik Lundh - -Pillow is the friendly PIL fork. It is - - Copyright © 2010-2024 by Jeffrey A. Clark (Alex) and contributors. - -Like PIL, Pillow is licensed under the open source HPND License: - -By obtaining, using, and/or copying this software and/or its associated -documentation, you agree that you have read, understood, and will comply -with the following terms and conditions: - -Permission to use, copy, modify and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appears in all copies, and that -both that copyright notice and this permission notice appear in supporting -documentation, and that the name of Secret Labs AB or the author not be -used in advertising or publicity pertaining to distribution of the software -without specific, written prior permission. - -SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS -SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. -IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR BE LIABLE FOR ANY SPECIAL, -INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - -From PyYAML: - -Copyright (c) 2017-2021 Ingy döt Net -Copyright (c) 2006-2016 Kirill Simonov - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -From scipy: - -Copyright (c) 2001-2002 Enthought, Inc. 2003-2024, SciPy Developers. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -From scikit-learn: - -BSD 3-Clause License - -Copyright (c) 2007-2023 The scikit-learn developers. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -From simplejson: - -simplejson is dual-licensed software. It is available under the terms -of the MIT license, or the Academic Free License version 2.1. The full -text of each license agreement is included below. This code is also -licensed to the Python Software Foundation (PSF) under a Contributor -Agreement. - -MIT License -=========== - -Copyright (c) 2006 Bob Ippolito - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -Academic Free License v. 2.1 -============================ - -Copyright (c) 2006 Bob Ippolito. All rights reserved. - -This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following notice immediately following the copyright notice for the Original Work: - -Licensed under the Academic Free License version 2.1 - -1) Grant of Copyright License. Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, sublicenseable license to do the following: - -a) to reproduce the Original Work in copies; - -b) to prepare derivative works ("Derivative Works") based upon the Original Work; - -c) to distribute copies of the Original Work and Derivative Works to the public; - -d) to perform the Original Work publicly; and - -e) to display the Original Work publicly. - -2) Grant of Patent License. Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, sublicenseable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, to make, use, sell and offer for sale the Original Work and Derivative Works. - -3) Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor hereby agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work, and by publishing the address of that information repository in a notice immediately following the copyright notice that applies to the Original Work. - -4) Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior written permission of the Licensor. Nothing in this License shall be deemed to grant any rights to trademarks, copyrights, patents, trade secrets or any other intellectual property of Licensor except as expressly stated herein. No patent license is granted to make, use, sell or offer to sell embodiments of any patent claims other than the licensed claims defined in Section 2. No right is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under different terms from this License any Original Work that Licensor otherwise would have a right to license. - -5) This section intentionally omitted. - -6) Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. - -7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately proceeding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to Original Work is granted hereunder except under this disclaimer. - -8) Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to any person for any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to liability for death or personal injury resulting from Licensor's negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to You. - -9) Acceptance and Termination. If You distribute copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. Nothing else but this License (or another written agreement between Licensor and You) grants You permission to create Derivative Works based upon the Original Work or to exercise any of the rights granted in Section 1 herein, and any attempt to do so except under the terms of this License (or another written agreement between Licensor and You) is expressly prohibited by U.S. copyright law, the equivalent laws of other countries, and by international treaty. Therefore, by exercising any of the rights granted to You in Section 1 herein, You indicate Your acceptance of this License and all of its terms and conditions. - -10) Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. - -11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101 et seq., the equivalent laws of other countries, and international treaty. This section shall survive the termination of this License. - -12) Attorneys Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. - -13) Miscellaneous. This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. - -14) Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -15) Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. - -This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved. Permission is hereby granted to copy and distribute this license without modification. This license may not be modified without the express written permission of its copyright owner. - - -From pandas: - -SD 3-Clause License - -Copyright (c) 2008-2011, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team -All rights reserved. - -Copyright (c) 2011-2024, Open source contributors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -From shape_predictor_81_face_landmarks: - -BSD 3-Clause License - -Copyright (c) 2019, Nikolay Feldman -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -From retinaface: - -MIT License - -Copyright (c) 2020 Vladimir Iglovikov - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -From EfficientNet-PyTorch: - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -From albumentations: - -MIT License - -Copyright (c) 2017 Buslaev Alexander, Alexander Parinov, Vladimir Iglovikov - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -From SAM: - -MIT License - -Copyright (c) 2021 David Samuel - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -From natsort: - -Copyright (c) 2012-2023 Seth M. Morton - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -************END OF THIRD-PARTY SOFTWARE NOTICES AND INFORMATION********** diff --git a/video/fake-stormer/model_code/configs/base.yaml b/video/fake-stormer/model_code/configs/base.yaml deleted file mode 100644 index 1faca4d31ec18af2bc8a153a05f024c8f59e2cbb..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/base.yaml +++ /dev/null @@ -1,79 +0,0 @@ -TASK: heatmap -PRECISION: float32 -DATASET: - type: HeatmapFaceForensic - TRAIN: True - ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c23/ - # FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - FAKETYPE: [FaceXRay] - IMAGE_SUFFIX: jpg - FROM_FILE: True - NUM_WORKERS: 8 - PIN_MEMORY: True - IMAGE_SIZE: [256, 256] - HEATMAP_SIZE: [64, 64] - SIGMA: 2 - HEATMAP_TYPE: gaussian - DATA: - TYPE: images - TRAIN: - ANNO_FILE: FaceXRay/train/train_FF_Xray.json - VAL: - ANNO_FILE: FaceXRay/val/val_FF_Xray.json - TEST: - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - TRANSFORM: - geometry: - type: GeometryTransform - resize: [256, 256, 0] #h, w, p=probability. If no affine transform, set p=1 - color: - type: ColorJitterTransform - clahe: 0.5 - colorjitter: 0.5 - gaussianblur: 0.5 - jpegcompression: 0.5 - rgbshift: 0.5 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False -MODEL: - type: SimpleClassificationDF - backbone: - type: ResNet - num_layers: 50 - drop_ratio: 0.5 - mode: ir_se - head: - type: SimpleClassificationHead - drop_ratio: 0.5 - in_planes: 512 -TRAIN: - gpus: [0,1,2,3] - batch_size: 32 - lr: 0.001 - epochs: 100 - begin_epoch: 0 - warm_up: 5 - every_val_epochs: 3 - loss: - type: CombinedLoss - use_target_weight: False - optimizer: Adam - distributed: False - pretrained: pretrained/model_ir_se50.pth - tensorboard: True - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [50, 80, 90] - gamma: 0.1 -PREPROCESSING: - DATASET: FaceForensics - SPLIT: train - ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c23/ - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - IMAGE_SUFFIX: jpg - DATA_TYPE: images - LABEL: real - facial_lm_pretrained: pretrained/shape_predictor_68_face_landmarks.dat diff --git a/video/fake-stormer/model_code/configs/get_config.py b/video/fake-stormer/model_code/configs/get_config.py deleted file mode 100644 index e47c3393fdbabb52d5063bda7b5604fe68a27ae1..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/get_config.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -import os - -from yaml import dump, load - -try: - from yaml import CDumper as Dumper - from yaml import CLoader as Loader -except ImportError: - from yaml import Loader, Dumper - -from box import Box as edict - - -def load_config(cfg): - with open(cfg) as f: - config = load(f, Loader=Loader) - - return edict(config) diff --git a/video/fake-stormer/model_code/configs/preprocessing/data_preprocessing_c0.yaml b/video/fake-stormer/model_code/configs/preprocessing/data_preprocessing_c0.yaml deleted file mode 100644 index 9f499a523d4212dfd294786f0d1275c70ddc729a..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/preprocessing/data_preprocessing_c0.yaml +++ /dev/null @@ -1,16 +0,0 @@ -PREPROCESSING: - DATASET: FF++ - COMPRESSION: c0 - SPLIT: val - ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - # FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - FAKETYPE: [original] - IMAGE_SUFFIX: png - DATA_TYPE: videos - LABEL: [real] - facial_lm_pretrained: pretrained/shape_predictor_81_face_landmarks.dat - N_LANDMARKS: 81 - SAMPLING: - ACTIVE: False - NUMBERS: 8 - DEBUG: False diff --git a/video/fake-stormer/model_code/configs/preprocessing/data_preprocessing_c23.yaml b/video/fake-stormer/model_code/configs/preprocessing/data_preprocessing_c23.yaml deleted file mode 100644 index d071da68974c657dc13b640e72de68c4176a089b..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/preprocessing/data_preprocessing_c23.yaml +++ /dev/null @@ -1,16 +0,0 @@ -PREPROCESSING: - DATASET: FaceForensics - COMPRESSION: c23 - SPLIT: train - ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c23/ - # FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - FAKETYPE: [original] - IMAGE_SUFFIX: png - DATA_TYPE: videos - LABEL: [real] - facial_lm_pretrained: pretrained/shape_predictor_81_face_landmarks.dat - N_LANDMARKS: 81 - SAMPLING: - ACTIVE: False - NUMBERS: 8 - DEBUG: False diff --git a/video/fake-stormer/model_code/configs/spatial/binary_cls/efns/efn_4.yaml b/video/fake-stormer/model_code/configs/spatial/binary_cls/efns/efn_4.yaml deleted file mode 100644 index 0dc7d27a39fbd9b8a5fd20c8dfc6be9313d578ce..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/spatial/binary_cls/efns/efn_4.yaml +++ /dev/null @@ -1,160 +0,0 @@ -TASK: EFNB4_BCE_Adam_5e4_Batch32_50epochs_abl_FS -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: False - -DATASET: - type: BinaryFaceForensic - DATA_TYPE: image - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c0 - IMAGE_SUFFIX: png - NUM_WORKERS: 7 - PIN_MEMORY: True - IMAGE_SIZE: [256, 256] - HEATMAP_SIZE: [28, 28] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: gaussian - SPLIT_IMAGE: False - DATA: - TYPE: frames - SAMPLES_PER_VIDEO: - ACTIVE: False - TRAIN: 8 # Dynamically random number of frames in each epoch - VAL: 8 - TEST: 128 - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/DFW/ - FROM_FILE: False - # FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # FAKETYPE: [new_fake_train, new_real_train] - # FAKETYPE: [original, NeuralTextures] - # FAKETYPE: [original, Face2Face] - # FAKETYPE: [original, Deepfakes] - FAKETYPE: [original, FaceSwap] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/train_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/DFW/ - FROM_FILE: False - # FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [original, NeuralTextures] - # FAKETYPE: [original, Face2Face] - # FAKETYPE: [original, Deepfakes] - FAKETYPE: [original, FaceSwap] - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/val_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: Celeb-DFv1 - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes] - # FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [256, 256, 1] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.5] #Format: [crop_limit, prob] - scale: [0.15, 0.5] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.5, 0.5, 0.5] - std: [0.5, 0.5, 0.5] - DEBUG: False - -MODEL: - type: PoseEfficientNet - model_name: efficientnet-b4 - num_layers: B4 - include_top: True - num_classes: 1 - include_hm_decoder: False - INIT_WEIGHTS: - pretrained: True - advprop: True - -TRAIN: - gpus: [0] - batch_size: 32 - lr: 0.0005 - epochs: 50 - begin_epoch: -1 - warm_up: 5 - every_val_epochs: 1 - loss: - type: BinaryCrossEntropy - reduction: mean - optimizer: Adam - distributed: False - pretrained: '' - tensorboard: True - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: False - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 1 - start_decay: 4 - -TEST: - gpus: [0,1,2,3] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: True - video_level: True - pretrained: 'logs/10-01-2024/TopDownDetector_ViTSmall112_hm10_8SBI_NonOverlap100_MSE_AdamW_IN_5e5_FZ5_Batch32_200epochs_Drop0.2_AVG_model_best.pth' diff --git a/video/fake-stormer/model_code/configs/spatial/binary_cls/vits/vit_small_112p16.yaml b/video/fake-stormer/model_code/configs/spatial/binary_cls/vits/vit_small_112p16.yaml deleted file mode 100644 index 19d65db341d1dcc7b02a5bb36472412692b1dea7..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/spatial/binary_cls/vits/vit_small_112p16.yaml +++ /dev/null @@ -1,180 +0,0 @@ -TASK: ViTSmall112_BCE_AdamW_IN_5e5_Batch32_50epochs_Drop0.2_abl_p16_FS -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: False - -DATASET: - type: BinaryFaceForensic - DATA_TYPE: image - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c0 - IMAGE_SUFFIX: png - NUM_WORKERS: 7 - PIN_MEMORY: True - IMAGE_SIZE: [112, 112] - HEATMAP_SIZE: [7, 7] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: gaussian - SPLIT_IMAGE: False - DATA: - TYPE: frames - SAMPLES_PER_VIDEO: - ACTIVE: False - TRAIN: 8 # Dynamically random number of frames in each epoch - VAL: 8 - TEST: 128 - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/DFW/ - FROM_FILE: False - # FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # FAKETYPE: [new_fake_train, new_real_train] - # FAKETYPE: [original, NeuralTextures] - # FAKETYPE: [original, Face2Face] - # FAKETYPE: [original, Deepfakes] - FAKETYPE: [original, FaceSwap] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/train_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/DFW/ - FROM_FILE: False - # FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [original, NeuralTextures] - # FAKETYPE: [original, Face2Face] - # FAKETYPE: [original, Deepfakes] - FAKETYPE: [original, FaceSwap] - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/val_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: Celeb-DFv1 - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes] - # FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [112, 112, 1] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.5] #Format: [crop_limit, prob] - scale: [0.15, 0.5] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - -MODEL: - type: TopDownDetector - backbone: - type: ViT - img_size: [112, 112] - patch_size: 16 - embed_dim: 384 - depth: 12 - num_heads: 6 - mlp_ratio: 4 - drop_path_rate: 0.2 - qkv_bias: True - class_token: True - pretrained: pretrained/dino_deitsmall16_pretrain.pth - # pretrained: null - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 384 - heads: - # hm: 1 - cls: 1 - num_deconv_layers: 0 #Config n deconv layers to build the decoder - num_deconv_filters: [256, 256] - num_deconv_kernels: [4, 4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - -TRAIN: - gpus: [0] - batch_size: 32 - lr: 0.00005 - epochs: 50 - begin_epoch: -1 - warm_up: 5 - every_val_epochs: 1 - loss: - type: BinaryCrossEntropy - reduction: mean - optimizer: AdamW - distributed: False - pretrained: '' - tensorboard: True - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: False - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 1 - start_decay: 4 - -TEST: - gpus: [0,1,2,3] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: True - video_level: True - pretrained: 'logs/10-01-2024/TopDownDetector_ViTSmall112_hm10_8SBI_NonOverlap100_MSE_AdamW_IN_5e5_FZ5_Batch32_200epochs_Drop0.2_AVG_model_best.pth' diff --git a/video/fake-stormer/model_code/configs/spatial/binary_cls/vits/vit_small_112p8.yaml b/video/fake-stormer/model_code/configs/spatial/binary_cls/vits/vit_small_112p8.yaml deleted file mode 100644 index 7e716fe1c0991f206d66075c6137d590d3a00292..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/spatial/binary_cls/vits/vit_small_112p8.yaml +++ /dev/null @@ -1,180 +0,0 @@ -TASK: ViTSmall112_BCE_AdamW_IN_5e5_Batch32_50epochs_Drop0.2_abl_p8_FS -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: False - -DATASET: - type: BinaryFaceForensic - DATA_TYPE: image - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c0 - IMAGE_SUFFIX: png - NUM_WORKERS: 7 - PIN_MEMORY: True - IMAGE_SIZE: [112, 112] - HEATMAP_SIZE: [14, 14] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: gaussian - SPLIT_IMAGE: False - DATA: - TYPE: frames - SAMPLES_PER_VIDEO: - ACTIVE: False - TRAIN: 8 # Dynamically random number of frames in each epoch - VAL: 8 - TEST: 128 - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/DFW/ - FROM_FILE: False - # FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # FAKETYPE: [new_fake_train, new_real_train] - # FAKETYPE: [original, NeuralTextures] - # FAKETYPE: [original, Face2Face] - # FAKETYPE: [original, Deepfakes] - FAKETYPE: [original, FaceSwap] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/train_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/DFW/ - FROM_FILE: False - # FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [original, NeuralTextures] - # FAKETYPE: [original, Face2Face] - # FAKETYPE: [original, Deepfakes] - FAKETYPE: [original, FaceSwap] - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/val_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: Celeb-DFv1 - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes] - # FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [112, 112, 1] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.5] #Format: [crop_limit, prob] - scale: [0.15, 0.5] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - -MODEL: - type: TopDownDetector - backbone: - type: ViT - img_size: [112, 112] - patch_size: 8 - embed_dim: 384 - depth: 12 - num_heads: 6 - mlp_ratio: 4 - drop_path_rate: 0.2 - qkv_bias: True - class_token: True - pretrained: pretrained/dino_deitsmall8_pretrain.pth - # pretrained: null - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 384 - heads: - # hm: 1 - cls: 1 - num_deconv_layers: 0 #Config n deconv layers to build the decoder - num_deconv_filters: [256, 256] - num_deconv_kernels: [4, 4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - -TRAIN: - gpus: [0] - batch_size: 32 - lr: 0.00005 - epochs: 50 - begin_epoch: -1 - warm_up: 5 - every_val_epochs: 1 - loss: - type: BinaryCrossEntropy - reduction: mean - optimizer: AdamW - distributed: False - pretrained: '' - tensorboard: True - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: False - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 1 - start_decay: 4 - -TEST: - gpus: [0,1,2,3] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: True - video_level: True - pretrained: 'logs/10-01-2024/TopDownDetector_ViTSmall112_hm10_8SBI_NonOverlap100_MSE_AdamW_IN_5e5_FZ5_Batch32_200epochs_Drop0.2_AVG_model_best.pth' diff --git a/video/fake-stormer/model_code/configs/spatial/binary_cls/vits/vit_small_224p8.yaml b/video/fake-stormer/model_code/configs/spatial/binary_cls/vits/vit_small_224p8.yaml deleted file mode 100644 index 7e716fe1c0991f206d66075c6137d590d3a00292..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/spatial/binary_cls/vits/vit_small_224p8.yaml +++ /dev/null @@ -1,180 +0,0 @@ -TASK: ViTSmall112_BCE_AdamW_IN_5e5_Batch32_50epochs_Drop0.2_abl_p8_FS -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: False - -DATASET: - type: BinaryFaceForensic - DATA_TYPE: image - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c0 - IMAGE_SUFFIX: png - NUM_WORKERS: 7 - PIN_MEMORY: True - IMAGE_SIZE: [112, 112] - HEATMAP_SIZE: [14, 14] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: gaussian - SPLIT_IMAGE: False - DATA: - TYPE: frames - SAMPLES_PER_VIDEO: - ACTIVE: False - TRAIN: 8 # Dynamically random number of frames in each epoch - VAL: 8 - TEST: 128 - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/DFW/ - FROM_FILE: False - # FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # FAKETYPE: [new_fake_train, new_real_train] - # FAKETYPE: [original, NeuralTextures] - # FAKETYPE: [original, Face2Face] - # FAKETYPE: [original, Deepfakes] - FAKETYPE: [original, FaceSwap] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/train_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/DFW/ - FROM_FILE: False - # FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [original, NeuralTextures] - # FAKETYPE: [original, Face2Face] - # FAKETYPE: [original, Deepfakes] - FAKETYPE: [original, FaceSwap] - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/val_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: Celeb-DFv1 - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes] - # FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [112, 112, 1] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.5] #Format: [crop_limit, prob] - scale: [0.15, 0.5] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - -MODEL: - type: TopDownDetector - backbone: - type: ViT - img_size: [112, 112] - patch_size: 8 - embed_dim: 384 - depth: 12 - num_heads: 6 - mlp_ratio: 4 - drop_path_rate: 0.2 - qkv_bias: True - class_token: True - pretrained: pretrained/dino_deitsmall8_pretrain.pth - # pretrained: null - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 384 - heads: - # hm: 1 - cls: 1 - num_deconv_layers: 0 #Config n deconv layers to build the decoder - num_deconv_filters: [256, 256] - num_deconv_kernels: [4, 4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - -TRAIN: - gpus: [0] - batch_size: 32 - lr: 0.00005 - epochs: 50 - begin_epoch: -1 - warm_up: 5 - every_val_epochs: 1 - loss: - type: BinaryCrossEntropy - reduction: mean - optimizer: AdamW - distributed: False - pretrained: '' - tensorboard: True - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: False - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 1 - start_decay: 4 - -TEST: - gpus: [0,1,2,3] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: True - video_level: True - pretrained: 'logs/10-01-2024/TopDownDetector_ViTSmall112_hm10_8SBI_NonOverlap100_MSE_AdamW_IN_5e5_FZ5_Batch32_200epochs_Drop0.2_AVG_model_best.pth' diff --git a/video/fake-stormer/model_code/configs/spatial/binary_cls/xcepts/xcept.yaml b/video/fake-stormer/model_code/configs/spatial/binary_cls/xcepts/xcept.yaml deleted file mode 100644 index 011398f572d211804271b290757d5d63552dd4a5..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/spatial/binary_cls/xcepts/xcept.yaml +++ /dev/null @@ -1,156 +0,0 @@ -TASK: Exeption_BCE_Adam_5e4_Batch32_50epochs_abl_F2F -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: False - -DATASET: - type: BinaryFaceForensic - DATA_TYPE: image - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c0 - IMAGE_SUFFIX: png - NUM_WORKERS: 14 - PIN_MEMORY: True - IMAGE_SIZE: [256, 256] - HEATMAP_SIZE: [28, 28] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: gaussian - SPLIT_IMAGE: False - DATA: - TYPE: frames - SAMPLES_PER_VIDEO: - ACTIVE: False - TRAIN: 8 # Dynamically random number of frames in each epoch - VAL: 8 - TEST: 128 - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/DFW/ - FROM_FILE: False - # FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # FAKETYPE: [new_fake_train, new_real_train] - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [original, NeuralTextures] - FAKETYPE: [original, Face2Face] - # FAKETYPE: [original, Deepfakes] - # FAKETYPE: [original, FaceSwap] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/train_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/DFW/ - FROM_FILE: False - # FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [original, NeuralTextures] - FAKETYPE: [original, Face2Face] - # FAKETYPE: [original, Deepfakes] - # FAKETYPE: [original, FaceSwap] - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/val_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: Celeb-DFv1 - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes] - # FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [256, 256, 1] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.5] #Format: [crop_limit, prob] - scale: [0.15, 0.5] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.5, 0.5, 0.5] - std: [0.5, 0.5, 0.5] - DEBUG: False - -MODEL: - type: Xception - num_classes: 1 - INIT_WEIGHTS: - pretrained: True - -TRAIN: - gpus: [0,1] - batch_size: 16 - lr: 0.0005 - epochs: 50 - begin_epoch: -1 - warm_up: 5 - every_val_epochs: 1 - loss: - type: BinaryCrossEntropy - reduction: mean - optimizer: Adam - distributed: False - pretrained: '' - tensorboard: True - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: False - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 1 - start_decay: 4 - -TEST: - gpus: [0,1,2,3] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: True - video_level: True - pretrained: 'logs/10-01-2024/TopDownDetector_ViTSmall112_hm10_8SBI_NonOverlap100_MSE_AdamW_IN_5e5_FZ5_Batch32_200epochs_Drop0.2_AVG_model_best.pth' diff --git a/video/fake-stormer/model_code/configs/spatial/efn4_fpn_hm.yaml b/video/fake-stormer/model_code/configs/spatial/efn4_fpn_hm.yaml deleted file mode 100644 index 675d428cee3a016963a136954fb1496a3ebd13e5..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/spatial/efn4_fpn_hm.yaml +++ /dev/null @@ -1,147 +0,0 @@ -TASK: EFN_hm100_FPN_NoBasedCLS_Focal_C3_256Cstency10_32FXRayv1_SAM(Adam) -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: True -DATASET: - type: HeatmapFaceForensic - NAME: Celeb-DFv1 # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - TRAIN: False #Switch to True for training mode, False for testing mode - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - COMPRESSION: c0 - IMAGE_SUFFIX: png - FROM_FILE: False - NUM_WORKERS: 7 - PIN_MEMORY: True - IMAGE_SIZE: [384, 384] - HEATMAP_SIZE: [96, 96] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 2 - ADAPTIVE_SIGMA: True - HEATMAP_TYPE: gaussian - SPLIT_IMAGE: False - DATA: - TYPE: frames - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 32 - VAL: 32 - TEST: 32 - TRAIN: - FAKETYPE: [FaceXRay] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/dynamic_trainBI_FFv2.json - LABEL_FOLDER: [real, fake] - VAL: - FAKETYPE: [FaceXRay] - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/dynamic_valBI_FFv2.json - LABEL_FOLDER: [real, fake] - TEST: - # FAKETYPE: [original, Deepfakes] - # FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [384, 384, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.5] #Format: [crop_limit, prob] - scale: [0.15, 0.5] #Format: [scale_limit, prob] - rand_erasing: [0.5, 3] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True -MODEL: - type: PoseEfficientNet - model_name: efficientnet-b4 - num_layers: B4 - include_top: False - include_hm_decoder: True - head_conv: 64 - use_c2: False - use_c3: True - use_c4: True - use_c51: True - fpn: True - heads: - hm: 1 - cls: 1 - cstency: 256 - INIT_WEIGHTS: - pretrained: True -TRAIN: - gpus: [0] - batch_size: 32 - lr: 0.00025 - epochs: 100 - begin_epoch: 0 - warm_up: 6 - every_val_epochs: 1 - loss: - type: CombinedFocalLoss - use_target_weight: False - cls_lmda: 1 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 100 - cstency_lmda: 10 - mse_reduction: sum - ce_reduction: mean - optimizer: SAM - distributed: False - pretrained: '' - tensorboard: True - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: False - pretrained: 'logs/20-02-2023/PoseEfficientNet_EFN_hm100_FPN_Based_CLS_Focal_NoC2_256Cstency10_32FXRayv2_SAM(Adam)_model_best.pth' -PREPROCESSING: - DATASET: FaceForensics - SPLIT: train - ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c23/ - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - IMAGE_SUFFIX: jpg - DATA_TYPE: images - LABEL: [real, fake] - facial_lm_pretrained: pretrained/shape_predictor_68_face_landmarks.dat - DEBUG: False diff --git a/video/fake-stormer/model_code/configs/spatial/efn4_fpn_hm_adv.yaml b/video/fake-stormer/model_code/configs/spatial/efn4_fpn_hm_adv.yaml deleted file mode 100644 index c97167c6892b2d69b6d5e13c7ac501bef4f958ac..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/spatial/efn4_fpn_hm_adv.yaml +++ /dev/null @@ -1,165 +0,0 @@ -TASK: EFN_hm10_EFPN_NoBasedCLS_Focal_C3_256Cst100_32FXRayv2_SAM(Adam)_ADV_Era1_OutSigmoid_1e7_boost500_UnFZ -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: True -DATASET: - type: HeatmapFaceForensic - DATA_TYPE: image - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c0 - IMAGE_SUFFIX: png - NUM_WORKERS: 28 - PIN_MEMORY: True - IMAGE_SIZE: [384, 384] - HEATMAP_SIZE: [96, 96] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 2 - ADAPTIVE_SIGMA: True - HEATMAP_TYPE: gaussian - SPLIT_IMAGE: False - DATA: - TYPE: frames - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 32 # Dynamically random number of frames in each epoch - VAL: 32 - TEST: 32 - DIST: [1., 1.] # Distribution of Real, Fake - 1.,1. by default - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/dynamic_trainBI_FFv2.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - ROOT: /home/users/XXX/data/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/dynamic_valBI_FFv2.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: FF++ - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # FAKETYPE: [frames_BW_5/original, frames_BW_5/Deepfakes, frames_BW_5/Face2Face, frames_BW_5/FaceSwap, frames_BW_5/NeuralTextures] - FAKETYPE: [frames_JPEG_1/original, frames_JPEG_1/Deepfakes, frames_JPEG_1/Face2Face, frames_JPEG_1/FaceSwap, frames_JPEG_1/NeuralTextures, - frames_JPEG_2/original, frames_JPEG_2/Deepfakes, frames_JPEG_2/Face2Face, frames_JPEG_2/FaceSwap, frames_JPEG_2/NeuralTextures, - frames_JPEG_3/original, frames_JPEG_3/Deepfakes, frames_JPEG_3/Face2Face, frames_JPEG_3/FaceSwap, frames_JPEG_3/NeuralTextures, - frames_JPEG_4/original, frames_JPEG_4/Deepfakes, frames_JPEG_4/Face2Face, frames_JPEG_4/FaceSwap, frames_JPEG_4/NeuralTextures, - frames_JPEG_5/original, frames_JPEG_5/Deepfakes, frames_JPEG_5/Face2Face, frames_JPEG_5/FaceSwap, frames_JPEG_5/NeuralTextures] - # FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [real_test, fake_test] - # ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [384, 384, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.5] #Format: [crop_limit, prob] - scale: [0.15, 0.5] #Format: [scale_limit, prob] - rand_erasing: [0.5, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.5, 0.5, 0.5] - std: [0.5, 0.5, 0.5] - DEBUG: False - DYNAMIC_FXRAY: True -MODEL: - type: PoseEfficientNet - model_name: efficientnet-b4 - num_layers: B4 - include_top: False - include_hm_decoder: True - head_conv: 64 - use_c2: False - use_c3: True - use_c4: True - use_c51: True - efpn: True - tfpn: False - se_layer: False - norm_c2: False - heads: - hm: 1 - cls: 1 - cstency: 256 - INIT_WEIGHTS: - pretrained: True - advprop: True -TRAIN: - gpus: [0] - batch_size: 16 - lr: 0.0000001 - epochs: 100 - begin_epoch: -1 - warm_up: 6 - every_val_epochs: 1 - loss: - type: CombinedFocalLoss - use_target_weight: False - cls_lmda: 1 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 10 - cstency_lmda: 100 - mse_reduction: sum - ce_reduction: mean - optimizer: SAM - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: False - debug: - active: False - save_hm_gt: True - save_hm_pred: True -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: True - video_level: True - apr: True # Average precision/recall or normal precision/recall - no_shot_preds: 1 - pred_file: /project/home/p200249/XXX/saved_predictions/laanet_wBI_DFDC_100_100.json # File to save predictions - save_preds: False - pretrained: 'pretrained/PoseEfficientNet_EFN_hm100_EFPN_NoBasedCLS_Focal_C3_256Cst100_8FXRayv2_SAM(Adam)_ADV_Era1_OutSigmoid_5e5_model_best.pth' diff --git a/video/fake-stormer/model_code/configs/spatial/efn4_fpn_sbi_adv.yaml b/video/fake-stormer/model_code/configs/spatial/efn4_fpn_sbi_adv.yaml deleted file mode 100644 index 06446a290a2f6c9832faf7dde32eb31cde2afc8e..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/spatial/efn4_fpn_sbi_adv.yaml +++ /dev/null @@ -1,180 +0,0 @@ -TASK: EFN_hm10_EFPN_NoBasedCLS_Focal_C3_256Cst100_8SBI_SAM(Adam)_ADV_Era1_OutSigmoid_1e7_boost500_UnFZ -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: True -DATASET: - type: SBIFaceForensic - DATA_TYPE: image - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c0 - IMAGE_SUFFIX: png - NUM_WORKERS: 7 - PIN_MEMORY: True - IMAGE_SIZE: [384, 384] - HEATMAP_SIZE: [96, 96] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 2 - ADAPTIVE_SIGMA: True - HEATMAP_TYPE: gaussian - SPLIT_IMAGE: False - DATA: - TYPE: frames - SAMPLES_PER_VIDEO: - ACTIVE: False - TRAIN: 8 # Dynamically random number of frames in each epoch - VAL: 8 - TEST: 32 - DIST: [1., 1.] # Distribution of Real, Fake - 1.,1. by default - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/train_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - ROOT: /home/users/XXX/data/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/val_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: FF++ - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - # ROOT: /project/home/p200249/XXX/DiffSwap/ - # ROOT: /project/home/p200249/XXX/DF40_test/ - FROM_FILE: False - # FAKETYPE: [original, Face2Face] - # FAKETYPE: [frames_JPEG_1/original, frames_JPEG_1/Deepfakes, frames_JPEG_1/Face2Face, frames_JPEG_1/FaceSwap, frames_JPEG_1/NeuralTextures] - FAKETYPE: [frames_JPEG_1/original, frames_JPEG_1/Deepfakes, frames_JPEG_1/Face2Face, frames_JPEG_1/FaceSwap, frames_JPEG_1/NeuralTextures, - frames_JPEG_2/original, frames_JPEG_2/Deepfakes, frames_JPEG_2/Face2Face, frames_JPEG_2/FaceSwap, frames_JPEG_2/NeuralTextures, - frames_JPEG_3/original, frames_JPEG_3/Deepfakes, frames_JPEG_3/Face2Face, frames_JPEG_3/FaceSwap, frames_JPEG_3/NeuralTextures, - frames_JPEG_4/original, frames_JPEG_4/Deepfakes, frames_JPEG_4/Face2Face, frames_JPEG_4/FaceSwap, frames_JPEG_4/NeuralTextures, - frames_JPEG_5/original, frames_JPEG_5/Deepfakes, frames_JPEG_5/Face2Face, frames_JPEG_5/FaceSwap, frames_JPEG_5/NeuralTextures] - # FAKETYPE: [Celeb-real-0.6-0.8-v2, Celeb-synthesis-0.6-0.8-v2, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [Real_DiffSwap1, DiffSwap_1] - # FAKETYPE: [blendface, danet, deepfacelab, e4e, e4s, facedancer, faceswap, facevid2vid, fomm, fsgan, heygen, - # hyperreenact, inswap, lia, mcnet, mobileswap, MRAA, one_shot_free, pirender, sadtalker, simswap, tpsm, uniface, - # wav2lip, real_videos] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [384, 384, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.5] #Format: [crop_limit, prob] - scale: [0.15, 0.5] #Format: [scale_limit, prob] - rand_erasing: [0.5, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.5, 0.5, 0.5] - std: [0.5, 0.5, 0.5] - DEBUG: False - DYNAMIC_FXRAY: True -MODEL: - type: PoseEfficientNet - model_name: efficientnet-b4 - num_layers: B4 - include_top: False - include_hm_decoder: True - head_conv: 64 - use_c2: False - use_c3: True - use_c4: True - use_c51: True - efpn: True - tfpn: False - se_layer: False - norm_c2: False - heads: - hm: 1 - cls: 1 - cstency: 256 - INIT_WEIGHTS: - pretrained: True - advprop: True -TRAIN: - gpus: [0] - batch_size: 8 - lr: 0.0000001 - epochs: 100 - begin_epoch: -1 - warm_up: 6 - every_val_epochs: 1 - loss: - type: CombinedFocalLoss - use_target_weight: False - cls_lmda: 1 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 10 - cstency_lmda: 100 - mse_reduction: sum - ce_reduction: mean - optimizer: SAM - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: False - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 1 - start_decay: 8 -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: True - video_level: True - apr: True # Average precision/recall or normal precision/recall - no_shot_preds: 1 - pred_file: /project/home/p200249/XXX/saved_predictions/laanet_DiffSwap_100_100.json # File to save predictions - save_preds: True - pretrained: pretrained/PoseEfficientNet_EFN_hm100_EFPN_NoBasedCLS_Focal_C3_256Cst100_8FXRayv2_SAM(Adam)_ADV_Era1_OutSigmoid_5e5_model_best.pth diff --git a/video/fake-stormer/model_code/configs/spatial/hrnet_sbi.yaml b/video/fake-stormer/model_code/configs/spatial/hrnet_sbi.yaml deleted file mode 100644 index a7ab3ece0262d23a7ee1e7612d3654e13c8bdc68..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/spatial/hrnet_sbi.yaml +++ /dev/null @@ -1,170 +0,0 @@ -TASK: heatmap_sbi_separated_CLS_Focal_C2 -PRECISION: float64 -METRICS_BASE: combine -DATASET: - type: SBIFaceForensic - TRAIN: True #Switch to True for training mode, False for testing mode - ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c23/ - # ROOT: /home/users/XXX/data/FaceForensics++/c23/ - # FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - IMAGE_SUFFIX: jpg - FROM_FILE: True - NUM_WORKERS: 8 - PIN_MEMORY: True - IMAGE_SIZE: [384, 384] - HEATMAP_SIZE: [96, 96] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 3 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: gaussian - DATA: - TYPE: images - SAMPLES_PER_VIDEO: 32 - TRAIN: - FAKETYPE: [FaceXRay] - # ANNO_FILE: FaceXRay/train/train_FF_Xray.json - # ANNO_FILE: FaceXRay/train/new_trainBI_FF.json - ANNO_FILE: processed_data/new_valBI_FF.json - LABEL_FOLDER: [real, fake] - VAL: - FAKETYPE: [FaceXRay] - # ANNO_FILE: FaceXRay/val/val_FF_Xray.json - ANNO_FILE: processed_data/new_valBI_FF.json - LABEL_FOLDER: [real, fake] - TEST: - FAKETYPE: [FaceXRay] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [256, 256, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - jpegcompression: 0.5 - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True -MODEL: - type: PoseHighResolutionNet - INIT_WEIGHTS: - pretrained: 'pretrained/hrnet_w48-8ef0771d.pth' - MODEL: - NAME: pose_hrnet - NUM_JOINTS: 1 - HEATMAP_SIZE: [96, 96] - cls_based_hm: True - heads: - hm: 1 - cls: 1 - EXTRA: - PRETRAINED_LAYERS: - - 'conv1' - - 'bn1' - - 'conv2' - - 'bn2' - - 'layer1' - - 'transition1' - - 'stage2' - - 'transition2' - - 'stage3' - - 'transition3' - - 'stage4' - FINAL_CONV_KERNEL: 1 - STAGE2: - NUM_MODULES: 1 - NUM_BRANCHES: 2 - BLOCK: BASIC - NUM_BLOCKS: - - 4 - - 4 - NUM_CHANNELS: - - 48 - - 96 - FUSE_METHOD: SUM - STAGE3: - NUM_MODULES: 4 - NUM_BRANCHES: 3 - BLOCK: BASIC - NUM_BLOCKS: - - 4 - - 4 - - 4 - NUM_CHANNELS: - - 48 - - 96 - - 192 - FUSE_METHOD: SUM - STAGE4: - NUM_MODULES: 3 - NUM_BRANCHES: 4 - BLOCK: BASIC - NUM_BLOCKS: - - 4 - - 4 - - 4 - - 4 - NUM_CHANNELS: - - 48 - - 96 - - 192 - - 384 - FUSE_METHOD: SUM -TRAIN: - gpus: [0,1,2] - batch_size: 16 - lr: 0.001 - epochs: 30 - begin_epoch: 0 - warm_up: 5 - every_val_epochs: 1 - loss: - type: CombinedFocalLoss - use_target_weight: False - cls_lmda: 0.08 - # dst_lmda: 0.05 - reduction: 'mean' - # dist_cal: False - cls_cal: True - combine_compute: False - optimizer: SAM - distributed: False - # pretrained: 'logs/05-12-2022/PoseResNet_heatmap_FPN_Separated_CLS_Focal_NoFrZ_model_best.pth' - tensorboard: True - resume: False - lr_scheduler: - type: LinearDecayLR - milestones: [5, 12] - gamma: 0.5 - freeze_backbone: False - debug: - save_hm_gt: True - save_hm_pred: True -TEST: - gpus: [0,1,2] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - # pretrained: 'logs/05-12-2022/PoseResNet_heatmap_FPN_Separated_CLS_Focal_NoFrZ_model_best.pth' -PREPROCESSING: - DATASET: FaceForensics - SPLIT: train - ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c23/ - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - IMAGE_SUFFIX: jpg - DATA_TYPE: images - LABEL: [real, fake] - facial_lm_pretrained: pretrained/shape_predictor_68_face_landmarks.dat - DEBUG: False diff --git a/video/fake-stormer/model_code/configs/spatial/resnet_fpn_hm.yaml b/video/fake-stormer/model_code/configs/spatial/resnet_fpn_hm.yaml deleted file mode 100644 index f9e67ef529105897440753bf399a5f150b693a08..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/spatial/resnet_fpn_hm.yaml +++ /dev/null @@ -1,153 +0,0 @@ -TASK: PoseRes50_100hm_EFPN_NoBased_CLS_Focal_C2_256Cst100_32FXRayv2_SAM(Adam)_Era1_OutSigmoid_5e5_div4_FZ -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: True -DATASET: - type: HeatmapFaceForensic - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c0 - IMAGE_SUFFIX: png - NUM_WORKERS: 7 - PIN_MEMORY: True - IMAGE_SIZE: [256, 256] - HEATMAP_SIZE: [64, 64] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 2 - ADAPTIVE_SIGMA: True - HEATMAP_TYPE: gaussian - SPLIT_IMAGE: False - DATA: - TYPE: frames - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 32 # Dynamically random number of frames in each epoch - VAL: 32 - TEST: 32 - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/dynamic_trainBI_FFv2.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/dynamic_valBI_FFv2.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: Celeb-DFv1 - ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /data/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes] - # FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [256, 256, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.5] #Format: [crop_limit, prob] - scale: [0.15, 0.5] #Format: [scale_limit, prob] - rand_erasing: [0.5, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True -MODEL: - type: PoseResNet - num_layers: 50 - block: Bottleneck - layers: [3, 4, 6, 3] - heads: - hm: 1 - cls: 1 - cstency: 256 - head_conv: 64 - dropout_prob: 0.5 - fpn: True - cls_based_hm: False - use_c2: True - INIT_WEIGHTS: - pretrained: True - num_layers: 50 -TRAIN: - gpus: [0] - batch_size: 32 - lr: 0.00005 - epochs: 100 - begin_epoch: -1 - warm_up: 6 - every_val_epochs: 1 - loss: - type: CombinedFocalLoss - use_target_weight: False - cls_lmda: 1 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 100 - cstency_lmda: 100 - mse_reduction: sum - ce_reduction: mean - optimizer: SAM - distributed: False - # pretrained: '' - tensorboard: True - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: False - pretrained: 'logs/03-03-2023/PoseResNet_PoseRes50_100hm_FPN_NoBased_CLS_Focal_NoC2_256Cstency10_32FXRayv2_SAM(Adam)_NoErasing_model_best.pth' -PREPROCESSING: - DATASET: FaceForensics - SPLIT: train - ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c23/ - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - IMAGE_SUFFIX: jpg - DATA_TYPE: images - LABEL: [real, fake] - facial_lm_pretrained: pretrained/shape_predictor_68_face_landmarks.dat - DEBUG: False diff --git a/video/fake-stormer/model_code/configs/spatial/resnet_fpn_hm_deepfakes.yaml b/video/fake-stormer/model_code/configs/spatial/resnet_fpn_hm_deepfakes.yaml deleted file mode 100644 index d65e890f6234dde1d303ddf501d80b42893aa3b2..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/spatial/resnet_fpn_hm_deepfakes.yaml +++ /dev/null @@ -1,115 +0,0 @@ -TASK: heatmap_FPN_Separated_CLS_Focal_Deepfakes -PRECISION: float64 -DATASET: - type: HeatmapFaceForensic - TRAIN: False #Switch to True for training mode, False for testing mode - ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c23/ - # ROOT: /home/users/XXX/data/FaceForensics++/c23/ - # FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - IMAGE_SUFFIX: jpg - FROM_FILE: False - NUM_WORKERS: 14 - PIN_MEMORY: True - IMAGE_SIZE: [256, 256] - HEATMAP_SIZE: [64, 64] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 2 - ADAPTIVE_SIGMA: True - HEATMAP_TYPE: gaussian - DATA: - TYPE: images - TRAIN: - FAKETYPE: [Deepfakes_FaceXRay] - ANNO_FILE: Deepfakes_FaceXRay/val/val_FF_Deepfakes_Xray.json - # ANNO_FILE: FaceXRay/train/new_trainBI_FF.json - # ANNO_FILE: processed_data/new_valBI_FF.json - LABEL_FOLDER: [real, fake] - VAL: - FAKETYPE: [Deepfakes_FaceXRay] - ANNO_FILE: Deepfakes_FaceXRay/val/val_FF_Deepfakes_Xray.json - # ANNO_FILE: processed_data/new_valBI_FF.json - LABEL_FOLDER: [real, fake] - TEST: - FAKETYPE: [Deepfakes] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [256, 256, 0] # h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.3 - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - jpegcompression: 0.5 - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: False -MODEL: - type: PoseResNet - num_layers: 50 - # block: Bottleneck - layers: [3, 4, 6, 3] - heads: - hm: 1 - cls: 1 - head_conv: 64 - dropout_prob: 0.5 - fpn: True - cls_based_hm: False - use_c2: False -TRAIN: - gpus: [0,1,2,3] - batch_size: 32 - lr: 0.001 - epochs: 30 - begin_epoch: 0 - warm_up: 6 - every_val_epochs: 1 - loss: - type: CombinedFocalLoss - use_target_weight: False - cls_lmda: 1 - # dst_lmda: 0.05 - reduction: 'mean' - # dist_cal: False - cls_cal: True - optimizer: Adam - distributed: False - # pretrained: 'logs/05-12-2022/PoseResNet_heatmap_FPN_Separated_CLS_Focal_NoFrZ_model_best.pth' - tensorboard: True - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [6, 15, 20, 25] - gamma: 0.5 - freeze_backbone: False - debug: - save_hm_gt: True - save_hm_pred: True -TEST: - gpus: [0,1,2,3] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - pretrained: 'logs/08-12-2022/PoseResNet_heatmap_FPN_Separated_CLS_Focal_Deepfakes_model_best.pth' -PREPROCESSING: - DATASET: FaceForensics - SPLIT: train - ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c23/ - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - IMAGE_SUFFIX: jpg - DATA_TYPE: images - LABEL: [real, fake] - facial_lm_pretrained: pretrained/shape_predictor_68_face_landmarks.dat - DEBUG: False diff --git a/video/fake-stormer/model_code/configs/spatial/resnet_fpn_hmbin.yaml b/video/fake-stormer/model_code/configs/spatial/resnet_fpn_hmbin.yaml deleted file mode 100644 index 65d272ed59ff458c502b37b5645101b844f7932a..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/spatial/resnet_fpn_hmbin.yaml +++ /dev/null @@ -1,102 +0,0 @@ -TASK: heatmapbin -PRECISION: float64 -DATASET: - type: HeatmapFaceForensic - TRAIN: True #Switch to True for training mode, False for testing mode - ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c23/ - # FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - IMAGE_SUFFIX: jpg - FROM_FILE: True - NUM_WORKERS: 8 - PIN_MEMORY: True - IMAGE_SIZE: [256, 256] - HEATMAP_SIZE: [64, 64] - SIGMA: 2 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: gaussian - DATA: - TYPE: images - TRAIN: - FAKETYPE: [FaceXRay] - ANNO_FILE: FaceXRay/train/train_FF_Xray.json - LABEL_FOLDER: [real, fake] - VAL: - FAKETYPE: [FaceXRay] - ANNO_FILE: FaceXRay/val/val_FF_Xray.json - LABEL_FOLDER: [real, fake] - TEST: - FAKETYPE: [NeuralTextures] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [256, 256, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - color: - type: ColorJitterTransform - clahe: 0.5 - colorjitter: 0.5 - gaussianblur: 0.5 - jpegcompression: 0.0 - rgbshift: 0.5 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: False -MODEL: - type: PoseResNet - num_layers: 50 - # block: Bottleneck - layers: [3, 4, 6, 3] - heads: - hm: 1 - cls: 1 - head_conv: 64 - is_fpn: False - dropout_prob: 0.4 -TRAIN: - gpus: [0,1,2,3] - batch_size: 32 - lr: 0.001 - epochs: 30 - begin_epoch: 0 - warm_up: 6 - every_val_epochs: 1 - loss: - type: HeatmapBinaryLoss - use_target_weight: False - cls_lmda: 0.05 - reduction: 'mean' - cls_cal: True - optimizer: Adam - distributed: False - pretrained: 'logs/23-11-2022/PoseResNet_heatmapbin_model_best.pth' - tensorboard: True - resume: True - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - save_hm_gt: True - save_hm_pred: True -TEST: - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - pretrained: 'logs/16-11-2022/PoseResNet_model_best.pth' -PREPROCESSING: - DATASET: FaceForensics - SPLIT: train - ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c23/ - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - IMAGE_SUFFIX: jpg - DATA_TYPE: images - LABEL: [real, fake] - facial_lm_pretrained: pretrained/shape_predictor_68_face_landmarks.dat - DEBUG: False diff --git a/video/fake-stormer/model_code/configs/spatial/resnet_fpn_sbi.yaml b/video/fake-stormer/model_code/configs/spatial/resnet_fpn_sbi.yaml deleted file mode 100644 index 26793c43cbe38e4883de1e7b40df15dc53978e7b..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/spatial/resnet_fpn_sbi.yaml +++ /dev/null @@ -1,133 +0,0 @@ -TASK: heatmap_sbi_Separated_CLS_Focal_NoC2_50_SoftDISCRE -PRECISION: float64 -METRICS_BASE: combine -SEED: 5 -DATASET: - type: SBIFaceForensic - TRAIN: True #Switch to True for training mode, False for testing mode - ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c23/ - # ROOT: /home/users/XXX/data/FaceForensics++/c23/ - # FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - IMAGE_SUFFIX: jpg - FROM_FILE: True - NUM_WORKERS: 4 - PIN_MEMORY: True - IMAGE_SIZE: [256, 256] - HEATMAP_SIZE: [64, 64] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 2 - ADAPTIVE_SIGMA: True - HEATMAP_TYPE: gaussian - SPLIT_IMAGE: True - DATA: - TYPE: images - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 32 - VAL: 32 - TEST: 32 - TRAIN: - FAKETYPE: [FaceSBI] - # ANNO_FILE: FaceXRay/train/train_FF_Xray.json - ANNO_FILE: FaceSBI/train/train_FF_SBI.json - ANNO_FILE_R: processed_data/train_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - VAL: - FAKETYPE: [FaceSBI] - ANNO_FILE: FaceSBI/val/val_FF_SBI.json - ANNO_FILE_R: processed_data/val_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - TEST: - FAKETYPE: [FaceSBI] - ANNO_FILE_R: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [256, 256, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - #Either Scaling or Cropping, not do at the same time - cropping: [0.75, 1.25, 1] #Format: [low, high, prob] - scale: [0.1, 0.25, 1] #Format: [shift, scale, prob] - erasing: 0.5 - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - jpegcompression: 0.5 - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True -MODEL: - type: PoseResNet - num_layers: 50 - # block: Bottleneck - layers: [3, 4, 6, 3] - heads: - hm: 1 - cls: 1 - # offset: 1 - head_conv: 64 - dropout_prob: 0.5 - fpn: True - cls_based_hm: False - use_c2: False - INIT_WEIGHTS: - pretrained: True - num_layers: 50 -TRAIN: - gpus: [0] - batch_size: 16 - lr: 0.0001 - epochs: 50 - begin_epoch: 0 - warm_up: 3 - every_val_epochs: 1 - loss: - type: CombinedFocalLoss - use_target_weight: False - cls_lmda: 1 - dst_hm_cls_lmda: 0.01 - offset_lmda: 0 - hm_lmda: 100 - mse_reduction: sum - ce_reduction: mean - optimizer: SAM - distributed: False - # pretrained: 'logs/09-01-2023/PoseResNet_heatmap_sbi_Separated_CLS_Focal_NoC2_50_SoftDISCRE_model_best.pth' - tensorboard: True - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [25, 35, 45] - gamma: 0.5 - freeze_backbone: True - debug: - active: True - save_hm_gt: True - save_hm_pred: True -TEST: - gpus: [0,1,2,3] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - pretrained: 'logs/28-12-2022/PoseResNet_heatmap_sbi_based_CLS_Focal_C2_101_model_best.pth' -PREPROCESSING: - DATASET: FaceForensics - SPLIT: train - ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c23/ - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - IMAGE_SUFFIX: jpg - DATA_TYPE: images - LABEL: [real, fake] - facial_lm_pretrained: pretrained/shape_predictor_68_face_landmarks.dat - DEBUG: False diff --git a/video/fake-stormer/model_code/configs/spatial/swin_bi_small.yaml b/video/fake-stormer/model_code/configs/spatial/swin_bi_small.yaml deleted file mode 100644 index cb9e4009422357c5ab7e9cc3b39a92bdb050ebd3..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/spatial/swin_bi_small.yaml +++ /dev/null @@ -1,180 +0,0 @@ -TASK: SwinSmall224_hm10_16BI_Overlap100_Focal_AdamW_IN_1e7_FZ5_200epochs_Drop0.2_Boost250 -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: True - -DATASET: - type: FakeSFormerBI - DATA_TYPE: image - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c0 - IMAGE_SUFFIX: png - NUM_WORKERS: 7 - PIN_MEMORY: True - IMAGE_SIZE: [224, 224] - HEATMAP_SIZE: [14, 14] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: gaussian - SPLIT_IMAGE: False - DATA: - TYPE: frames - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 16 # Dynamically random number of frames in each epoch - VAL: 16 - TEST: 32 - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/dynamic_trainBI_FFv2.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/dynamic_valBI_FFv2.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: DFDC - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes] - # FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [224, 224, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.5] #Format: [crop_limit, prob] - scale: [0.15, 0.5] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True - DYNAMIC_BLENDING_PROB: False - TARGET_OVERLAP: True - -MODEL: - type: TopDownDetector - backbone: - type: SwinTransformer - embed_dims: 96 - depths: [2, 2, 18, 2] - num_heads: [3, 6, 12, 24] - window_size: 7 - mlp_ratio: 4 - qkv_bias: True - drop_rate: 0. - attn_drop_rate: 0. - drop_path_rate: 0.2 - patch_norm: True - with_cp: False - convert_weights: True - pretrained: pretrained/swin_small_patch4_window7_224_22k.pth - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 768 - heads: - hm: 1 - cls: 1 - num_deconv_layers: 1 #Config n deconv layers to build the decoder - num_deconv_filters: [768] - num_deconv_kernels: [4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - -TRAIN: - gpus: [0] - batch_size: 32 - lr: 0.0000001 - epochs: 200 - begin_epoch: -1 - warm_up: 5 - every_val_epochs: 1 - loss: - type: CombinedFocalLoss - use_target_weight: False - cls_lmda: 1 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 10 - cstency_lmda: 0 - mse_reduction: mean - ce_reduction: mean - optimizer: AdamW - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 250 - start_decay: 4 - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: True - video_level: True - pretrained: 'logs/12-03-2024/TopDownDetector_SwinSmall224_hm10_16BI_Overlap100_Focal_AdamW_IN_1e7_FZ5_Batch32_200epochs_Drop0.2_model_best.pth' diff --git a/video/fake-stormer/model_code/configs/spatial/swin_sbi_base.yaml b/video/fake-stormer/model_code/configs/spatial/swin_sbi_base.yaml deleted file mode 100644 index 8e902c1e0cd1116b7400a047540401680f58d0a2..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/spatial/swin_sbi_base.yaml +++ /dev/null @@ -1,197 +0,0 @@ -TASK: SwinBase224_hm10_8SBI_NonOverlap100_MSE_AdamW_IN_5e5_FZ5_Batch32_200epochs_Drop0.2 -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: True - -DATASET: - type: FakeSFormerSBI - DATA_TYPE: image - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c0 - IMAGE_SUFFIX: png - NUM_WORKERS: 7 - PIN_MEMORY: True - IMAGE_SIZE: [224, 224] - HEATMAP_SIZE: [14, 14] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: gaussian - SPLIT_IMAGE: False - DATA: - TYPE: frames - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 8 # Dynamically random number of frames in each epoch - VAL: 8 - TEST: 32 - DIST: [1., 1.] # Distribution of Real, Fake - 1.,1. by default - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/train_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/val_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: FF++ - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - # ROOT: /project/home/p200249/XXX/DF40_test/ - # ROOT: /project/home/p200249/XXX/DiffSwap/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes] - # FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - FAKETYPE: [original_pixel_random, Deepfakes_pixel_random, Face2Face_pixel_random, FaceSwap_pixel_random, NeuralTextures_pixel_random] - # FAKETYPE: [frames_CS_1/original, frames_CS_1/Deepfakes, frames_CS_1/Face2Face, frames_CS_1/FaceSwap, frames_CS_1/NeuralTextures, - # frames_CS_2/original, frames_CS_2/Deepfakes, frames_CS_2/Face2Face, frames_CS_2/FaceSwap, frames_CS_2/NeuralTextures, - # frames_CS_3/original, frames_CS_3/Deepfakes, frames_CS_3/Face2Face, frames_CS_3/FaceSwap, frames_CS_3/NeuralTextures, - # frames_CS_4/original, frames_CS_4/Deepfakes, frames_CS_4/Face2Face, frames_CS_4/FaceSwap, frames_CS_4/NeuralTextures, - # frames_CS_5/original, frames_CS_5/Deepfakes, frames_CS_5/Face2Face, frames_CS_5/FaceSwap, frames_CS_5/NeuralTextures] - # FAKETYPE: [Celeb-real-0.97-1.0-v2, Celeb-synthesis-0.97-1.0-v2, YouTube-real] - # FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [mobileswap, real_videos] - # FAKETYPE: [Real_DiffSwap1, DiffSwap_1] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [224, 224, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.5] #Format: [crop_limit, prob] - scale: [0.15, 0.5] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True - DYNAMIC_BLENDING_PROB: False - TARGET_OVERLAP: False - -MODEL: - type: TopDownDetector - backbone: - type: SwinTransformer - embed_dims: 128 - depths: [2, 2, 18, 2] - num_heads: [4, 8, 16, 32] - window_size: 7 - mlp_ratio: 4 - qkv_bias: True - drop_rate: 0. - attn_drop_rate: 0. - drop_path_rate: 0.2 - patch_norm: True - with_cp: False - convert_weights: True - # pretrained: pretrained/swin_base_patch4_window7_224_22k.pth - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 512 - heads: - hm: 1 - cls: 1 - num_deconv_layers: 0 #Config n deconv layers to build the decoder - num_deconv_filters: [512] - num_deconv_kernels: [4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - INIT_WEIGHTS: - pretrained: pretrained/swin_base_patch4_window7_224_22k.pth - -TRAIN: - gpus: [0,1,2,3] - batch_size: 32 - lr: 0.00005 - epochs: 200 - begin_epoch: -1 - warm_up: 5 - every_val_epochs: 1 - loss: - type: CombinedMSELoss - use_target_weight: False - cls_lmda: 1 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 10 - cstency_lmda: 0 - mse_reduction: mean - ce_reduction: mean - optimizer: AdamW - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: True - video_level: True - apr: True # Average precision/recall or normal precision/recall - no_shot_preds: 1 - pred_file: /project/home/p200249/XXX/saved_predictions/FakeSwin-B_DiffSwap_100_100.json # File to save predictions - save_preds: False - pretrained: pretrained/fakeformer/TopDownDetector_SwinBase224_hm10_8SBI_NonOverlap100_MSE_AdamW_MAE_5e5_FZ5_Batch32_200epochs_Drop0.2_model_best.pth diff --git a/video/fake-stormer/model_code/configs/spatial/swin_sbi_small.yaml b/video/fake-stormer/model_code/configs/spatial/swin_sbi_small.yaml deleted file mode 100644 index 790ea28721e73bf191bc566add146f436bb9b5d5..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/spatial/swin_sbi_small.yaml +++ /dev/null @@ -1,201 +0,0 @@ -TASK: SwinSmall224_hm10_8SBI_Overlap100_Focal_AdamW_IN22k_1e3_FZ5_Cutout_abl -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: True - -DATASET: - type: FakeSFormerSBI - DATA_TYPE: image - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c0 - IMAGE_SUFFIX: png - NUM_WORKERS: 7 - PIN_MEMORY: True - IMAGE_SIZE: [224, 224] - HEATMAP_SIZE: [14, 14] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: gaussian - SPLIT_IMAGE: False - DATA: - TYPE: frames - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 8 # Dynamically random number of frames in each epoch - VAL: 8 - TEST: 32 - DIST: [1., 1.] # Distribution of Real, Fake - 1.,1. by default - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/train_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/val_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: FF++ - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - # ROOT: /project/home/p200249/XXX/DF40_test/ - # ROOT: /project/home/p200249/XXX/DiffSwap/ - # ROOT: /home/users/XXX/data/Combine/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes] - FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # FAKETYPE: [original_pixel_random, Deepfakes_pixel_random, Face2Face_pixel_random, FaceSwap_pixel_random, NeuralTextures_pixel_random] - # FAKETYPE: [Celeb-real-0.6-0.8-v2, Celeb-synthesis-0.6-0.8-v2, YouTube-real] - # FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [Celeb_DFv1-real, Celeb_DFv2-real, DeepFakeDetection, Deepfakes, FaceSwap, method_A, NeuralTextures, - # original_videos, YouTube_DFv1-real, Celeb_DFv1-synthesis, Celeb_DFv2-synthesis, DeepFakeDetection_original, Face2Face, - # fake_test, method_B, original, real_test, YouTube_DFv2-real] - # FAKETYPE: [e4s, real_videos] - # FAKETYPE: [Real_DiffSwap1, DiffSwap_1] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [224, 224, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.5] #Format: [crop_limit, prob] - scale: [0.15, 0.5] #Format: [scale_limit, prob] - rand_erasing: [0.5, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True - DYNAMIC_BLENDING_PROB: False - TARGET_OVERLAP: True - -MODEL: - type: TopDownDetector - backbone: - type: SwinTransformer - embed_dims: 96 - depths: [2, 2, 18, 2] - num_heads: [3, 6, 12, 24] - window_size: 7 - mlp_ratio: 4 - qkv_bias: True - drop_rate: 0. - attn_drop_rate: 0. - drop_path_rate: 0.2 - patch_norm: True - with_cp: False - convert_weights: True - # pretrained: pretrained/swin_small_patch4_window7_224.pth - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 768 - heads: - # hm: 1 - cls: 1 - num_deconv_layers: 1 #Config n deconv layers to build the decoder - num_deconv_filters: [384] - num_deconv_kernels: [4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - INIT_WEIGHTS: - pretrained: pretrained/swin_small_patch4_window7_224_22k.pth - -TRAIN: - gpus: [0,1,2,3] - batch_size: 32 - lr: 0.001 - epochs: 100 - begin_epoch: -1 - warm_up: 5 - every_val_epochs: 1 - accumulation_steps: 1 - use_amp: False - loss: - type: CombinedFocalLoss # For L2-Att - use_target_weight: False - cls_lmda: 1 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 10 - cstency_lmda: 0 - mse_reduction: mean - ce_reduction: mean - # type: BinaryCrossEntropy # For binary only - # reduction: mean - optimizer: AdamW - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 1 - start_decay: 10 - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: True - video_level: True - apr: True # Average precision/recall or normal precision/recall - no_shot_preds: 1 - pred_file: /project/home/p200249/XXX/saved_predictions/FakeSwin_CDF2_100_100.json # File to save predictions - save_preds: False - pretrained: logs/29-10-2025/TopDownDetector_SwinSmall224_hm0_8SBI_Overlap100_BCE_AdamW_IN22k_5e4_FZ5_0Cutout_abl_model_best.pth diff --git a/video/fake-stormer/model_code/configs/spatial/swin_sbi_tiny.yaml b/video/fake-stormer/model_code/configs/spatial/swin_sbi_tiny.yaml deleted file mode 100644 index 276608e93755f9942473eacf0a8502d791865358..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/spatial/swin_sbi_tiny.yaml +++ /dev/null @@ -1,178 +0,0 @@ -TASK: SwinTiny224_hm10_16SBI_Overlap100_MSE_AdamW_IN_5e5_FZ5_Batch32_200epochs_Drop0.2 -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: True - -DATASET: - type: FakeSFormerSBI - DATA_TYPE: image - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c0 - IMAGE_SUFFIX: png - NUM_WORKERS: 32 - PIN_MEMORY: True - IMAGE_SIZE: [224, 224] - HEATMAP_SIZE: [14, 14] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: gaussian - SPLIT_IMAGE: False - DATA: - TYPE: frames - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 16 # Dynamically random number of frames in each epoch - VAL: 16 - TEST: 32 - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/train_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/val_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: Celeb-DFv2 - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes] - # FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [224, 224, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.5] #Format: [crop_limit, prob] - scale: [0.15, 0.5] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True - DYNAMIC_BLENDING_PROB: False - TARGET_OVERLAP: True - -MODEL: - type: TopDownDetector - backbone: - type: SwinTransformer - embed_dims: 96 - depths: [2, 2, 6, 2] - num_heads: [3, 6, 12, 24] - window_size: 7 - mlp_ratio: 4 - qkv_bias: True - drop_rate: 0. - attn_drop_rate: 0. - drop_path_rate: 0.2 - patch_norm: True - with_cp: False - convert_weights: True - pretrained: pretrained/swin_tiny_patch4_window7_224.pth - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 768 - heads: - hm: 1 - cls: 1 - num_deconv_layers: 1 #Config n deconv layers to build the decoder - num_deconv_filters: [384] - num_deconv_kernels: [4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - -TRAIN: - gpus: [0,1,2,3] - batch_size: 32 - lr: 0.00005 - epochs: 200 - begin_epoch: -1 - warm_up: 5 - every_val_epochs: 1 - loss: - type: CombinedMSELoss - use_target_weight: False - cls_lmda: 1 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 10 - cstency_lmda: 0 - mse_reduction: mean - ce_reduction: mean - optimizer: AdamW - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - -TEST: - gpus: [0,1,2,3] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: True - video_level: True - pretrained: 'logs/12-01-2024/TopDownDetector_SwinTiny224_hm10_32SBI_Overlap100_MSE_AdamW_IN_5e5_FZ5_Batch32_200epochs_Drop0.2_model_best.pth' diff --git a/video/fake-stormer/model_code/configs/spatial/vit_bi_small.yaml b/video/fake-stormer/model_code/configs/spatial/vit_bi_small.yaml deleted file mode 100644 index d226cff7e98ca824575e916f422dc6bc46a2825c..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/spatial/vit_bi_small.yaml +++ /dev/null @@ -1,184 +0,0 @@ -TASK: ViTSmall112_hm100_32BI_Overlap100_MSE_AdamW_5e5_FZ5_Batch32_200epochs_Drop0.2 -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: True - -DATASET: - type: FakeSFormerBI - DATA_TYPE: image - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c0 - IMAGE_SUFFIX: png - NUM_WORKERS: 7 - PIN_MEMORY: True - IMAGE_SIZE: [112, 112] - HEATMAP_SIZE: [14, 14] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: gaussian - SPLIT_IMAGE: False - DATA: - TYPE: frames - SAMPLES_PER_VIDEO: - ACTIVE: False - TRAIN: 32 # Dynamically random number of frames in each epoch - VAL: 32 - TEST: 32 - DIST: [1., 1.] # Distribution of Real, Fake - 1.,1. by default - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/dynamic_trainBI_FFv2.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/dynamic_valBI_FFv2.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: DFW - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - ROOT: /project/home/p200249/XXX/DFW/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes] - # FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - FAKETYPE: [fake_test, real_test] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [112, 112, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.5] #Format: [crop_limit, prob] - scale: [0.15, 0.5] #Format: [scale_limit, prob] - rand_erasing: [0.5, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True - DYNAMIC_BLENDING_PROB: False - TARGET_OVERLAP: True - -MODEL: - type: TopDownDetector - backbone: - type: ViT - img_size: [112, 112] - patch_size: 8 - embed_dim: 384 - depth: 12 - num_heads: 6 - mlp_ratio: 4 - drop_path_rate: 0.2 - qkv_bias: True - class_token: True - # pretrained: pretrained/dino_deitsmall8_pretrain.pth - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 384 - heads: - hm: 1 - cls: 1 - num_deconv_layers: 0 #Config n deconv layers to build the decoder - num_deconv_filters: [256, 256] - num_deconv_kernels: [4, 4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - INIT_WEIGHTS: - pretrained: pretrained/dino_deitsmall8_pretrain.pth - -TRAIN: - gpus: [0,1,2,3] - batch_size: 32 - lr: 0.00005 - epochs: 200 - begin_epoch: -1 - warm_up: 5 - every_val_epochs: 1 - accumulation_steps: 1 - use_amp: False - loss: - type: CombinedFocalLoss - use_target_weight: False - cls_lmda: 1 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 0 - cstency_lmda: 0 - mse_reduction: mean - ce_reduction: mean - optimizer: AdamW - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: True - video_level: True - apr: True # Average precision/recall or normal precision/recall - no_shot_preds: 1 - pred_file: /project/home/p200249/XXX/saved_predictions/FakeFormer_wBI_DFW_100_100.json # File to save predictions - save_preds: True - pretrained: pretrained/fakeformer/TopDownDetector_ViTSmall112_hm10_8SBI_Overlap100_MSE_AdamW_IN_5e5_FZ5_Batch32_200epochs_Drop0.2_Decay1e4_model_best.pth diff --git a/video/fake-stormer/model_code/configs/spatial/vit_sbi_base.yaml b/video/fake-stormer/model_code/configs/spatial/vit_sbi_base.yaml deleted file mode 100644 index f0225675a083abde4da6dfe9779e5a0c98fa09b4..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/spatial/vit_sbi_base.yaml +++ /dev/null @@ -1,187 +0,0 @@ -TASK: ViTBase224_hm10_8SBI_NonOverlap100_MSE_AdamW_IN_5e5_FZ5_Batch32_200epochs_Drop0.3 -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: True - -DATASET: - type: FakeSFormerSBI - DATA_TYPE: image - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c0 - IMAGE_SUFFIX: png - NUM_WORKERS: 7 - PIN_MEMORY: True - IMAGE_SIZE: [224, 224] - HEATMAP_SIZE: [14, 14] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: gaussian - SPLIT_IMAGE: False - DATA: - TYPE: frames - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 8 # Dynamically random number of frames in each epoch - VAL: 8 - TEST: 32 - DIST: [1., 1.] # Distribution of Real, Fake - 1.,1. by default - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/train_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/val_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: DiffSwap - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - ROOT: /project/home/p200249/XXX/DiffSwap/ - # ROOT: /project/home/p200249/XXX/DF40_test/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes] - # FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # FAKETYPE: [Celeb-real-0.6-0.8-v2, Celeb-synthesis-0.6-0.8-v2, YouTube-real] - # FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - FAKETYPE: [Real_DiffSwap1, DiffSwap_1] - # FAKETYPE: [mobileswap, real_videos] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [224, 224, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.5] #Format: [crop_limit, prob] - scale: [0.15, 0.5] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True - DYNAMIC_BLENDING_PROB: False - TARGET_OVERLAP: False - -MODEL: - type: TopDownDetector - backbone: - type: ViT - img_size: [224, 224] - patch_size: 16 - embed_dim: 768 - depth: 12 - num_heads: 12 - mlp_ratio: 4 - drop_path_rate: 0.3 - qkv_bias: True - class_token: True - # pretrained: pretrained/dino_vitbase16_pretrain.pth - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 768 - heads: - hm: 1 - cls: 1 - num_deconv_layers: 0 #Config n deconv layers to build the decoder - num_deconv_filters: [256, 256] - num_deconv_kernels: [4, 4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - INIT_WEIGHTS: - pretrained: pretrained/dino_vitbase16_pretrain.pth - -TRAIN: - gpus: [0,1,2,3] - batch_size: 32 - lr: 0.00005 - epochs: 200 - begin_epoch: -1 - warm_up: 5 - every_val_epochs: 1 - loss: - type: CombinedMSELoss - use_target_weight: False - cls_lmda: 1 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 10 - cstency_lmda: 0 - mse_reduction: mean - ce_reduction: mean - optimizer: AdamW - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: True - video_level: True - apr: True # Average precision/recall or normal precision/recall - no_shot_preds: 1 - pred_file: /project/home/p200249/XXX/saved_predictions/FakeFormer-B_DiffSwap_100_100.json # File to save predictions - save_preds: True - pretrained: pretrained/fakeformer/TopDownDetector_ViTBase224_hm10_8SBI_NonOverlap100_MSE_AdamW_IN_5e5_FZ5_Batch32_200epochs_Drop0.3_model_best.pth diff --git a/video/fake-stormer/model_code/configs/spatial/vit_sbi_large.yaml b/video/fake-stormer/model_code/configs/spatial/vit_sbi_large.yaml deleted file mode 100644 index 59767190e46178ebd8df4ffd2b32a8260fc4e7c4..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/spatial/vit_sbi_large.yaml +++ /dev/null @@ -1,171 +0,0 @@ -TASK: ViTLarge224_hm1_8SBI_NonOverlap100_MSE_AdamW_MAE_1e4_FZ5_Batch16_200epochs -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: True - -DATASET: - type: FakeSFormerSBI - DATA_TYPE: image - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c0 - IMAGE_SUFFIX: png - NUM_WORKERS: 36 - PIN_MEMORY: True - IMAGE_SIZE: [224, 224] - HEATMAP_SIZE: [14, 14] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: gaussian - SPLIT_IMAGE: False - DATA: - TYPE: frames - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 8 # Dynamically random number of frames in each epoch - VAL: 8 - TEST: 32 - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/train_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/val_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: Celeb-DFv1 - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes] - # FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [224, 224, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.5] #Format: [crop_limit, prob] - scale: [0.15, 0.5] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True - DYNAMIC_BLENDING_PROB: False - TARGET_OVERLAP: False - -MODEL: - type: TopDownDetector - backbone: - type: ViT - img_size: [224, 224] - patch_size: 16 - embed_dim: 1024 - depth: 24 - num_heads: 16 - mlp_ratio: 4 - qkv_bias: True - class_token: True - pretrained: pretrained/mae_pretrain_vit_large.pth - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 1024 - heads: - hm: 1 - cls: 1 - num_deconv_layers: 0 #Config n deconv layers to build the decoder - num_deconv_filters: [256, 256] - num_deconv_kernels: [4, 4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - -TRAIN: - gpus: [0,1,2,3] - batch_size: 16 - lr: 0.0001 - epochs: 200 - begin_epoch: -1 - warm_up: 5 - every_val_epochs: 1 - loss: - type: CombinedMSELoss - use_target_weight: False - cls_lmda: 1 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 1 - cstency_lmda: 0 - mse_reduction: mean - ce_reduction: mean - optimizer: AdamW - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: True - video_level: True - pretrained: 'logs/14-12-2023/TopDownDetector_ViTLarge224_hm1_8SBI_NonOverlap100_MSE_AdamW_MAE_1e4_FZ5_Batch16_200epochs_model_best.pth' diff --git a/video/fake-stormer/model_code/configs/spatial/vit_sbi_small.yaml b/video/fake-stormer/model_code/configs/spatial/vit_sbi_small.yaml deleted file mode 100644 index ff45c683c4c794646a289dd86494d6a6c9b87bac..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/spatial/vit_sbi_small.yaml +++ /dev/null @@ -1,208 +0,0 @@ -TASK: ViTSmall112_hm0_8SBI_Overlap100_BCE_AdamW_IN22k_5e4_FZ5_0Cutout_abl -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: True - -DATASET: - type: FakeSFormerSBI - DATA_TYPE: image - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c0 - IMAGE_SUFFIX: png - NUM_WORKERS: 7 - PIN_MEMORY: True - IMAGE_SIZE: [112, 112] - HEATMAP_SIZE: [14, 14] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: gaussian - SPLIT_IMAGE: False - DATA: - TYPE: frames - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 8 # Dynamically random number of frames in each epoch - VAL: 8 - TEST: 32 - DIST: [1., 1.] # Distribution of Real, Fake - 1.,1. by default - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/train_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/val_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: DFD - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - # ROOT: /project/home/p200249/XXX/DF40_test/ - # ROOT: /project/home/p200249/XXX/DiffSwap/ - # ROOT: /home/users/XXX/data/Combine/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes] - # FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # FAKETYPE: [original_pixel_random, Deepfakes_pixel_random, Face2Face_pixel_random, FaceSwap_pixel_random, NeuralTextures_pixel_random] - # FAKETYPE: [frames_JPEG_1/original, frames_JPEG_1/Deepfakes, frames_JPEG_1/Face2Face, frames_JPEG_1/FaceSwap, frames_JPEG_1/NeuralTextures, - # frames_JPEG_2/original, frames_JPEG_2/Deepfakes, frames_JPEG_2/Face2Face, frames_JPEG_2/FaceSwap, frames_JPEG_2/NeuralTextures, - # frames_JPEG_3/original, frames_JPEG_3/Deepfakes, frames_JPEG_3/Face2Face, frames_JPEG_3/FaceSwap, frames_JPEG_3/NeuralTextures, - # frames_JPEG_4/original, frames_JPEG_4/Deepfakes, frames_JPEG_4/Face2Face, frames_JPEG_4/FaceSwap, frames_JPEG_4/NeuralTextures, - # frames_JPEG_5/original, frames_JPEG_5/Deepfakes, frames_JPEG_5/Face2Face, frames_JPEG_5/FaceSwap, frames_JPEG_5/NeuralTextures] - # FAKETYPE: [Celeb-real-0.97-1.0-v2, Celeb-synthesis-0.97-1.0-v2, YouTube-real] - # FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [blendface, danet, deepfacelab, e4e, e4s, facedancer, faceswap, facevid2vid, fomm, fsgan, heygen, - # hyperreenact, inswap, lia, mcnet, mobileswap, MRAA, one_shot_free, pirender, sadtalker, simswap, tpsm, uniface, - # wav2lip, real_videos] - # FAKETYPE: [Real_DiffSwap1, DiffSwap_1] - # FAKETYPE: [Celeb_DFv1-real, Celeb_DFv2-real, DeepFakeDetection, Deepfakes, FaceSwap, method_A, NeuralTextures, - # original_videos, YouTube_DFv1-real, Celeb_DFv1-synthesis, Celeb_DFv2-synthesis, DeepFakeDetection_original, Face2Face, - # fake_test, method_B, original, real_test, YouTube_DFv2-real] - # FAKETYPE: [fomm, real_videos] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [112, 112, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.5] #Format: [crop_limit, prob] - scale: [0.15, 0.5] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True - DYNAMIC_BLENDING_PROB: False - TARGET_OVERLAP: True - -MODEL: - type: TopDownDetector - backbone: - type: ViT - img_size: [112, 112] - patch_size: 8 - embed_dim: 384 - depth: 12 - num_heads: 6 - mlp_ratio: 4 - drop_path_rate: 0.2 - qkv_bias: True - class_token: True - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 384 - heads: - hm: 1 - cls: 1 - num_deconv_layers: 0 #Config n deconv layers to build the decoder - num_deconv_filters: [256] - num_deconv_kernels: [4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - # conv_2direction: False - # features: 2D - INIT_WEIGHTS: - pretrained: pretrained/dino_deitsmall8_pretrain.pth - -TRAIN: - gpus: [0,1,2,3] - batch_size: 32 - lr: 0.0005 - epochs: 100 - begin_epoch: -1 - warm_up: 5 - every_val_epochs: 1 - accumulation_steps: 1 - use_amp: False - loss: - # type: CombinedFocalLoss # For L2-Att - # use_target_weight: False - # cls_lmda: 1 - # dst_hm_cls_lmda: 0 - # offset_lmda: 0 - # hm_lmda: 10 - # cstency_lmda: 0 - # mse_reduction: mean - # ce_reduction: mean - type: BinaryCrossEntropy # For binary only - reduction: mean - optimizer: AdamW - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 1 - start_decay: 10 - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: True - video_level: True - apr: True # Average precision/recall or normal precision/recall - no_shot_preds: 1 - pred_file: /project/home/p200249/XXX/saved_predictions/FakeFormer_DF40_FOMM_100_100.json # File to save predictions - save_preds: False - pretrained: logs/30-10-2025/TopDownDetector_ViTSmall112_hm10_8SBI_Overlap100_Focal_AdamW_IN22k_1e3_FZ5_Cutout_abl_model_best.pth diff --git a/video/fake-stormer/model_code/configs/spatial/xception_sbi.yaml b/video/fake-stormer/model_code/configs/spatial/xception_sbi.yaml deleted file mode 100644 index c1f14d7c86d8e7d7d682571ff845c07f6856bb27..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/spatial/xception_sbi.yaml +++ /dev/null @@ -1,169 +0,0 @@ -TASK: Xception_bin_sbi_abl -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: True - -DATASET: - type: FakeSFormerSBI - DATA_TYPE: image - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c0 - IMAGE_SUFFIX: png - NUM_WORKERS: 28 - PIN_MEMORY: True - IMAGE_SIZE: [299, 299] - HEATMAP_SIZE: [96, 96] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 3 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: gaussian - SPLIT_IMAGE: False - DATA: - TYPE: frames - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 8 # Dynamically random number of frames in each epoch - VAL: 8 - TEST: 32 - DIST: [1., 1.] # Distribution of Real, Fake - 1.,1. by default - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/train_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/val_81_FF++_processed.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: Celeb-DFv2 - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - # ROOT: /home/users/XXX/data/Combine/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes] - # FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - FAKETYPE: [Celeb-real-0.95-0.97-v2, Celeb-synthesis-0.95-0.97-v2, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [Celeb_DFv1-real, Celeb_DFv2-real, DeepFakeDetection, Deepfakes, FaceSwap, method_A, NeuralTextures, - # original_videos, YouTube_DFv1-real, Celeb_DFv1-synthesis, Celeb_DFv2-synthesis, DeepFakeDetection_original, Face2Face, - # fake_test, method_B, original, real_test, YouTube_DFv2-real] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [380, 380, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - #Either Scaling or Cropping, not do at the same time - cropping: [0.15, 0.5] #Format: [crop_limit, prob] - scale: [0.15, 0.5] #Format: [scale_limit, prob] - rand_erasing: [0.5, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.5, 0.5, 0.5] - std: [0.5, 0.5, 0.5] - DEBUG: False - DYNAMIC_FXRAY: True - DYNAMIC_BLENDING_PROB: False - TARGET_OVERLAP: True - -MODEL: - type: TopDownDetector - backbone: - type: Xception - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 2048 - heads: - cls: 1 - num_deconv_layers: 0 #Config n deconv layers to build the decoder - num_deconv_filters: [256] - num_deconv_kernels: [4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - INIT_WEIGHTS: - pretrained: True - -TRAIN: - gpus: [0,1,2,3] - batch_size: 32 - lr: 0.0001 - epochs: 100 - begin_epoch: -1 - warm_up: 5 - every_val_epochs: 1 - accumulation_steps: 1 - use_amp: False - loss: - type: BinaryCrossEntropy - reduction: mean - optimizer: SAM - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: LinearDecayLR - milestones: [30] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 1 - start_decay: 4 -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: True - video_level: True - apr: True # Average precision/recall or normal precision/recall - no_shot_preds: 1 - pred_file: /project/home/p200249/XXX/saved_predictions/FakeFormer_DF40_90_10.json # File to save predictions - save_preds: False # VERY CAREFUL - pretrained: logs/15-09-2025/TopDownDetector_Xception_bin_sbi_abl_model_best.pth diff --git a/video/fake-stormer/model_code/configs/temporal/FakeSFormer_base_c0.yaml b/video/fake-stormer/model_code/configs/temporal/FakeSFormer_base_c0.yaml deleted file mode 100644 index d8e84ea97c9a09a078b6ecc5706c1a874853f24b..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/temporal/FakeSFormer_base_c0.yaml +++ /dev/null @@ -1,213 +0,0 @@ -TASK: C0_ViTBase224_ST_hm100_tempLOC0.2_4SBI_SAM_mp0.01_temp2_0vidAug_0.25_temp_normlmsFT_IN_1e7 -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: True - -DATASET: - type: FakeSFormerSBI - DATA_TYPE: video - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c0 - IMAGE_SUFFIX: png - NUM_WORKERS: 28 - PIN_MEMORY: True - IMAGE_SIZE: [224, 224] - HEATMAP_SIZE: [14, 14] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: m_std_normalized - SPLIT_IMAGE: False - DATA: - TYPE: videos # We employ "sequential sampling" as "videos" type for Training while "uniform sampling" as "frames" type for Testing - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 4 # Dynamically random number of frames in each epoch - VAL: 4 - TEST: 4 - NUM_FRAMES: 4 - DIST: [1., 1.] # Distribution of Real, Fake - 1.,1. by default - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/train_FF++_videos_81.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/val_FF++_videos_81.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: Celeb-DFv2 - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - # ROOT: /project/home/p200249/XXX/DeeperForensics/ - # ROOT: /project/home/p200249/XXX/DiffSwap/ - # ROOT: /project/home/p200249/XXX/DF40_test/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes] - # FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [fake_val, real_val] - # FAKETYPE: [DFo_source_videos, DFo_manipulated_videos] - # FAKETYPE: [Real_DiffSwap1, DiffSwap_1] - # FAKETYPE: [blendface, danet, deepfacelab, e4e, e4s, facedancer, faceswap, facevid2vid, fomm, fsgan, heygen, - # hyperreenact, inswap, lia, mcnet, mobileswap, MRAA, one_shot_free, pirender, sadtalker, simswap, tpsm, uniface, - # wav2lip, real_videos] - # FAKETYPE: [mobileswap, real_videos] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [224, 224, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.] #Format: [crop_limit, prob] - scale: [0.15, 0.] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True - DYNAMIC_BLENDING_PROB: True # Normally only use for temporal modeling - TARGET_OVERLAP: True - MASK_PROB: 0.01 - TEMP_MASKOUT: False - -MODEL: - type: TopDownDetector - backbone: - type: TimeViT - img_size: [224, 224] - patch_size: 16 - embed_dim: 768 - depth: 12 - num_heads: 12 - mlp_ratio: 4 - drop_path_rate: 0.3 - qkv_bias: True - class_token: True - register_token: False - temp_token: True - attention_type: divided_space_time #joint_space_time, space_only - num_frames: 4 - low_level_enhanced: False - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 768 - hm_size: [14, 14] #img_size // patch_size - heads: - hm: 1 - cls: 1 - temp_loc: 4 - # num_deconv_layers: 0 #Config n deconv layers to build the decoder - # num_deconv_filters: [256, 256] - # num_deconv_kernels: [4, 4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - conv_2direction: False - use_temp_token: True - features: 3D - avg_pool: False - INIT_WEIGHTS: - pretrained: pretrained/mae_pretrain_vit_base.pth - -TRAIN: - gpus: [0,1,2,3] - batch_size: 16 - lr: 0.0000001 - epochs: 120 - begin_epoch: -1 - warm_up: 5 - every_val_epochs: 1 - accumulation_steps: 1 - use_amp: False - loss: - type: CombinedMSELoss - use_target_weight: False - cls_lmda: 0.8 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 100 - cstency_lmda: 0 - tmp_loc_lmda: 0.2 - mse_reduction: mean - ce_reduction: mean - use_ce: False - temperature: 2 - optimizer: SAM - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 500 - start_decay: 4 - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: False - video_level: True - apr: True # Average precision/recall or normal precision/recall - no_shot_preds: 1 - pred_file: /project/home/p200249/XXX/saved_predictions/fakestormer_DF40_90_10.json # File to save predictions - save_preds: False - pretrained: logs/03-12-2024/TopDownDetector_C0_ViTBase224_ST_hm100_tempLOC0.2_4SBI_SAM_mp0.01_temp2_0vidAug_0.35_temp_normlms_IN_model_best.pth diff --git a/video/fake-stormer/model_code/configs/temporal/FakeSFormer_base_c23.yaml b/video/fake-stormer/model_code/configs/temporal/FakeSFormer_base_c23.yaml deleted file mode 100644 index 54659169bc7ab430d5a8fc175a839912419f6d98..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/temporal/FakeSFormer_base_c23.yaml +++ /dev/null @@ -1,206 +0,0 @@ -TASK: C23_ViTBase224_ST_hm100_tempLOC0.2_4SBI_SAM_mp0.01_temp2_0vidAug_0.25_temp_0normlms_0CSP_spatialHead -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: True - -DATASET: - type: FakeSFormerSBI - DATA_TYPE: video - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c23 - IMAGE_SUFFIX: png - NUM_WORKERS: 32 - PIN_MEMORY: True - IMAGE_SIZE: [224, 224] - HEATMAP_SIZE: [14, 14] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: m_std_normalized - SPLIT_IMAGE: False - DATA: - TYPE: videos # We employ "sequential sampling" as "videos" type for Training while "uniform sampling" as "frames" type for Testing (better results) - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 4 # Dynamically random number of frames in each epoch - VAL: 4 - TEST: 4 - NUM_FRAMES: 4 - DIST: [1., 1.] # Distribution of Real, Fake - 1.,1. by default - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/train_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/val_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: Celeb-DFv2 - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - # ROOT: /project/home/p200249/XXX/DeeperForensics/ - # ROOT: /project/home/p200249/XXX/DiffSwap/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes] - # FAKETYPE: [frames_BW_5/original, frames_BW_5/Deepfakes, frames_BW_5/Face2Face, frames_BW_5/FaceSwap, frames_BW_5/NeuralTextures] - FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [DFo_source_videos, DFo_manipulated_videos] - # FAKETYPE: [Real_DiffSwap1, DiffSwap_1] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [224, 224, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.] #Format: [crop_limit, prob] - scale: [0.15, 0.] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True - DYNAMIC_BLENDING_PROB: True # Normally only use for temporal modeling - TARGET_OVERLAP: True - MASK_PROB: 0.01 - TEMP_MASKOUT: False - -MODEL: - type: TopDownDetector - backbone: - type: TimeViT - img_size: [224, 224] - patch_size: 16 - embed_dim: 768 - depth: 12 - num_heads: 12 - mlp_ratio: 4 - drop_path_rate: 0.3 - qkv_bias: True - class_token: True - register_token: False - temp_token: True - attention_type: divided_space_time #joint_space_time, space_only - num_frames: 4 - low_level_enhanced: False - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 768 - hm_size: [14, 14] #img_size // patch_size - heads: - hm: 1 - cls: 1 - temp_loc: 4 - # num_deconv_layers: 0 #Config n deconv layers to build the decoder - # num_deconv_filters: [256, 256] - # num_deconv_kernels: [4, 4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - conv_2direction: False - use_temp_token: True - features: 3D - avg_pool: False - INIT_WEIGHTS: - pretrained: pretrained/mae_pretrain_vit_base.pth - -TRAIN: - gpus: [0,1,2,3] - batch_size: 16 - lr: 0.0000001 - epochs: 200 - begin_epoch: -1 - warm_up: 5 - every_val_epochs: 1 - accumulation_steps: 1 - use_amp: False - loss: - type: CombinedMSELoss - use_target_weight: False - cls_lmda: 0.8 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 100 - cstency_lmda: 0 - tmp_loc_lmda: 0.2 - mse_reduction: mean - ce_reduction: mean - use_ce: False - temperature: 2 - optimizer: SAM - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 500 - start_decay: 4 - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: False - video_level: True - apr: True # Average precision/recall or normal precision/recall - no_shot_preds: 1 - pred_file: /project/home/p200249/XXX/saved_predictions/fakestormer_DF40_90_10.json # File to save predictions - save_preds: False - pretrained: 'logs/20-10-2024_FakeSTomer_gassian_abl/TopDownDetector_C23_ViTBase224_ST_hm100_tempLOC0.2_4SBI_SAM_mp0.01_temp2_0vidAug_0.35_temp_normlms_gaussian_abl_model_best.pth' diff --git a/video/fake-stormer/model_code/configs/temporal/FakeSFormer_base_c23_224p8.yaml b/video/fake-stormer/model_code/configs/temporal/FakeSFormer_base_c23_224p8.yaml deleted file mode 100644 index 3679e8e20865552398673c876e26debc34a5cf96..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/temporal/FakeSFormer_base_c23_224p8.yaml +++ /dev/null @@ -1,200 +0,0 @@ -TASK: C23_ViTBase224p8_ST_hm10_tempLOC0.2_4SBI_SAM_mp0.01_temp2_0vidAug_0.35_temp_normlms_normREAL -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: True - -DATASET: - type: FakeSFormerSBI - DATA_TYPE: video - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c23 - IMAGE_SUFFIX: png - NUM_WORKERS: 32 - PIN_MEMORY: True - IMAGE_SIZE: [224, 224] - HEATMAP_SIZE: [28, 28] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: m_std_normalized - SPLIT_IMAGE: False - DATA: - TYPE: videos # We employ "sequential sampling" as "videos" type for Training while "uniform sampling" as "frames" type for Testing - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 4 # Dynamically random number of frames in each epoch - VAL: 4 - TEST: 4 - NUM_FRAMES: 4 - DIST: [1., 1.] # Distribution of Real, Fake - 1.,1. by default - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/train_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/val_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: Celeb-DFv2 - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - # ROOT: /project/home/p200249/XXX/DeeperForensics/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes] - # FAKETYPE: [frames_BW_5/original, frames_BW_5/Deepfakes, frames_BW_5/Face2Face, frames_BW_5/FaceSwap, frames_BW_5/NeuralTextures] - FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [DFo_source_videos, DFo_manipulated_videos] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [224, 224, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.] #Format: [crop_limit, prob] - scale: [0.15, 0.] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True - DYNAMIC_BLENDING_PROB: True # Normally only use for temporal modeling - TARGET_OVERLAP: True - MASK_PROB: 0.01 - TEMP_MASKOUT: False - -MODEL: - type: TopDownDetector - backbone: - type: TimeViT - img_size: [224, 224] - patch_size: 8 - embed_dim: 768 - depth: 12 - num_heads: 12 - mlp_ratio: 4 - drop_path_rate: 0.3 - qkv_bias: True - class_token: True - register_token: False - temp_token: True - attention_type: divided_space_time #joint_space_time, space_only - num_frames: 4 - low_level_enhanced: False - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 768 - hm_size: [14, 14] #img_size // patch_size - heads: - hm: 1 - cls: 1 - temp_loc: 4 - num_deconv_layers: 0 #Config n deconv layers to build the decoder - num_deconv_filters: [256, 256] - num_deconv_kernels: [4, 4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - conv_2direction: False - use_temp_token: True - features: 3D - INIT_WEIGHTS: - pretrained: pretrained/dino_vitbase8_pretrain.pth - -TRAIN: - gpus: [0,1,2,3] - batch_size: 2 - lr: 0.00005 - epochs: 100 - begin_epoch: -1 - warm_up: 6 - every_val_epochs: 1 - accumulation_steps: 8 - use_amp: True - loss: - type: CombinedMSELoss - use_target_weight: False - cls_lmda: 0.8 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 10 - cstency_lmda: 0 - tmp_loc_lmda: 0.2 - mse_reduction: mean - ce_reduction: mean - use_ce: False - temperature: 2 - optimizer: AdamW - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 1 - start_decay: 2.5 - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: False - video_level: True - no_shot_preds: 1 - pretrained: 'logs/13-09-2024_BestOVA_FakeSTormer/TopDownDetector_C23_ViTBase224_ST_hm100_tempLOC0.2_4SBI_SAM_mp0.01_temp2_0vidAug_0.35_temp_normlms_normREAL_model_best.pth' diff --git a/video/fake-stormer/model_code/configs/temporal/FakeSFormer_base_c40.yaml b/video/fake-stormer/model_code/configs/temporal/FakeSFormer_base_c40.yaml deleted file mode 100644 index 2013d6fd2673904a1227e86530ddb2425c0ac83f..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/temporal/FakeSFormer_base_c40.yaml +++ /dev/null @@ -1,203 +0,0 @@ -TASK: C40_ViTBase224_ST_hm100_tempLOC0.1_4SBI_SAM_mp0.01_temp2_0vidAug_0.35_temp_normlms_normREALtarget -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: True - -DATASET: - type: FakeSFormerSBI - DATA_TYPE: video - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c40 - IMAGE_SUFFIX: png - NUM_WORKERS: 32 - PIN_MEMORY: True - IMAGE_SIZE: [224, 224] - HEATMAP_SIZE: [14, 14] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: m_std_normalized - SPLIT_IMAGE: False - DATA: - TYPE: videos # We employ "sequential sampling" as "videos" type for Training while "uniform sampling" as "frames" type for Testing (better results) - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 4 # Dynamically random number of frames in each epoch - VAL: 4 - TEST: 4 - NUM_FRAMES: 4 - DIST: [1., 1.] # Distribution of Real, Fake - 1.,1. by default - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c40/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c40/train_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c40/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c40/val_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: FF++ - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c40/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - # ROOT: /project/home/p200249/XXX/DeeperForensics/ - FROM_FILE: False - FAKETYPE: [original, Deepfakes] - # FAKETYPE: [videos_BW_5/original, videos_BW_5/Deepfakes, videos_BW_5/Face2Face, videos_BW_5/FaceSwap, videos_BW_5/NeuralTextures] - # FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [DFo_source_videos, DFo_manipulated_videos] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [224, 224, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.] #Format: [crop_limit, prob] - scale: [0.15, 0.] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True - DYNAMIC_BLENDING_PROB: True # Normally only use for temporal modeling - TARGET_OVERLAP: True - MASK_PROB: 0.01 - TEMP_MASKOUT: False - -MODEL: - type: TopDownDetector - backbone: - type: TimeViT - img_size: [224, 224] - patch_size: 16 - embed_dim: 768 - depth: 12 - num_heads: 12 - mlp_ratio: 4 - drop_path_rate: 0.3 - qkv_bias: True - class_token: True - register_token: False - temp_token: True - attention_type: divided_space_time #joint_space_time, space_only - num_frames: 4 - low_level_enhanced: False - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 768 - hm_size: [14, 14] #img_size // patch_size - heads: - hm: 1 - cls: 1 - temp_loc: 4 - num_deconv_layers: 0 #Config n deconv layers to build the decoder - num_deconv_filters: [256, 256] - num_deconv_kernels: [4, 4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - conv_2direction: False - use_temp_token: True - features: 3D - INIT_WEIGHTS: - pretrained: pretrained/mae_pretrain_vit_base.pth - -TRAIN: - gpus: [0,1,2,3] - batch_size: 16 - lr: 0.00005 - epochs: 100 - begin_epoch: -1 - warm_up: 3 - every_val_epochs: 1 - accumulation_steps: 1 - use_amp: False - loss: - type: CombinedMSELoss - use_target_weight: False - cls_lmda: 0.9 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 100 - cstency_lmda: 0 - tmp_loc_lmda: 0.1 - mse_reduction: mean - ce_reduction: mean - use_ce: False - temperature: 2 - optimizer: SAM - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 1 - start_decay: 2.5 - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: False - video_level: True - no_shot_preds: 1 - pretrained: 'logs/13-09-2024/TopDownDetector_C40_ViTBase224_ST_hm100_tempLOC0.1_4SBI_SAM_mp0.01_temp2_0vidAug_0.35_temp_normlms_normREALtarget_model_best.pth' diff --git a/video/fake-stormer/model_code/configs/temporal/FakeSFormer_large_c23.yaml b/video/fake-stormer/model_code/configs/temporal/FakeSFormer_large_c23.yaml deleted file mode 100644 index bbc6cbd4e406e56f67175357ac9767cbd510b666..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/temporal/FakeSFormer_large_c23.yaml +++ /dev/null @@ -1,198 +0,0 @@ -TASK: ViTLarge224_ST_hm100_tempLOC0.2_4SBI_AdamW_mp0.01_temp2_reload_0vidAug -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: True - -DATASET: - type: FakeSFormerSBI - DATA_TYPE: video - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c23 - IMAGE_SUFFIX: png - NUM_WORKERS: 32 - PIN_MEMORY: True - IMAGE_SIZE: [224, 224] - HEATMAP_SIZE: [14, 14] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: m_std_normalized - SPLIT_IMAGE: False - DATA: - TYPE: videos # We employ "sequential sampling" as "videos" type for Training while "uniform sampling" as "frames" type for Testing (better results) - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 4 # Dynamically random number of frames in each epoch - VAL: 4 - TEST: 4 - NUM_FRAMES: 4 - DIST: [1., 1.] # Distribution of Real, Fake - 1.,1. by default - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/train_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/val_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: Celeb-DFv2 - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DeeperForensics/ - FROM_FILE: False - # FAKETYPE: [original, Face2Face, FaceSwap, NeuralTextures] - # FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [DFo_source_videos, DFo_manipulated_videos] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [224, 224, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.] #Format: [crop_limit, prob] - scale: [0.15, 0.] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True - DYNAMIC_BLENDING_PROB: True # Normally only use for temporal modeling - TARGET_OVERLAP: True - MASK_PROB: 0.01 - TEMP_MASKOUT: False - -MODEL: - type: TopDownDetector - backbone: - type: TimeViT - img_size: [224, 224] - patch_size: 16 - embed_dim: 1024 - depth: 24 - num_heads: 16 - mlp_ratio: 4 - drop_path_rate: 0.3 - qkv_bias: True - class_token: True - register_token: False - temp_token: True - attention_type: divided_space_time #joint_space_time, space_only - num_frames: 4 - low_level_enhanced: False - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 1024 - hm_size: [14, 14] #img_size // patch_size - heads: - hm: 1 - cls: 1 - temp_loc: 4 - num_deconv_layers: 0 #Config n deconv layers to build the decoder - num_deconv_filters: [256, 256] - num_deconv_kernels: [4, 4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - conv_2direction: False - use_temp_token: True - features: 3D - INIT_WEIGHTS: - pretrained: pretrained/mae_pretrain_vit_large.pth - -TRAIN: - gpus: [0,1,2,3] - batch_size: 4 - lr: 0.00005 - epochs: 100 - begin_epoch: -1 - warm_up: 6 - every_val_epochs: 1 - accumulation_steps: 4 - use_amp: True - loss: - type: CombinedMSELoss - use_target_weight: False - cls_lmda: 0.8 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 100 - cstency_lmda: 0 - tmp_loc_lmda: 0.2 - mse_reduction: mean - ce_reduction: mean - use_ce: False - temperature: 2 - optimizer: AdamW - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 1 - start_decay: 4 - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: False - video_level: True - no_shot_preds: 1 - pretrained: '' diff --git a/video/fake-stormer/model_code/configs/temporal/FakeSFormer_small.yaml b/video/fake-stormer/model_code/configs/temporal/FakeSFormer_small.yaml deleted file mode 100644 index ffd117d57f7a18cb55dc0da3f66b000142c04ba9..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/temporal/FakeSFormer_small.yaml +++ /dev/null @@ -1,187 +0,0 @@ -TASK: ViTSmall112_ST_hm10_tempLOC0.1_4SBI_DymIntens_MSE_AdamW_5e5_boost1_mp0.01_discrete_fsdyn_fullSA_m_std -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: False - -DATASET: - type: FakeSFormerSBI - DATA_TYPE: video - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c0 - IMAGE_SUFFIX: png - NUM_WORKERS: 32 - PIN_MEMORY: True - IMAGE_SIZE: [112, 112] - HEATMAP_SIZE: [14, 14] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: m_std_normalized - SPLIT_IMAGE: False - DATA: - TYPE: videos # frames or videos - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 4 # Dynamically random number of frames in each epoch - VAL: 4 - TEST: 4 - NUM_FRAMES: 4 - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/train_FF++_videos_81.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c0/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/val_FF++_videos_81.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: FF++ - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200328/XXX/data/FaceForensics++/c23/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200328/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200328/XXX/data/DFDCP/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - FROM_FILE: False - FAKETYPE: [original, NeuralTextures] - # FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [112, 112, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0 - cropping: [0.15, 0] #Format: [crop_limit, prob] - scale: [0.15, 0] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True - DYNAMIC_BLENDING_PROB: True # Normally only use for temporal modeling - TARGET_OVERLAP: True - MASK_PROB: 0.01 - -MODEL: - type: TopDownDetector - backbone: - type: TimeViT - img_size: [112, 112] - patch_size: 8 - embed_dim: 384 - depth: 12 - num_heads: 6 - mlp_ratio: 4 - drop_path_rate: 0.3 - qkv_bias: True - class_token: True - register_token: True - attention_type: divided_space_time #joint_space_time, space_only - num_frames: 8 - pretrained: pretrained/dino_deitsmall8_pretrain.pth - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 384 - hm_size: [14, 14] #img_size // patch_size - heads: - hm: 1 - cls: 1 - temp_loc: 4 - num_deconv_layers: 0 #Config n deconv layers to build the decoder - num_deconv_filters: [256, 256] - num_deconv_kernels: [4, 4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - conv_2direction: True - use_temp_token: True - features: 3D - -TRAIN: - gpus: [0,1,2,3] - batch_size: 4 - lr: 0.00005 - epochs: 200 - begin_epoch: -1 - warm_up: 3 - every_val_epochs: 1 - loss: - type: CombinedMSELoss - use_target_weight: False - cls_lmda: 1 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 10 - cstency_lmda: 0 - tmp_loc_lmda: 0.1 - mse_reduction: mean - ce_reduction: mean - use_ce: False - optimizer: AdamW - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 1 - start_decay: 4 - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: False - video_level: True - no_shot_preds: 3 - pretrained: 'logs/18-07-2024/TopDownDetector_ViTSmall112_ST_hm10_tempLOC0.1_4SBI_DymIntens_MSE_SAM(AdamW)_5e5_boost1_mp0.01_discrete_fsdyn_fullSA_m_std_model_best.pth' diff --git a/video/fake-stormer/model_code/configs/temporal/FakeSFormer_small_c23.yaml b/video/fake-stormer/model_code/configs/temporal/FakeSFormer_small_c23.yaml deleted file mode 100644 index ae2e2a4fe3176b72bce90bab691015235ced9065..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/temporal/FakeSFormer_small_c23.yaml +++ /dev/null @@ -1,195 +0,0 @@ -TASK: ViTSmall112_ST_hm100_tempLOC0.3_8SBI_DymIntens_MSE_SAM(AdamW)_5e5_boost1_mp0.01_fsdyn_fullSA_m_std_c23_no_compress -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: False - -DATASET: - type: FakeSFormerSBI - DATA_TYPE: video - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c23 - IMAGE_SUFFIX: png - NUM_WORKERS: 32 - PIN_MEMORY: True - IMAGE_SIZE: [112, 112] - HEATMAP_SIZE: [14, 14] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: m_std_normalized - SPLIT_IMAGE: False - DATA: - TYPE: videos # frames or videos - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 4 # Dynamically random number of frames in each epoch - VAL: 4 - TEST: 4 - NUM_FRAMES: 4 - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/FaceForensics++/c23/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/train_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/FaceForensics++/c23/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/val_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: FF++ - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - # ROOT: /project/home/p200328/XXX/data/DeeperForensics/ - FROM_FILE: False - # FAKETYPE: [original, FaceSwap] - FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [DFo_source_videos, DFo_manipulated_videos] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [112, 112, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0 - cropping: [0.15, 0] #Format: [crop_limit, prob] - scale: [0.15, 0] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True - DYNAMIC_BLENDING_PROB: True # Normally only use for temporal modeling - TARGET_OVERLAP: True - MASK_PROB: 0.01 - -MODEL: - type: TopDownDetector - backbone: - type: TimeViT - img_size: [112, 112] - patch_size: 8 - embed_dim: 384 - depth: 12 - num_heads: 6 - mlp_ratio: 4 - drop_path_rate: 0.3 - qkv_bias: True - class_token: True - register_token: True - attention_type: divided_space_time #joint_space_time, space_only - num_frames: 8 - pretrained: pretrained/dino_deitsmall8_pretrain.pth - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 384 - hm_size: [14, 14] #img_size // patch_size - heads: - hm: 1 - cls: 1 - temp_loc: 4 - num_deconv_layers: 0 #Config n deconv layers to build the decoder - num_deconv_filters: [256, 256] - num_deconv_kernels: [4, 4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - conv_2direction: True - use_temp_token: True - features: 3D - -TRAIN: - gpus: [0,1,2,3] - batch_size: 4 - lr: 0.00005 - epochs: 100 - begin_epoch: -1 - warm_up: 3 - every_val_epochs: 1 - accumulation_steps: 1 - loss: - type: CombinedMSELoss - use_target_weight: False - cls_lmda: 0.7 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 100 - cstency_lmda: 0 - tmp_loc_lmda: 0.3 - mse_reduction: mean - ce_reduction: mean - use_ce: False - optimizer: SAM - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 1 - start_decay: 2 - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: True - video_level: True - no_shot_preds: 1 - pretrained: 'logs/18-07-2024/TopDownDetector_ViTSmall112_ST_hm10_tempLOC0.1_8SBI_DymIntens_MSE_SAM(AdamW)_5e5_boost1_mp0.01_discrete_fsdyn_fullSA_m_std_model_best.pth' diff --git a/video/fake-stormer/model_code/configs/temporal/FakeSFormer_small_c23_224p16.yaml b/video/fake-stormer/model_code/configs/temporal/FakeSFormer_small_c23_224p16.yaml deleted file mode 100644 index d86bd1908f53d9a5c63a9ebc8c6c2a7b93993d37..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/temporal/FakeSFormer_small_c23_224p16.yaml +++ /dev/null @@ -1,194 +0,0 @@ -TASK: ViTSmall224_hm100_tempLOC0.5_4SBI_DymIntens_MSE_SAM(AdamW)_mp0.01_fsdyn_fullSA_m_std_c23_0aug_newmaskdeform_test -PRECISION: float -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: False - -DATASET: - type: FakeSFormerSBI - DATA_TYPE: video - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c23 - IMAGE_SUFFIX: png - NUM_WORKERS: 32 - PIN_MEMORY: True - IMAGE_SIZE: [224, 224] - HEATMAP_SIZE: [14, 14] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: m_std_normalized - SPLIT_IMAGE: False - DATA: - TYPE: videos # frames or videos - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 4 # Dynamically random number of frames in each epoch - VAL: 4 - TEST: 4 - NUM_FRAMES: 4 - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/FaceForensics++/c23/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/train_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/FaceForensics++/c23/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/val_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: FF++ - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /project/home/p200328/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200328/XXX/data/DeeperForensics/ - FROM_FILE: False - FAKETYPE: [original, NeuralTextures] - # FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [DFo_source_videos, DFo_manipulated_videos] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [224, 224, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0 - cropping: [0.15, 0] #Format: [crop_limit, prob] - scale: [0.15, 0] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True - DYNAMIC_BLENDING_PROB: True # Normally only use for temporal modeling - TARGET_OVERLAP: True - MASK_PROB: 0.01 - -MODEL: - type: TopDownDetector - backbone: - type: TimeViT - img_size: [224, 224] - patch_size: 16 - embed_dim: 384 - depth: 12 - num_heads: 6 - mlp_ratio: 4 - drop_path_rate: 0.3 - qkv_bias: True - class_token: True - register_token: True - attention_type: divided_space_time #joint_space_time, space_only - num_frames: 4 - pretrained: pretrained/dino_deitsmall16_pretrain.pth - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 384 - hm_size: [14, 14] #img_size // patch_size - heads: - hm: 1 - cls: 1 - temp_loc: 4 - num_deconv_layers: 0 #Config n deconv layers to build the decoder - num_deconv_filters: [256, 256] - num_deconv_kernels: [4, 4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - conv_2direction: True - use_temp_token: True - features: 3D - -TRAIN: - gpus: [0,1,2,3] - batch_size: 16 - lr: 0.00005 - epochs: 100 - begin_epoch: -1 - warm_up: 5 - every_val_epochs: 1 - accumulation_steps: 1 - loss: - type: CombinedMSELoss - use_target_weight: False - cls_lmda: 0.5 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 100 - cstency_lmda: 0 - tmp_loc_lmda: 0.5 - mse_reduction: mean - ce_reduction: mean - use_ce: False - optimizer: SAM - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 1 - start_decay: 4 - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: False - video_level: True - no_shot_preds: 1 - pretrained: 'logs/04-08-2024/TopDownDetector_ViTSmall224_hm100_tempLOC0.3_4SBI_DymIntens_MSE_SAM(AdamW)_mp0.01_fsdyn_fullSA_m_std_c23_0comp_model_best.pth' diff --git a/video/fake-stormer/model_code/configs/temporal/FakeSFormer_small_c23_224p8.yaml b/video/fake-stormer/model_code/configs/temporal/FakeSFormer_small_c23_224p8.yaml deleted file mode 100644 index 02b42eb7b7bb408ce144f9e3a8aa4ba854f27c13..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/temporal/FakeSFormer_small_c23_224p8.yaml +++ /dev/null @@ -1,197 +0,0 @@ -TASK: ViTSmall224p8_ST_hm100_tempLOC0.5_4SBI_SAM_mp0.01_temp2_reload_0vidAug_0.5_harderBI -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: False - -DATASET: - type: FakeSFormerSBI - DATA_TYPE: video - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c23 - IMAGE_SUFFIX: png - NUM_WORKERS: 32 - PIN_MEMORY: True - IMAGE_SIZE: [224, 224] - HEATMAP_SIZE: [28, 28] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: m_std_normalized - SPLIT_IMAGE: False - DATA: - TYPE: videos # frames or videos - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 4 # Dynamically random number of frames in each epoch - VAL: 4 - TEST: 4 - NUM_FRAMES: 4 - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/FaceForensics++/c23/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/train_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /home/users/XXX/data/FaceForensics++/c23/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/val_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: FF++ - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /project/home/p200328/XXX/data/DFDCP/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200328/XXX/data/DeeperForensics/ - FROM_FILE: False - # FAKETYPE: [original, NeuralTextures] - FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [DFo_source_videos, DFo_manipulated_videos] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [112, 112, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0 - cropping: [0.15, 0] #Format: [crop_limit, prob] - scale: [0.15, 0] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True - DYNAMIC_BLENDING_PROB: True # Normally only use for temporal modeling - TARGET_OVERLAP: True - MASK_PROB: 0.01 - TEMP_MASKOUT: False - -MODEL: - type: TopDownDetector - backbone: - type: TimeViT - img_size: [224, 224] - patch_size: 8 - embed_dim: 384 - depth: 12 - num_heads: 6 - mlp_ratio: 4 - drop_path_rate: 0.3 - qkv_bias: True - class_token: True - register_token: True - attention_type: divided_space_time #joint_space_time, space_only - num_frames: 4 - low_level_enhanced: False - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 384 - hm_size: [28, 28] #img_size // patch_size - heads: - hm: 1 - cls: 1 - temp_loc: 4 - num_deconv_layers: 0 #Config n deconv layers to build the decoder - num_deconv_filters: [256, 256] - num_deconv_kernels: [4, 4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - conv_2direction: True - use_temp_token: True - features: 3D - INIT_WEIGHTS: - pretrained: pretrained/dino_deitsmall8_pretrain.pth - -TRAIN: - gpus: [0,1,2,3] - batch_size: 8 - lr: 0.00005 - epochs: 100 - begin_epoch: -1 - warm_up: 5 - every_val_epochs: 1 - accumulation_steps: 1 - use_amp: False - loss: - type: CombinedMSELoss - use_target_weight: False - cls_lmda: 0.5 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 100 - cstency_lmda: 0 - tmp_loc_lmda: 0.5 - mse_reduction: mean - ce_reduction: mean - use_ce: False - temperature: 2 - optimizer: SAM - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: False - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 1 - start_decay: 4 - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: False - video_level: True - no_shot_preds: 1 - pretrained: 'logs/28-08-2024/TopDownDetector_ViTSmall224p8_ST_hm10_tempLOC0.5_4SBI_SAM_mp0.01_temp2_reload_0vidAug_0.5_harderBI_model_best.pth' diff --git a/video/fake-stormer/model_code/configs/temporal/FakeSwin3D_base_c0.yaml b/video/fake-stormer/model_code/configs/temporal/FakeSwin3D_base_c0.yaml deleted file mode 100644 index ff16e2be5a54eb7de1f39ff4d1fa40678e06ded1..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/temporal/FakeSwin3D_base_c0.yaml +++ /dev/null @@ -1,206 +0,0 @@ -TASK: C0_Swin3DBase224_hm10_128CST100_EFPN_C3_32SBI_AdamW_temp2_0.25_normlms_1e8 -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: True - -DATASET: - type: FakeSFormerSBI - DATA_TYPE: video - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c23 - IMAGE_SUFFIX: png - NUM_WORKERS: 28 - PIN_MEMORY: True - IMAGE_SIZE: [224, 224] - HEATMAP_SIZE: [56, 56] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: m_std_normalized - SPLIT_IMAGE: False - DATA: - TYPE: videos - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 32 # Dynamically random number of frames in each epoch - VAL: 32 - TEST: 32 - NUM_FRAMES: 32 - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/train_FF++_videos_81.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c0/val_FF++_videos_81.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: Celeb-DFv2 - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - # ROOT: /project/home/p200249/XXX/DeeperForensics/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes] - # FAKETYPE: [frames_BW_5/original, frames_BW_5/Deepfakes, frames_BW_5/Face2Face, frames_BW_5/FaceSwap, frames_BW_5/NeuralTextures] - FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [DFo_source_videos, DFo_manipulated_videos] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [224, 224, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.] #Format: [crop_limit, prob] - scale: [0.15, 0.] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True - DYNAMIC_BLENDING_PROB: True # Normally only use for temporal modeling - TARGET_OVERLAP: True - MASK_PROB: 0. - TEMP_MASKOUT: False - -MODEL: - type: TopDownDetector - backbone: - type: SwinTransformer3D - embed_dim: 128 - patch_size: [2,4,4] - depths: [2,2,18,2] - num_heads: [4,8,16,32] - window_size: [8,7,7] - mlp_ratio: 4 - qkv_bias: True - drop_rate: 0. - attn_drop_rate: 0. - drop_path_rate: 0.2 - patch_norm: True - pretrained2d: True - pretrained: pretrained/swin_base_patch4_window7_224_22k.pth - neck: - type: EFPN3D - in_channels: 1024 - num_deconv_layers: 4 #Config n deconv layers to build the decoder - num_deconv_filters: [1024, 512, 256, 128] - num_deconv_kernels: [[1,1,1], [1,4,4], [1,4,4], [4,4,4]] - num_deconv_strides: [[1,1,1], [1,2,2], [1,2,2], [2,2,2]] - efpn: True - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 128 - hm_size: [14, 14] #img_size // patch_size - heads: - hm: 1 - cls: 1 - cstency: 128 - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - conv_2direction: False - use_temp_token: True - features: 3D - avg_pool: True - act: GELU - INIT_WEIGHTS: - pretrained: pretrained/swin_base_patch4_window7_224_22k.pth - -TRAIN: - gpus: [0,1,2,3] - batch_size: 2 - lr: 0.0000001 - epochs: 200 - begin_epoch: -1 - warm_up: 10 - every_val_epochs: 1 - accumulation_steps: 8 - use_amp: True - loss: - type: CombinedMSELoss - use_target_weight: False - cls_lmda: 1 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 10 - cstency_lmda: 100 - tmp_loc_lmda: 0 - mse_reduction: mean - ce_reduction: mean - use_ce: False - feature: 3D - temperature: 2 - optimizer: AdamW - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 500 - start_decay: 4 - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: False - video_level: True - no_shot_preds: 1 - pretrained: 'logs/22-01-2025/TopDownDetector_C23_Swin3DBase224_hm10_256CST100_EFPN_C3_32SBI_AdamW_temp2_0.25_normlms_normREAL_1e8_model_best.pth' diff --git a/video/fake-stormer/model_code/configs/temporal/FakeSwin3D_base_c23.yaml b/video/fake-stormer/model_code/configs/temporal/FakeSwin3D_base_c23.yaml deleted file mode 100644 index 27b483d65a8e64ce0b1aa0b7cba76d6750b2d9eb..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/temporal/FakeSwin3D_base_c23.yaml +++ /dev/null @@ -1,206 +0,0 @@ -TASK: C23_Swin3DBase224_hm10_128CST100_EFPN_C3_4SBI_AdamW_temp2_0.25_normlms_1e8 -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: True - -DATASET: - type: FakeSFormerSBI - DATA_TYPE: video - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c23 - IMAGE_SUFFIX: png - NUM_WORKERS: 28 - PIN_MEMORY: True - IMAGE_SIZE: [224, 224] - HEATMAP_SIZE: [56, 56] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: m_std_normalized - SPLIT_IMAGE: False - DATA: - TYPE: frames - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 32 # Dynamically random number of frames in each epoch - VAL: 32 - TEST: 32 - NUM_FRAMES: 32 - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/train_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/val_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: DFDC - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - # ROOT: /project/home/p200249/XXX/DeeperForensics/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes] - # FAKETYPE: [frames_BW_5/original, frames_BW_5/Deepfakes, frames_BW_5/Face2Face, frames_BW_5/FaceSwap, frames_BW_5/NeuralTextures] - # FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [DFo_source_videos, DFo_manipulated_videos] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [224, 224, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.] #Format: [crop_limit, prob] - scale: [0.15, 0.] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True - DYNAMIC_BLENDING_PROB: True # Normally only use for temporal modeling - TARGET_OVERLAP: True - MASK_PROB: 0. - TEMP_MASKOUT: False - -MODEL: - type: TopDownDetector - backbone: - type: SwinTransformer3D - embed_dim: 128 - patch_size: [2,4,4] - depths: [2,2,18,2] - num_heads: [4,8,16,32] - window_size: [8,7,7] - mlp_ratio: 4 - qkv_bias: True - drop_rate: 0. - attn_drop_rate: 0. - drop_path_rate: 0.2 - patch_norm: True - pretrained2d: True - pretrained: pretrained/swin_base_patch4_window7_224_22k.pth - neck: - type: EFPN3D - in_channels: 1024 - num_deconv_layers: 4 #Config n deconv layers to build the decoder - num_deconv_filters: [1024, 512, 256, 128] - num_deconv_kernels: [[1,1,1], [1,4,4], [1,4,4], [4,4,4]] - num_deconv_strides: [[1,1,1], [1,2,2], [1,2,2], [2,2,2]] - efpn: True - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 128 - hm_size: [14, 14] #img_size // patch_size - heads: - hm: 1 - cls: 1 - cstency: 128 - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - conv_2direction: False - use_temp_token: True - features: 3D - avg_pool: True - act: GELU - INIT_WEIGHTS: - pretrained: pretrained/swin_base_patch4_window7_224_22k.pth - -TRAIN: - gpus: [0,1,2,3] - batch_size: 8 - lr: 0.00000001 - epochs: 100 - begin_epoch: -1 - warm_up: 5 - every_val_epochs: 1 - accumulation_steps: 1 - use_amp: False - loss: - type: CombinedMSELoss - use_target_weight: False - cls_lmda: 1 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 10 - cstency_lmda: 100 - tmp_loc_lmda: 0 - mse_reduction: mean - ce_reduction: mean - use_ce: False - feature: 3D - temperature: 2 - optimizer: AdamW - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: False - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 5000 - start_decay: 4 - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: False - video_level: True - no_shot_preds: 1 - pretrained: 'logs/18-03-2025/TopDownDetector_C23_Swin3DBase224_hm10_128CST100_EFPN_C3_32SBI_AdamW_temp2_0.25_normlms_1e7_model_best.pth' diff --git a/video/fake-stormer/model_code/configs/temporal/ResNet3D_EFPN3D_hm3D_c23.yaml b/video/fake-stormer/model_code/configs/temporal/ResNet3D_EFPN3D_hm3D_c23.yaml deleted file mode 100644 index 052f30491258b142cb7252a70c34588ea7661c6a..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/temporal/ResNet3D_EFPN3D_hm3D_c23.yaml +++ /dev/null @@ -1,204 +0,0 @@ -TASK: C23_ResNet3D224_hm10_256CST100_EFPN_C2_32SBI_AdamW_temp2_0.25_normlms_1e7_mstd -PRECISION: float64 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: True - -DATASET: - type: FakeSFormerSBI - DATA_TYPE: video - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c23 - IMAGE_SUFFIX: png - NUM_WORKERS: 32 - PIN_MEMORY: True - IMAGE_SIZE: [224, 224] - HEATMAP_SIZE: [56, 56] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: m_std_normalized - SPLIT_IMAGE: False - DATA: - TYPE: videos - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 32 # Dynamically random number of frames in each epoch - VAL: 32 - TEST: 32 - NUM_FRAMES: 32 - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/train_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: True - FAKETYPE: [Deepfakes, Face2Face, FaceSwap, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/val_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: Celeb-DFv2 - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c23/ - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /data/deepfake_cluster/datasets_df/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /data/deepfake_cluster/datasets_df/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /data/deepfake_cluster/datasets_df/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - # ROOT: /data/deepfake_cluster/datasets_df/DFW/ - # ROOT: /project/home/p200249/XXX/DeeperForensics/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes, Face2Face, FaceSwap, NeuralTextures] - # FAKETYPE: [original, FaceShifter] - # FAKETYPE: [videos_BW_5/original, videos_BW_5/Deepfakes, videos_BW_5/Face2Face, videos_BW_5/FaceSwap, videos_BW_5/NeuralTextures] - FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake_method, real_method] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [DFo_source_videos, DFo_manipulated_videos] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [224, 224, 0] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.] #Format: [crop_limit, prob] - scale: [0.15, 0.] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - DEBUG: False - DYNAMIC_FXRAY: True - DYNAMIC_BLENDING_PROB: True # Normally only use for temporal modeling - TARGET_OVERLAP: True - MASK_PROB: 0. - TEMP_MASKOUT: False - -MODEL: - type: TopDownDetector - backbone: - type: ResNet3D - block: Bottleneck - layers: [3, 4, 6, 3] - block_inplanes: [64, 128, 256, 512] - neck: - type: EFPN3D - in_channels: 2048 - num_deconv_layers: 4 #Config n deconv layers to build the decoder - num_deconv_filters: [1024, 512, 256, 128] - num_deconv_kernels: [[4,4,4], [4,4,4], [4,4,4], [4,1,1]] - num_deconv_strides: [[2,2,2], [2,2,2], [2,2,2], [2,1,1]] - efpn: True - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 128 - heads: - cls: 1 - hm: 1 - cstency: 128 - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - conv_2direction: False - use_temp_token: True - features: 3D - avg_pool: True - act: RELU - INIT_WEIGHTS: - pretrained: pretrained/r3d50_KS_200ep.pth - -TRAIN: - gpus: [0,1,2,3] - batch_size: 4 - lr: 0.0000001 - epochs: 200 - begin_epoch: -1 - warm_up: 10 - every_val_epochs: 1 - accumulation_steps: 4 - use_amp: True - loss: - type: CombinedMSELoss - use_target_weight: False - cls_lmda: 1 - dst_hm_cls_lmda: 0 - offset_lmda: 0 - hm_lmda: 10 - cstency_lmda: 100 - tmp_loc_lmda: 0 - mse_reduction: mean - ce_reduction: mean - use_ce: False - feature: 3D - temperature: 2 - optimizer: AdamW - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 500 - start_decay: 4 - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: False - video_level: True - no_shot_preds: 1 - pretrained: 'logs/30-09-2024/TopDownDetector_C23_Res3D224_hm0_tempLOC0_8SBI_Adam_mp0.01_temp1_0vidAug_0.35_normlms_SBV_ablation_model_best.pth' diff --git a/video/fake-stormer/model_code/configs/temporal/bin_cls/ResNet3D_c23.yaml b/video/fake-stormer/model_code/configs/temporal/bin_cls/ResNet3D_c23.yaml deleted file mode 100644 index ef2fceea9d28e80ea3f68cd244a120683f174dc8..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/temporal/bin_cls/ResNet3D_c23.yaml +++ /dev/null @@ -1,166 +0,0 @@ -TASK: C23_Res3D224_binary_8SBI_Adam_0vidAug_Deepfakes -PRECISION: float32 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: False - -DATASET: - type: BinaryFaceForensic - DATA_TYPE: video - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c23 - IMAGE_SUFFIX: png - NUM_WORKERS: 32 - PIN_MEMORY: True - IMAGE_SIZE: [224, 224] - HEATMAP_SIZE: [14, 14] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: m_std_normalized - SPLIT_IMAGE: False - DATA: - TYPE: frames - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 8 # Dynamically random number of frames in each epoch - VAL: 8 - TEST: 8 - NUM_FRAMES: 8 - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: False - FAKETYPE: [original, Deepfakes] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/train_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: False - FAKETYPE: [original, Deepfakes] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/val_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: DFW - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - ROOT: /project/home/p200249/XXX/DFW/ - # ROOT: /project/home/p200249/XXX/DeeperForensics/ - FROM_FILE: False - # FAKETYPE: [original, Deepfakes, FaceSwap, Face2Face, NeuralTextures] - # FAKETYPE: [videos_BW_5/original, videos_BW_5/Deepfakes, videos_BW_5/Face2Face, videos_BW_5/FaceSwap, videos_BW_5/NeuralTextures] - # FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - FAKETYPE: [fake_test, real_test] - # FAKETYPE: [DFo_source_videos, DFo_manipulated_videos] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [224, 224, 1] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.5] #Format: [crop_limit, prob] - scale: [0.15, 0.5] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - -MODEL: - type: TopDownDetector - backbone: - type: ResNet3D - block: Bottleneck - layers: [3, 4, 6, 3] - block_inplanes: [64, 128, 256, 512] - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 2048 - heads: - cls: 1 - num_deconv_layers: 0 #Config n deconv layers to build the decoder - num_deconv_filters: [256, 256] - num_deconv_kernels: [4, 4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - INIT_WEIGHTS: - pretrained: null - -TRAIN: - gpus: [0,1,2,3] - batch_size: 16 - lr: 0.00005 - epochs: 100 - begin_epoch: -1 - warm_up: 3 - every_val_epochs: 1 - accumulation_steps: 1 - use_amp: False - loss: - type: BinaryCrossEntropy - reduction: mean - optimizer: Adam - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 1 - start_decay: 2.5 - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: False - video_level: True - no_shot_preds: 1 - pretrained: 'logs/17-09-2024/TopDownDetector_C23_Res3D224_binary_8SBI_Adam_0vidAug_Deepfakes_model_best.pth' diff --git a/video/fake-stormer/model_code/configs/temporal/bin_cls/ResNet3D_c40.yaml b/video/fake-stormer/model_code/configs/temporal/bin_cls/ResNet3D_c40.yaml deleted file mode 100644 index 1233deee5e9cbbd51b94e3f1e189a224ccd5009c..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/temporal/bin_cls/ResNet3D_c40.yaml +++ /dev/null @@ -1,166 +0,0 @@ -TASK: C40_Res3D224_binary_8SBI_Adam_0vidAug_NeuralTextures -PRECISION: float32 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: False - -DATASET: - type: BinaryFaceForensic - DATA_TYPE: video - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c40 - IMAGE_SUFFIX: png - NUM_WORKERS: 32 - PIN_MEMORY: True - IMAGE_SIZE: [224, 224] - HEATMAP_SIZE: [14, 14] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: m_std_normalized - SPLIT_IMAGE: False - DATA: - TYPE: videos - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 8 # Dynamically random number of frames in each epoch - VAL: 8 - TEST: 8 - NUM_FRAMES: 8 - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c40/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: False - FAKETYPE: [original, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/train_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c40/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: False - FAKETYPE: [original, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/val_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: FF++ - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c40/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - # ROOT: /project/home/p200249/XXX/DeeperForensics/ - FROM_FILE: False - FAKETYPE: [original, Deepfakes] - # FAKETYPE: [videos_BW_5/original, videos_BW_5/Deepfakes, videos_BW_5/Face2Face, videos_BW_5/FaceSwap, videos_BW_5/NeuralTextures] - # FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [DFo_source_videos, DFo_manipulated_videos] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [224, 224, 1] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.5] #Format: [crop_limit, prob] - scale: [0.15, 0.5] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - -MODEL: - type: TopDownDetector - backbone: - type: ResNet3D - block: Bottleneck - layers: [3, 4, 6, 3] - block_inplanes: [64, 128, 256, 512] - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 2048 - heads: - cls: 1 - num_deconv_layers: 0 #Config n deconv layers to build the decoder - num_deconv_filters: [256, 256] - num_deconv_kernels: [4, 4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - INIT_WEIGHTS: - pretrained: null - -TRAIN: - gpus: [0,1,2,3] - batch_size: 16 - lr: 0.00005 - epochs: 100 - begin_epoch: -1 - warm_up: 3 - every_val_epochs: 1 - accumulation_steps: 1 - use_amp: False - loss: - type: BinaryCrossEntropy - reduction: mean - optimizer: Adam - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 1 - start_decay: 2.5 - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: False - video_level: True - no_shot_preds: 1 - pretrained: 'logs/02-10-2024/TopDownDetector_C40_Res3D224_binary_8SBI_Adam_0vidAug_NeuralTextures_model_best.pth' diff --git a/video/fake-stormer/model_code/configs/temporal/bin_cls/TimeSFormer_base_c23.yaml b/video/fake-stormer/model_code/configs/temporal/bin_cls/TimeSFormer_base_c23.yaml deleted file mode 100644 index 94df7b21216391e0beb5dadc75a9785179cf5994..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/temporal/bin_cls/TimeSFormer_base_c23.yaml +++ /dev/null @@ -1,181 +0,0 @@ -TASK: C23_TimeBase224_ST_binary_8SBI_AdamW_0vidAug_temp_FaceSwap -PRECISION: float32 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: False - -DATASET: - type: BinaryFaceForensic - DATA_TYPE: video - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c23 - IMAGE_SUFFIX: png - NUM_WORKERS: 32 - PIN_MEMORY: True - IMAGE_SIZE: [224, 224] - HEATMAP_SIZE: [14, 14] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: m_std_normalized - SPLIT_IMAGE: False - DATA: - TYPE: videos - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 8 # Dynamically random number of frames in each epoch - VAL: 8 - TEST: 8 - NUM_FRAMES: 8 - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: False - FAKETYPE: [original, FaceSwap] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/train_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: False - FAKETYPE: [original, FaceSwap] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/val_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: Celeb-DFv2 - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - # ROOT: /project/home/p200249/XXX/FaceForensics++/c23/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - # ROOT: /project/home/p200249/XXX/DeeperForensics/ - FROM_FILE: False - # FAKETYPE: [original, FaceSwap] - # FAKETYPE: [videos_BW_5/original, videos_BW_5/Deepfakes, videos_BW_5/Face2Face, videos_BW_5/FaceSwap, videos_BW_5/NeuralTextures] - FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [DFo_source_videos, DFo_manipulated_videos] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [224, 224, 1] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.5] #Format: [crop_limit, prob] - scale: [0.15, 0.5] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - -MODEL: - type: TopDownDetector - backbone: - type: TimeViT - img_size: [224, 224] - patch_size: 16 - embed_dim: 768 - depth: 12 - num_heads: 12 - mlp_ratio: 4 - drop_path_rate: 0.3 - qkv_bias: True - class_token: True - register_token: False - temp_token: True - attention_type: divided_space_time #joint_space_time, space_only - num_frames: 8 - low_level_enhanced: False - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 768 - hm_size: [14, 14] #img_size // patch_size - heads: - cls: 1 - num_deconv_layers: 0 #Config n deconv layers to build the decoder - num_deconv_filters: [256, 256] - num_deconv_kernels: [4, 4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - conv_2direction: False - use_temp_token: True - features: 3D - INIT_WEIGHTS: - pretrained: null - -TRAIN: - gpus: [0,1,2,3] - batch_size: 16 - lr: 0.00005 - epochs: 100 - begin_epoch: -1 - warm_up: 3 - every_val_epochs: 1 - accumulation_steps: 1 - use_amp: False - loss: - type: BinaryCrossEntropy - reduction: mean - optimizer: AdamW - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 1 - start_decay: 2.5 - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: False - video_level: True - no_shot_preds: 1 - pretrained: 'logs/03-10-2024/TopDownDetector_C23_TimeBase224_ST_binary_8SBI_AdamW_0vidAug_temp_FaceSwap_model_best.pth' diff --git a/video/fake-stormer/model_code/configs/temporal/bin_cls/TimeSFormer_base_c40.yaml b/video/fake-stormer/model_code/configs/temporal/bin_cls/TimeSFormer_base_c40.yaml deleted file mode 100644 index b62fdf3390fbe87fc00f146ae81cf248112bfd76..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/configs/temporal/bin_cls/TimeSFormer_base_c40.yaml +++ /dev/null @@ -1,181 +0,0 @@ -TASK: C40_TimeBase224_ST_binary_8SBI_AdamW_0vidAug_temp_NeuralTextures -PRECISION: float32 -METRICS_BASE: binary -SEED: 317 -DATA_RELOAD: False - -DATASET: - type: BinaryFaceForensic - DATA_TYPE: video - TRAIN: True #Switch to True for training mode, False for testing mode - COMPRESSION: c40 - IMAGE_SUFFIX: png - NUM_WORKERS: 32 - PIN_MEMORY: True - IMAGE_SIZE: [224, 224] - HEATMAP_SIZE: [14, 14] #[IMAGE_SIZE//4, IMAGE_SIZE//4] - SIGMA: 1 - ADAPTIVE_SIGMA: False - HEATMAP_TYPE: m_std_normalized - SPLIT_IMAGE: False - DATA: - TYPE: videos - SAMPLES_PER_VIDEO: - ACTIVE: True - TRAIN: 8 # Dynamically random number of frames in each epoch - VAL: 8 - TEST: 8 - NUM_FRAMES: 8 - TRAIN: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c40/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: False - FAKETYPE: [original, NeuralTextures] - # ANNO_FILE: train/frames/FaceXRay/train_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/train_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - VAL: - NAME: FF++ # This field to define datasets that can be used to train/in-dataset/cross-dataset evaluation - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c40/ - # ROOT: /data/deepfake_cluster/datasets_df/FaceForensics++/c0/ - FROM_FILE: False - FAKETYPE: [original, NeuralTextures] # Choosing Deepfake techniques to be loaded for dataloader - # ANNO_FILE: val/frames/FaceXRay/val_FF_FaceXRay.json - ANNO_FILE: processed_data/c23/val_FaceForensics_videos_81.json - LABEL_FOLDER: [real, fake] - TEST: - NAME: FF++ - # ROOT: /home/users/XXX/data/FaceForensics++/c0/ - ROOT: /project/home/p200249/XXX/FaceForensics++/c40/ - # ROOT: /home/users/XXX/data/Celeb-DFv1/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv1/ - # ROOT: /data/deepfake_cluster/datasets_df/Celeb-DFv1/ - # ROOT: /home/users/XXX/data/Celeb-DFv2/ - # ROOT: /project/home/p200249/XXX/Celeb-DFv2/ - # ROOT: /home/users/XXX/data/DFDCP/ - # ROOT: /project/home/p200249/XXX/DFDCP/ - # ROOT: /home/users/XXX/data/DFDC/ - # ROOT: /project/home/p200249/XXX/DFDC/ - # ROOT: /home/users/XXX/data/DFD/ - # ROOT: /project/home/p200249/XXX/DFD/ - # ROOT: /home/users/XXX/data/DFW/ - # ROOT: /project/home/p200249/XXX/DFW/ - # ROOT: /project/home/p200249/XXX/DeeperForensics/ - FROM_FILE: False - FAKETYPE: [original, FaceSwap] - # FAKETYPE: [videos_BW_5/original, videos_BW_5/Deepfakes, videos_BW_5/Face2Face, videos_BW_5/FaceSwap, videos_BW_5/NeuralTextures] - # FAKETYPE: [Celeb-real, Celeb-synthesis, YouTube-real] - # FAKETYPE: [method_A, method_B, original_videos] - # FAKETYPE: [fake, real] - # FAKETYPE: [DeepFakeDetection_original, DeepFakeDetection] - # FAKETYPE: [fake_test, real_test] - # FAKETYPE: [DFo_source_videos, DFo_manipulated_videos] - ANNO_FILE: FaceXRay/test/test_FF_Xray.json - LABEL_FOLDER: [real, fake] - TRANSFORM: - geometry: - type: GeometryTransform - resize: [224, 224, 1] #h, w, p=probability. If no affine transform, set p=1 - normalize: 0 - horizontal_flip: 0.5 - cropping: [0.15, 0.5] #Format: [crop_limit, prob] - scale: [0.15, 0.5] #Format: [scale_limit, prob] - rand_erasing: [0.0, 1] #Format: [p, max_count] - color: - type: ColorJitterTransform - clahe: 0.0 - colorjitter: 0.3 - gaussianblur: 0.3 - gaussnoise: 0.3 - jpegcompression: [0.5, 40, 100] # prob, lower and upper quality respectively - rgbshift: 0.3 - randomcontrast: 0.0 - randomgamma: 0.5 - randombrightness: 1 - huesat: 1 - normalize: - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - -MODEL: - type: TopDownDetector - backbone: - type: TimeViT - img_size: [224, 224] - patch_size: 16 - embed_dim: 768 - depth: 12 - num_heads: 12 - mlp_ratio: 4 - drop_path_rate: 0.3 - qkv_bias: True - class_token: True - register_token: False - temp_token: True - attention_type: divided_space_time #joint_space_time, space_only - num_frames: 8 - low_level_enhanced: False - keypoint_head: - type: TopdownHeatmapSimpleHead - in_channels: 768 - hm_size: [14, 14] #img_size // patch_size - heads: - cls: 1 - num_deconv_layers: 0 #Config n deconv layers to build the decoder - num_deconv_filters: [256, 256] - num_deconv_kernels: [4, 4] - loss_keypoint: - type: JointsMSELoss - use_target_weight: False - extra: - final_conv_kernel: 3 - num_conv_layers: 1 - conv_2direction: False - use_temp_token: True - features: 3D - INIT_WEIGHTS: - pretrained: null - -TRAIN: - gpus: [0,1,2,3] - batch_size: 16 - lr: 0.00005 - epochs: 100 - begin_epoch: -1 - warm_up: 3 - every_val_epochs: 1 - accumulation_steps: 1 - use_amp: False - loss: - type: BinaryCrossEntropy - reduction: mean - optimizer: AdamW - distributed: False - pretrained: '' - tensorboard: False - resume: False - lr_scheduler: - # type: MultiStepLR - milestones: [5, 15, 20, 25] - gamma: 0.5 - freeze_backbone: True - debug: - active: False - save_hm_gt: True - save_hm_pred: True - booster: 1 - start_decay: 2.5 - -TEST: - gpus: [0] - subtask: 'eval' - test_file: '' - vis_hm: True - threshold: 0.5 - flip_test: False - video_level: True - no_shot_preds: 1 - pretrained: 'logs/03-10-2024/TopDownDetector_C40_TimeBase224_ST_binary_8SBI_AdamW_0vidAug_temp_NeuralTextures_model_best.pth' diff --git a/video/fake-stormer/model_code/datasets/__init__.py b/video/fake-stormer/model_code/datasets/__init__.py deleted file mode 100644 index 2fa76c040a21d56ea365398bcff98e9866f2eacc..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/__init__.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -from .builder import DATASETS, PIPELINES, build_dataset -from .face_forensic_binary import BinaryFaceForensic -from .face_forensic_hm import HeatmapFaceForensic -from .face_forensic_sbi import SBIFaceForensic -from .fakesformer_bi import FakeSFormerBI -from .fakesformer_sbi import FakeSFormerSBI -from .pipelines import * - -__all__ = [ - "GeometryTransform", - "BinaryFaceForensic", - "ColorJitterTransform", - "PIPELINES", - "DATASETS", - "build_dataset", - "HeatmapFaceForensic", - "SBIFaceForensic", - "FakeSFormerSBI", - "FakeSFormerBI", -] diff --git a/video/fake-stormer/model_code/datasets/builder.py b/video/fake-stormer/model_code/datasets/builder.py deleted file mode 100644 index 35f09797618a41e24f0933fad3408696987a36f8..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/builder.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -import os -import sys -from typing import Any, Dict, Optional - -if not os.getcwd() in sys.path: - sys.path.append(os.getcwd()) - -from register.register import Registry, build_from_cfg - -PIPELINES = Registry("Pipeline", build_func=build_from_cfg) -DATASETS = Registry("Dataset", build_func=build_from_cfg) - - -def build_pipeline( - cfg, - pipeline: Registry, - build_func=build_from_cfg, - default_args: Optional[Dict] = None, -) -> Any: - return build_func(cfg, pipeline, default_args) - - -def build_dataset( - cfg, - dataset: Registry, - build_func=build_from_cfg, - default_args: Optional[Dict] = None, -) -> Any: - return build_func(cfg, dataset, default_args) diff --git a/video/fake-stormer/model_code/datasets/celebDF_v1.py b/video/fake-stormer/model_code/datasets/celebDF_v1.py deleted file mode 100644 index dfa23f74ff8cd4c121f356541048249cb3666346..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/celebDF_v1.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- -import os -from glob import glob - -import numpy as np - -from .builder import DATASETS -from .common import CommonDataset - - -@DATASETS.register_module() -class CDFV1(CommonDataset): - def __init__(self, cfg, **kwargs): - super().__init__(cfg, **kwargs) - - def _load_from_path(self, split): - assert os.path.exists( - self._cfg.DATA[self.split.upper()].ROOT - ), "Root path to dataset can not be None!" - data = self._cfg["DATA"] - data_type = data.TYPE - fake_types = self._cfg.DATA[split.upper()]["FAKETYPE"] - img_paths, labels, mask_paths, ot_props = [], [], [], [] - - # Load image data for each type of fake techniques - for idx, ft in enumerate(fake_types): - data_dir = os.path.join( - self._cfg.DATA[self.split.upper()].ROOT, self.split, data_type, ft - ) - if not os.path.exists(data_dir): - raise ValueError("Data Directory can not be invalid!") - - for sub_dir in os.listdir(data_dir): - sub_dir_path = os.path.join(data_dir, sub_dir) - img_paths_ = glob(f"{sub_dir_path}/*.{self._cfg.IMAGE_SUFFIX}") - - img_paths.extend(img_paths_) - labels.extend(np.full(len(img_paths_), int("Celeb-synthesis" in ft))) - - print("{} image paths have been loaded from CDFv1!".format(len(img_paths))) - return img_paths, labels, mask_paths, ot_props diff --git a/video/fake-stormer/model_code/datasets/celebDF_v2.py b/video/fake-stormer/model_code/datasets/celebDF_v2.py deleted file mode 100644 index 61c7de7d9e982f9d82add4afba40c5b8e27db569..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/celebDF_v2.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -import os -from glob import glob - -import numpy as np - -from .builder import DATASETS -from .common import CommonDataset - - -@DATASETS.register_module() -class CDFV2(CommonDataset): - def __init__(self, cfg, **kwargs): - super().__init__(cfg, **kwargs) - - def _load_from_path(self, split): - assert os.path.exists( - self._cfg.DATA[self.split.upper()].ROOT - ), "Root path to dataset can not be None!" - data = self._cfg["DATA"] - data_type = data.TYPE - fake_types = self._cfg.DATA[split.upper()]["FAKETYPE"] - img_paths, labels, mask_paths, ot_props = [], [], [], [] - - count = 0 - n_samples = 100000 - - # Load image data for each type of fake techniques - for idx, ft in enumerate(fake_types): - data_dir = os.path.join( - self._cfg.DATA[self.split.upper()].ROOT, self.split, data_type, ft - ) - if not os.path.exists(data_dir): - raise ValueError("Data Directory can not be invalid!") - - for sub_dir in os.listdir(data_dir): - sub_dir_path = os.path.join(data_dir, sub_dir) - img_paths_ = glob(f"{sub_dir_path}/*.{self._cfg.IMAGE_SUFFIX}") - - if "Celeb-synthesis" in ft: - if count < n_samples: - n_add = ( - len(img_paths_) - if ((n_samples - count) > len(img_paths_)) - else (n_samples - count) - ) - count += n_add - print(f"n fake samples added --- {count}") - else: - continue - else: - n_add = len(img_paths_) - - img_paths.extend(img_paths_[:n_add]) - labels.extend(np.full(n_add, int("Celeb-synthesis" in ft))) - - print("{} image paths have been loaded from CDFv2!".format(len(img_paths))) - return img_paths, labels, mask_paths, ot_props diff --git a/video/fake-stormer/model_code/datasets/combine.py b/video/fake-stormer/model_code/datasets/combine.py deleted file mode 100644 index 2f69a304f4fac0411b498b1fa89f97f82c08d25d..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/combine.py +++ /dev/null @@ -1,47 +0,0 @@ -# -*- coding: utf-8 -*- -import os -from glob import glob - -import numpy as np - -from .builder import DATASETS -from .common import CommonDataset - - -@DATASETS.register_module() -class Combine(CommonDataset): - def __init__(self, cfg, **kwargs): - super().__init__(cfg, **kwargs) - - def _load_from_path(self, split): - assert os.path.exists( - self._cfg.DATA[self.split.upper()].ROOT - ), "Root path to dataset can not be None!" - data = self._cfg["DATA"] - data_type = data.TYPE - fake_types = self._cfg.DATA[split.upper()]["FAKETYPE"] - img_paths, labels, mask_paths, ot_props = [], [], [], [] - - # Load image data for each type of fake techniques - for idx, ft in enumerate(fake_types): - data_dir = os.path.join( - self._cfg.DATA[self.split.upper()].ROOT, self.split, data_type, ft - ) - if not os.path.exists(data_dir): - raise ValueError("Data Directory can not be invalid!") - - for sub_dir in os.listdir(data_dir): - sub_dir_path = os.path.join(data_dir, sub_dir) - # sub_dir_path = data_dir - img_paths_ = glob(f"{sub_dir_path}/*.{self._cfg.IMAGE_SUFFIX}") - - img_paths.extend(img_paths_) - labels.extend( - np.full( - len(img_paths_), - int(("real" not in ft) and ("original" not in ft)), - ) - ) - - print("{} image paths have been loaded from Combine!".format(len(img_paths))) - return img_paths, labels, mask_paths, ot_props diff --git a/video/fake-stormer/model_code/datasets/common.py b/video/fake-stormer/model_code/datasets/common.py deleted file mode 100644 index c716a3ec3fdfdc5eaaa3b5268d8304692a02ac9b..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/common.py +++ /dev/null @@ -1,717 +0,0 @@ -# -*- coding: utf-8 -*- -import math -import os -import random -import sys -from abc import ABC, abstractmethod -from glob import glob - -import numpy as np -import simplejson as json -from box import Box as edict -from natsort import natsorted -from package_utils.image_utils import cal_mask_wh, gaussian_radius -from package_utils.transform import final_transform -from package_utils.utils import file_extention -from PIL import Image -from torch.utils.data import Dataset - -from .builder import DATASETS -from .utils import _extract_data_based_dist - -PREFIX_PATH = "/data/deepfake_cluster/datasets_df/FaceForensics++/c0/" - - -class ParameterStore: - _instance = None - _parameters = {} - - @classmethod - def get_instance(cls): - if cls._instance is None: - cls._instance = cls() - return cls._instance - - @classmethod - def add_parameters(cls, param_name, param_value): - cls._parameters[param_name] = param_value - - @classmethod - def get_parameters(cls, param_name): - return cls._parameters.get(param_name) - - @classmethod - def del_parameters(cls): - for k in cls._parameters.keys(): - del cls._parameters[k] - - @classmethod - def has_key(cls, key): - return key in cls._parameters - - @classmethod - def reset(cls): - cls._parameters.clear() - cls._instance = None - - -@DATASETS.register_module() -class CommonDataset(Dataset, ABC): - def __init__(self, cfg, **kwargs): - super().__init__() - self._cfg = edict(cfg) if not isinstance(cfg, edict) else cfg - self.dataset = self._cfg.DATA[self.split.upper()].NAME - # self.train = self._cfg["TRAIN"] - self.train = self.split != "test" - self.final_transforms = final_transform(self._cfg) - self.sigma_adaptive = self._cfg.ADAPTIVE_SIGMA - self.sampler_active = self._cfg.DATA.SAMPLES_PER_VIDEO.ACTIVE - self.samples_per_video = self._cfg.DATA.SAMPLES_PER_VIDEO[self.split.upper()] - self.sampler_dist = ( - self._cfg.DATA.SAMPLES_PER_VIDEO.DIST - ) # Distribution of [Real, Fake] - self.heatmap_w = self._cfg.HEATMAP_SIZE[1] - self.heatmap_h = self._cfg.HEATMAP_SIZE[0] - self.split_image = self._cfg.SPLIT_IMAGE - self.compression = self._cfg.COMPRESSION - self.data_type = self._cfg.DATA_TYPE - - if kwargs is not None: - for k, v in kwargs.items(): - if v is None: - raise ValueError(f"{k}:{v} retrieve a None value!") - self.__setattr__(k, v) - - @abstractmethod - def _load_from_path(self, split): - return NotImplemented - - def _load_from_file(self, split, anno_file=None): - """ - @split: train/val - This function for loading data from file for 4 types of manipulated images FF++ and FaceXray generation data - """ - assert os.path.exists( - self._cfg.DATA[self.split.upper()].ROOT - ), "Root path to dataset can not be invalid!" - data_cfg = self._cfg.DATA - - if anno_file is None: - anno_file = data_cfg[split.upper()].ANNO_FILE - if not os.access(anno_file, os.R_OK): - anno_file = os.path.join(self._cfg.DATA[self.split.upper()].ROOT, anno_file) - assert os.access(anno_file, os.R_OK), "Annotation file can not be invalid!!" - - f_name, f_extention = file_extention(anno_file) - data = None - image_paths, labels, mask_paths, ot_props = [], [], [], [] - f = open(anno_file) - if f_extention == ".json": - data = json.load(f) - data = edict(data)[ - "data" - ] # A list of proprocessed data objects containing image properties - - for item in data: - assert ( - "image_path" in item.keys() - ), "Image path must be available in item dict!" - image_path = item.image_path - ot_prop = {} - - # Custom base on the specific data structure - if not "label" in item.keys(): - lb = ("fake" in image_path) or ( - ("original" not in image_path) and ("aligned" not in image_path) - ) - else: - lb = item.label == "fake" - lb_encoded = int(lb) - labels.append(lb_encoded) - - if PREFIX_PATH in item.image_path: - image_path = item.image_path.replace( - PREFIX_PATH, self._cfg.DATA[self.split.upper()].ROOT - ) - else: - image_path = os.path.join( - self._cfg.DATA[self.split.upper()].ROOT, item.image_path - ) - image_paths.append(image_path) - - # Appending more data properties for data loader - if "mask_path" in item.keys(): - mask_path = item.mask_path - if PREFIX_PATH in item.mask_path: - mask_path = item.mask_path.replace( - PREFIX_PATH, self._cfg.DATA[self.split.upper()].ROOT - ) - else: - mask_path = os.path.join( - self._cfg.DATA[self.split.upper()].ROOT, item.mask_path - ) - mask_paths.append(mask_path) - if "best_match" in item.keys(): - best_match = item.best_match - best_match = [ - os.path.join(self._cfg.DATA[self.split.upper()].ROOT, bm) - for bm in best_match - if self._cfg.DATA[self.split.upper()].ROOT not in bm - ] - ot_prop["best_match"] = best_match - for lms_key in ["aligned_lms", "orig_lms"]: - if lms_key in item.keys(): - f_lms = np.array(item[lms_key]) - ot_prop[lms_key] = f_lms - - ot_props.append(ot_prop) - else: - raise Exception( - f"{f_extention} has not been supported yet! Please change to Json file!" - ) - - print("{} image paths have been loaded!".format(len(image_paths))) - return image_paths, labels, mask_paths, ot_props - - def _gen_vul_parts(self, blending_mask): - H, W, C = blending_mask.shape - Hp, Wp = self.heatmap_h, self.heatmap_w - py, px = int(H // Hp), int(W // Wp) - - assert (H // Hp) == (W // Wp) - vul_parts = np.zeros((Hp, Wp)) - - for i in range(0, Hp): - for j in range(0, Wp): - blending_part = blending_mask[ - (py * i) : (py * (i + 1)), (px * j) : (px * (j + 1)), 0 - ] - part_intensity = np.mean(blending_part) - vul_parts[i, j] = part_intensity - vul_parts_out = np.tile(vul_parts[:, :, np.newaxis], (1, 1, 3)).astype(np.uint8) - - return vul_parts_out - - def _mask_out_vulnerability(self, input, mask, fake_intensity, mask_prob=0.9): - if self.dynamic_blending_prob: - p_h = self._cfg.IMAGE_SIZE[0] // self.heatmap_h - p_w = self._cfg.IMAGE_SIZE[1] // self.heatmap_w - - max_value = max(0.1, mask[..., 0].max()) - upper_bound_intensity = min(1.0, fake_intensity) - upper_bound_value = max( - 0.1, mask[mask[..., 0] < max_value * upper_bound_intensity].max() - ) - target_mask_ = (mask[..., 0] > upper_bound_value).astype(int) - - # Randomly mask out mask if the input is real - if np.count_nonzero(target_mask_) == 0: - pos_matrix = (self.heatmap_h, self.heatmap_w) - all_indices = [ - (i, j) for i in range(self.heatmap_h) for j in range(self.heatmap_w) - ] - selected_indices = np.random.choice( - len(all_indices), - size=math.floor(mask_prob * np.prod((pos_matrix))), - replace=False, - ) - selected_indices_2d = [all_indices[i] for i in selected_indices] - i_indices, j_indices = zip(*selected_indices_2d) - else: - all_indices = [ - (i, j) - for i in range(self.heatmap_h) - for j in range(self.heatmap_w) - if ( - (target_mask_[i, j] == 0) - and (mask[..., 0][i, j] < upper_bound_value) - ) - ] - idxes = np.where(target_mask_ == 1) - n_mask_pos_h = len(idxes[0]) - pos_matrix = (self.heatmap_h, self.heatmap_w) - - if len(all_indices) < math.floor( - mask_prob * np.prod((pos_matrix)) - n_mask_pos_h - ): - size = math.ceil(len(all_indices) * mask_prob) - else: - size = max( - 0, math.floor(mask_prob * np.prod((pos_matrix)) - n_mask_pos_h) - ) - - selected_indices = np.random.choice( - len(all_indices), size=size, replace=False - ) - selected_indices_2d = [all_indices[i] for i in selected_indices] - i_indices_, j_indices_ = zip(*selected_indices_2d) - i_indices = np.hstack((idxes[0], np.array(i_indices_))) - j_indices = np.hstack((idxes[1], np.array(j_indices_))) - - target_mask_[i_indices, j_indices] = 1 - idxes = np.where(target_mask_ == 1) - masked_matrix = 1 - target_mask_ - - for i, j in zip(idxes[0], idxes[1]): - input[ - int(i * p_h) : int((i + 1) * p_h), - int(j * p_w) : int((j + 1) * p_w), - :, - ] = np.zeros((1, 1, input.shape[2]), dtype=input.dtype) - # mask[i, j] = np.zeros((mask.shape[2]), dtype=mask.dtype) - - return input, mask, masked_matrix, upper_bound_value - - def _mask_out_vulnerability2(self, input, mask, fake_intensity, **kwargs): - mask_prob = kwargs.get("mask_prob") - param_store_ins = ParameterStore.get_instance() - masked_matrix = param_store_ins.get_parameters("masked_matrix") - - p_h = self._cfg.IMAGE_SIZE[0] // self.heatmap_h - p_w = self._cfg.IMAGE_SIZE[1] // self.heatmap_w - upper_bound_value = None - - if self.dynamic_blending_prob: - if masked_matrix is not None: - upper_bound_value = max(1, np.max(mask[..., 0] * masked_matrix)) - fake_intensity = upper_bound_value / 255 - target_mask_ = 1 - masked_matrix - idxes = np.where(target_mask_ == 1) - else: - max_value = max(1, mask[..., 0].max()) - max_f_intensity = max_value / 255 - fake_intensity = min(fake_intensity, max_f_intensity) - - upper_bound_value = max( - 1, mask[mask[..., 0] < 255 * fake_intensity].max() - ) - target_mask_ = (mask[..., 0] > upper_bound_value).astype(int) - - # Randomly mask out mask if the input is real - if np.count_nonzero(target_mask_) == 0: - pos_matrix = (self.heatmap_h, self.heatmap_w) - all_indices = [ - (i, j) - for i in range(self.heatmap_h) - for j in range(self.heatmap_w) - ] - selected_indices = np.random.choice( - len(all_indices), - size=math.ceil(mask_prob * np.prod((pos_matrix))), - replace=False, - ) - selected_indices_2d = [all_indices[i] for i in selected_indices] - i_indices, j_indices = zip(*selected_indices_2d) - else: - all_indices = [ - (i, j) - for i in range(self.heatmap_h) - for j in range(self.heatmap_w) - if ( - (target_mask_[i, j] == 0) - and (mask[..., 0][i, j] < upper_bound_value) - ) - ] - idxes = np.where(target_mask_ == 1) - n_mask_pos_h = len(idxes[0]) - pos_matrix = (self.heatmap_h, self.heatmap_w) - - if len(all_indices) < math.floor( - mask_prob * np.prod((pos_matrix)) - n_mask_pos_h - ): - size = math.ceil(len(all_indices) * mask_prob) - else: - size = max( - 1, - math.ceil(mask_prob * np.prod((pos_matrix)) - n_mask_pos_h), - ) - - selected_indices = np.random.choice( - len(all_indices), size=size, replace=False - ) - selected_indices_2d = [all_indices[i] for i in selected_indices] - i_indices_, j_indices_ = zip(*selected_indices_2d) - i_indices = np.hstack((idxes[0], np.array(i_indices_))) - j_indices = np.hstack((idxes[1], np.array(j_indices_))) - - target_mask_[i_indices, j_indices] = 1 - idxes = np.where(target_mask_ == 1) - masked_matrix = 1 - target_mask_ - param_store_ins.add_parameters("masked_matrix", masked_matrix) - - for i, j in zip(idxes[0], idxes[1]): - rand_val = np.random.randint(0, 255) - input[ - int(i * p_h) : int((i + 1) * p_h), - int(j * p_w) : int((j + 1) * p_w), - :, - ] = np.full((1, 1, input.shape[2]), 0, dtype=input.dtype) - # mask[i, j] = np.zeros((mask.shape[2]), dtype=mask.dtype) - - return input, mask, masked_matrix, upper_bound_value, fake_intensity - - def _encode_temporal_target(self, target_mask, **kwargs): - """ - Adaptively encode targets based on the vulnerability levels for spatial-temporal outputs (3D) - """ - assert self.heatmap_type in ["gaussian", "m_std_normalized", "max_normalized"] - - if isinstance(target_mask, list): - target_mask = np.array(target_mask) - - saved_params = {} - hm_w = self._cfg.HEATMAP_SIZE[1] - hm_h = self._cfg.HEATMAP_SIZE[0] - ndim = len(target_mask) - heatmap = np.zeros((ndim, hm_h, hm_w), dtype=np.float32) # dimension d, h, w - # cstency_hm = np.zeros((ndim, hm_h, hm_w), dtype=np.float32) - - derivative = np.diff(target_mask[:, :, :, 0], axis=0) - derivative = np.absolute(derivative) - d_max = max(1, np.max(derivative)) - - if bool(derivative.max()) and kwargs.get("vis_derivative"): - idx = kwargs.get("idx") - for i in range(len(derivative)): - di = derivative[i].astype(np.uint8) - di = np.repeat(di[:, :, np.newaxis], 3, axis=2) - Image.fromarray(di).save(f"samples/debugs/derivative_f_{idx}_{i}.png") - - if self.heatmap_type == "gaussian": - x = np.arange(0, hm_w, 1, float) - y = np.arange(0, hm_h, 1, float) - y = np.expand_dims(y, -1) - z = np.arange(0, ndim, 1, float) - z = np.expand_dims((np.expand_dims(z, -1)), -1) - derivative = np.concatenate( - (np.zeros_like(derivative[0][np.newaxis, ...]), derivative), axis=0 - ) - centers = np.where(derivative == max(0.1, derivative.max())) - - for i, j, k in zip(centers[0], centers[1], centers[2]): - heatmap_ijk = np.exp( - -( - ((z - i) ** 2) / (2.0 * (self.sigma / 2) ** 2) - + ((y - j) ** 2) / (2.0 * (self.sigma / 2) ** 2) - + ((x - k) ** 2) / (2.0 * (self.sigma / 2) ** 2) - ) - ) - heatmap = np.maximum(heatmap_ijk, heatmap) - elif self.heatmap_type == "m_std_normalized": - d_m = kwargs.get("d_mean") or np.mean(derivative) - d_std = kwargs.get("d_std") or np.std(derivative) - derivative = np.concatenate( - (np.zeros_like(derivative[0][np.newaxis, ...]), derivative), axis=0 - ) - # Calculating the 3D self-consistency map - # cstency_hm = 255 - np.absolute(d_max - derivative) - - if d_std != 0: - heatmap = (derivative - d_m) / d_std - - saved_params = {"d_mean": d_m, "d_std": d_std} - elif self.heatmap_type == "max_normalized": - derivative = np.concatenate( - (np.zeros_like(derivative[0][np.newaxis, ...]), derivative), axis=0 - ) - # Calculating the 3D self-consistency map - # cstency_hm = 255 - np.absolute(d_max - derivative) - if d_max != 0: - heatmap[1:] = derivative / d_max - else: - raise ValueError("Now only support gaussian or mean std normalization") - - return heatmap, derivative / d_max, saved_params - - def _encode_target(self, target_mask, fake_intensity=0.5): - """ - Adaptively encode targets based on the vulnerability levels - """ - assert ( - self.heatmap_type == "gaussian" - ), "Only Gaussian Heatmap is supported now!" - hm_w = self._cfg.HEATMAP_SIZE[1] - hm_h = self._cfg.HEATMAP_SIZE[0] - heatmap = np.zeros((1, hm_h, hm_w), dtype=np.float32) - - # Draw heatmap for blending region - max_val_all = target_mask[..., 0].max() - max_val = max_val_all if max_val_all > 0 else 255 - - # Select value to draw attention masks - if self.data_type == "video": - lower_bound_intensity = max(0.0, (fake_intensity - 0.1)) - upper_bound_intensity = min(1.0, (fake_intensity + 0.1)) - target_mask_ = ( - (target_mask[..., 0] >= 255 * lower_bound_intensity) - & (target_mask[..., 0] < 255 * upper_bound_intensity) - ).astype(np.int8) - else: - target_mask_ = (target_mask[..., 0] >= max_val * fake_intensity).astype( - np.int8 - ) - - points = np.where(target_mask_ == 1) - - for j, i in zip(points[0], points[1]): - if self.sigma_adaptive: - w_sbi, h_sbi = cal_mask_wh((j, i), target_mask[..., 0]) - radius = gaussian_radius((h_sbi, w_sbi)) - self.sigma = radius / 3 + 1e-4 - tmp = self.sigma * 3 - size = tmp * 2 + 1 - ul = [int(i - tmp), int(j - tmp)] - br = [int(i + tmp + 1), int(j + tmp + 1)] - x = np.arange(0, size, 1, np.float32) - y = x[:, np.newaxis] - - x0 = y0 = size // 2 - g = np.exp(-((x - x0) ** 2 + (y - y0) ** 2) / (2 * (self.sigma**2))) - - g_x = max(0, -ul[0]), min(br[0], hm_w) - ul[0] - g_y = max(0, -ul[1]), min(br[1], hm_h) - ul[1] - - img_x = max(0, ul[0]), min(br[0], hm_w) - img_y = max(0, ul[1]), min(br[1], hm_h) - - heatmap[0][img_y[0] : img_y[1], img_x[0] : img_x[1]] = np.maximum( - g[g_y[0] : g_y[1], g_x[0] : g_x[1]], - heatmap[0][img_y[0] : img_y[1], img_x[0] : img_x[1]], - ) - - return heatmap, None - - def _encode_target_v1(self, target_mask, fake_intensity=0.5): - assert ( - self.heatmap_type == "gaussian" - ), "Only Gaussian Heatmap is supported now!" - # fake_ratio = [0.5, 0.6, 0.7, 0.8, 0.9, 1.0] - n_outputs = 1 - hm_w = self._cfg.HEATMAP_SIZE[1] - hm_h = self._cfg.HEATMAP_SIZE[0] - patches = [[0, 0], [0, 1 / 2], [1 / 2, 0], [1 / 2, 1 / 2]] - target_H, target_W = target_mask[..., 0].shape[:2] - heatmap = np.zeros((n_outputs, target_H, target_W), dtype=np.float32) - cstency_hm = np.zeros((n_outputs, target_H, target_W), dtype=np.float32) - max_val_all = target_mask[..., 0].max() - - # Draw heatmap for blending region - for fr in range(len(patches)): - # target_mask_ = np.where(((target_mask[..., 0] > 255*fake_ratio[fr]) & (target_mask[..., 0] <= 255*fake_ratio[fr+1])), 1, 0) - p_x1, p_y1 = int(target_W * patches[fr][0]), int(target_H * patches[fr][1]) - p_x2, p_y2 = int(target_W * (patches[fr][0] + 1 / 2)), int( - target_H * (patches[fr][1] + 1 / 2) - ) - - max_value = target_mask[p_y1:p_y2, p_x1:p_x2, 0].max() - max_value = max_value if max_value > 0 else 1 - target_mask_ = (target_mask[p_y1:p_y2, p_x1:p_x2, 0] == (max_value)).astype( - np.uint8 - ) - points = np.where(target_mask_ == 1) - - if len(points[0]): - p = (points[0] + p_y1, points[1] + p_x1) - - for j, i in zip(p[0], p[1]): - if self.sigma_adaptive: - w_sbi, h_sbi = cal_mask_wh((j, i), target_mask[..., 0]) - radius = gaussian_radius((h_sbi, w_sbi)) - self.sigma = radius / 3 + 1e-4 - tmp = self.sigma * 3 - size = tmp * 2 + 1 - ul = [int(i - tmp), int(j - tmp)] - br = [int(i + tmp + 1), int(j + tmp + 1)] - x = np.arange(0, size, 1, np.float32) - y = x[:, np.newaxis] - - x0 = y0 = size // 2 - g = np.exp(-((x - x0) ** 2 + (y - y0) ** 2) / (2 * (self.sigma**2))) - - g_x = max(0, -ul[0]), min(br[0], hm_w) - ul[0] - g_y = max(0, -ul[1]), min(br[1], hm_h) - ul[1] - - img_x = max(0, ul[0]), min(br[0], hm_w) - img_y = max(0, ul[1]), min(br[1], hm_h) - - heatmap[0][img_y[0] : img_y[1], img_x[0] : img_x[1]] = np.maximum( - g[g_y[0] : g_y[1], g_x[0] : g_x[1]], - heatmap[0][img_y[0] : img_y[1], img_x[0] : img_x[1]], - ) - - if n_outputs > 1: - cstency_hm[fr][p_y1:p_y2, p_x1:p_x2] = 255 - np.absolute( - max_value - target_mask[p_y1:p_y2, p_x1:p_x2, 0] - ) - else: - cstency_hm[0][p_y1:p_y2, p_x1:p_x2] = 255 - np.absolute( - max_val_all - target_mask[p_y1:p_y2, p_x1:p_x2, 0] - ) - - return heatmap, cstency_hm - - def _encode_target_v2(self, target_mask, fake_intensity=0.5): - assert ( - self.heatmap_type == "gaussian" - ), "Only Gaussian Heatmap is supported now!" - n_outputs = 1 - hm_w = self._cfg.HEATMAP_SIZE[1] - hm_h = self._cfg.HEATMAP_SIZE[0] - target_H, target_W = target_mask[..., 0].shape[:2] - heatmap = np.zeros((n_outputs, target_H, target_W), dtype=np.float32) - cstency_hm = np.zeros((n_outputs, target_H, target_W), dtype=np.float32) - - # Draw heatmap for blending region - target_mask_ = (target_mask[..., 0] > 128).astype(np.uint8) - points = np.where(target_mask_ == 1) - - if len(points[0]): - p = (int(points[0].mean()), int(points[1].mean())) - j, i = p - - if self.sigma_adaptive: - w_sbi, h_sbi = cal_mask_wh((j, i), target_mask[..., 0]) - radius = gaussian_radius((h_sbi, w_sbi)) - self.sigma = radius / 3 + 1e-4 - tmp = self.sigma * 3 - size = tmp * 2 + 1 - ul = [int(i - tmp), int(j - tmp)] - br = [int(i + tmp + 1), int(j + tmp + 1)] - x = np.arange(0, size, 1, np.float32) - y = x[:, np.newaxis] - - x0 = y0 = size // 2 - g = np.exp(-((x - x0) ** 2 + (y - y0) ** 2) / (2 * (self.sigma**2))) - - g_x = max(0, -ul[0]), min(br[0], hm_w) - ul[0] - g_y = max(0, -ul[1]), min(br[1], hm_h) - ul[1] - - img_x = max(0, ul[0]), min(br[0], hm_w) - img_y = max(0, ul[1]), min(br[1], hm_h) - - heatmap[0][img_y[0] : img_y[1], img_x[0] : img_x[1]] = np.maximum( - g[g_y[0] : g_y[1], g_x[0] : g_x[1]], - heatmap[0][img_y[0] : img_y[1], img_x[0] : img_x[1]], - ) - - cstency_hm[0] = 255 - np.absolute( - target_mask[j, i, 0] - target_mask[..., 0] - ) - - return heatmap, cstency_hm - - def _sampler(self, image_paths, labels, epoch=0, **params): - if self.sampler_dist[0] != 1.0 or self.sampler_dist[1] != 1.0: - image_paths, labels, params = _extract_data_based_dist( - self.data_type, image_paths, labels, self.sampler_dist, **params - ) - - vid_dict = {} - data = {"image_paths": [], "labels": []} - - for k, v in params.items(): - if v is not None and len(v): - data[k] = [] - - for idx, ip in enumerate(image_paths): - f_name = ip.split("/")[-1] - - if self.compression in ["c0", "c23", "c40"]: - vid_id = os.path.dirname(ip) - if self.dataset == "FF++" and self.train: - f_type = ip.split("/")[-3] - vid_id = "_".join([f_type, vid_id]) - else: - raise NotImplementedError( - "Only c23, c40, and c0 compression mode is supported now! Please check again!" - ) - lb = labels[idx] - - data_per_vid = dict(image=ip, label=lb) - for k, v in params.items(): - if k in data.keys(): - data_per_vid[k] = v[idx] - - if vid_id in vid_dict.keys(): - vid_dict[vid_id].append(data_per_vid) - else: - vid_dict[vid_id] = [data_per_vid] - - if self.data_type == "image": - """ - Samples data for the mode of working with single images - """ - for vid_id in vid_dict.keys(): - if self.train: - samples_per_vid = random.choices( - vid_dict[vid_id], k=self.samples_per_video - ) - else: - samples_per_vid = random.sample( - vid_dict[vid_id], k=len(vid_dict[vid_id]) - ) - - for spl in samples_per_vid: - data["image_paths"].append(spl["image"]) - data["labels"].append(spl["label"]) - for k in params.keys(): - if k in data.keys(): - data[k].append(spl[k]) - return data - elif self.data_type == "video": - # Sorting to obtain successive frames for videos, important for temporal modeling - for vid_id in vid_dict.keys(): - vid_dict[vid_id] = natsorted(vid_dict[vid_id], key=lambda x: x["image"]) - - # if self.train: - """ - Generate new video data for training - """ - assert "NUM_FRAMES" in self._cfg.DATA.SAMPLES_PER_VIDEO - new_vid_dict = {} - n_fs = self._cfg.DATA.SAMPLES_PER_VIDEO.NUM_FRAMES - - for vid_id in vid_dict.keys(): - vid_len = len(vid_dict[vid_id]) - start_idx = 0 if epoch == 0 else np.random.randint(0, n_fs - 1) - - for k in range(start_idx, vid_len, n_fs): - try: - if (k + n_fs) <= vid_len: - new_vid_id = "+++".join( - [vid_id, str(k)] - ) # Adding index segment to original video to create sub videos - new_vid_dict[new_vid_id] = vid_dict[vid_id][k : (k + n_fs)] - except: - break - - return new_vid_dict - else: - raise ValueError( - f'{self.data_type} has not been supported! Only "image" or "video" data can be extracted!' - ) - - def select_encode_method(self, version=0, dimension="spatial"): - if dimension == "spatial": - if version == 2: - return self._encode_target_v2 - elif version == 1: - return self._encode_target_v1 - else: - return self._encode_target - elif dimension == "temporal": - return self._encode_temporal_target - else: - raise ValueError(f"The input {dimension} has not been supported yet!") - - @abstractmethod - def __len__(self): - return NotImplemented - - @abstractmethod - def __getitem__(self, idx): - return NotImplemented - - @property - def __repr__(self): - return self.__class__.__name__ diff --git a/video/fake-stormer/model_code/datasets/df40.py b/video/fake-stormer/model_code/datasets/df40.py deleted file mode 100644 index b98cfebc66d3649cf292e34baadf97c2e1902fc6..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/df40.py +++ /dev/null @@ -1,46 +0,0 @@ -# -*- coding: utf-8 -*- -import os -from glob import glob - -import numpy as np - -from .builder import DATASETS -from .common import CommonDataset - - -@DATASETS.register_module() -class DF40(CommonDataset): - def __init__(self, cfg, **kwargs): - super().__init__(cfg, **kwargs) - - def _load_from_path(self, split): - # Check if the root directory exists. - root_dir = self._cfg.DATA[self.split.upper()].ROOT - assert os.path.exists(root_dir), "Root path to dataset cannot be None!" - - data = self._cfg["DATA"] - data_type = data.TYPE - fake_types = self._cfg.DATA[split.upper()]["FAKETYPE"] - img_paths, labels, mask_paths, ot_props = [], [], [], [] - - # Load image data for each type of fake technique. - for ft in fake_types: - # Construct path: ROOT/split/fake_type (skipping data_type) - data_dir = os.path.join(root_dir, self.split, data_type, ft) - if not os.path.exists(data_dir): - raise ValueError("Data Directory is invalid!") - - # Define common image extensions. - extensions = ["jpg", "jpeg", "png", "tif", "webp"] - img_paths_ = [] - # Recursively search for images in the fake type directory. - for ext in extensions: - pattern = os.path.join(data_dir, "**", f"*.{ext}") - img_paths_.extend(glob(pattern, recursive=True)) - - # Extend the main lists with the images and corresponding labels. - img_paths.extend(img_paths_) - labels.extend(np.full(len(img_paths_), int(ft != "real_videos"))) - - print("{} image paths have been loaded from DF40!".format(len(img_paths))) - return img_paths, labels, mask_paths, ot_props diff --git a/video/fake-stormer/model_code/datasets/dfd.py b/video/fake-stormer/model_code/datasets/dfd.py deleted file mode 100644 index 62649bdb74b309d8807f19f9527c0227a52ad4ec..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/dfd.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- -import os -from glob import glob - -import numpy as np - -from .builder import DATASETS -from .common import CommonDataset - - -@DATASETS.register_module() -class DFD(CommonDataset): - def __init__(self, cfg, **kwargs): - super().__init__(cfg, **kwargs) - - def _load_from_path(self, split): - assert os.path.exists( - self._cfg.DATA[self.split.upper()].ROOT - ), "Root path to dataset can not be None!" - data = self._cfg["DATA"] - data_type = data.TYPE - fake_types = self._cfg.DATA[split.upper()]["FAKETYPE"] - img_paths, labels, mask_paths, ot_props = [], [], [], [] - - # Load image data for each type of fake techniques - for idx, ft in enumerate(fake_types): - data_dir = os.path.join( - self._cfg.DATA[self.split.upper()].ROOT, self.split, data_type, ft - ) - if not os.path.exists(data_dir): - raise ValueError("Data Directory can not be invalid!") - - for sub_dir in os.listdir(data_dir): - sub_dir_path = os.path.join(data_dir, sub_dir) - img_paths_ = glob(f"{sub_dir_path}/*.{self._cfg.IMAGE_SUFFIX}") - - img_paths.extend(img_paths_) - labels.extend(np.full(len(img_paths_), int(ft == "DeepFakeDetection"))) - - print("{} image paths have been loaded from DFD!".format(len(img_paths))) - return img_paths, labels, mask_paths, ot_props diff --git a/video/fake-stormer/model_code/datasets/dfdc.py b/video/fake-stormer/model_code/datasets/dfdc.py deleted file mode 100644 index 997d34befbeab2668bae022308c436c84e6372b5..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/dfdc.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- -import os -from glob import glob - -import numpy as np - -from .builder import DATASETS -from .common import CommonDataset - - -@DATASETS.register_module() -class DFDC(CommonDataset): - def __init__(self, cfg, **kwargs): - super().__init__(cfg, **kwargs) - - def _load_from_path(self, split): - assert os.path.exists( - self._cfg.DATA[self.split.upper()].ROOT - ), "Root path to dataset can not be None!" - data = self._cfg["DATA"] - data_type = data.TYPE - fake_types = self._cfg.DATA[split.upper()]["FAKETYPE"] - img_paths, labels, mask_paths, ot_props = [], [], [], [] - - # Load image data for each type of fake techniques - for idx, ft in enumerate(fake_types): - data_dir = os.path.join( - self._cfg.DATA[self.split.upper()].ROOT, self.split, data_type, ft - ) - if not os.path.exists(data_dir): - raise ValueError("Data Directory can not be invalid!") - - for sub_dir in os.listdir(data_dir): - sub_dir_path = os.path.join(data_dir, sub_dir) - img_paths_ = glob(f"{sub_dir_path}/*.{self._cfg.IMAGE_SUFFIX}") - - img_paths.extend(img_paths_) - labels.extend(np.full(len(img_paths_), int(ft == "fake"))) - - print("{} image paths have been loaded from DFDC!".format(len(img_paths))) - return img_paths, labels, mask_paths, ot_props diff --git a/video/fake-stormer/model_code/datasets/dfdcp.py b/video/fake-stormer/model_code/datasets/dfdcp.py deleted file mode 100644 index a0198bd0fc30fdee74b73c9040491ff0fd0b1423..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/dfdcp.py +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- -import os -from glob import glob - -import numpy as np - -from .builder import DATASETS -from .common import CommonDataset - - -@DATASETS.register_module() -class DFDCP(CommonDataset): - def __init__(self, cfg, **kwargs): - super().__init__(cfg, **kwargs) - - def _load_from_path(self, split): - assert os.path.exists( - self._cfg.DATA[self.split.upper()].ROOT - ), "Root path to dataset can not be None!" - data = self._cfg["DATA"] - data_type = data.TYPE - fake_types = self._cfg.DATA[split.upper()]["FAKETYPE"] - img_paths, labels, mask_paths, ot_props = [], [], [], [] - - # Load image data for each type of fake techniques - for idx, ft in enumerate(fake_types): - data_dir = os.path.join( - self._cfg.DATA[self.split.upper()].ROOT, self.split, data_type, ft - ) - if not os.path.exists(data_dir): - raise ValueError("Data Directory can not be invalid!") - - for sub_dir in os.listdir(data_dir): - sub_dir_path = os.path.join(data_dir, sub_dir) - img_paths_ = glob(f"{sub_dir_path}/*.{self._cfg.IMAGE_SUFFIX}") - - img_paths.extend(img_paths_) - labels.extend( - np.full( - len(img_paths_), int((ft == "method_A") or (ft == "method_B")) - ) - ) - - print("{} image paths have been loaded from DFDCP!".format(len(img_paths))) - return img_paths, labels, mask_paths, ot_props diff --git a/video/fake-stormer/model_code/datasets/dfo.py b/video/fake-stormer/model_code/datasets/dfo.py deleted file mode 100644 index b360108c2ea5e867fe87c473c8707979c1df88e3..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/dfo.py +++ /dev/null @@ -1,46 +0,0 @@ -# -*- coding: utf-8 -*- -import os -from glob import glob - -import numpy as np - -from .builder import DATASETS -from .common import CommonDataset - - -@DATASETS.register_module() -class DFo(CommonDataset): - def __init__(self, cfg, **kwargs): - super().__init__(cfg, **kwargs) - - def _load_from_path(self, split): - assert os.path.exists( - self._cfg.DATA[self.split.upper()].ROOT - ), "Root path to dataset can not be None!" - data = self._cfg["DATA"] - data_type = data.TYPE - fake_types = self._cfg.DATA[split.upper()]["FAKETYPE"] - img_paths, labels, mask_paths, ot_props = [], [], [], [] - - # Load image data for each type of fake techniques - for idx, ft in enumerate(fake_types): - data_dir = os.path.join( - self._cfg.DATA[self.split.upper()].ROOT, self.split, data_type, ft - ) - if not os.path.exists(data_dir): - raise ValueError("Data Directory can not be invalid!") - - for sub_dir in os.listdir(data_dir): - sub_dir_path = os.path.join(data_dir, sub_dir) - # sub_dir_path = data_dir - img_paths_ = glob(f"{sub_dir_path}/*.{self._cfg.IMAGE_SUFFIX}") - - img_paths.extend(img_paths_) - labels.extend(np.full(len(img_paths_), int("manipulated" in ft))) - - print( - "{} image paths have been loaded from DeeperForensics!".format( - len(img_paths) - ) - ) - return img_paths, labels, mask_paths, ot_props diff --git a/video/fake-stormer/model_code/datasets/dfw.py b/video/fake-stormer/model_code/datasets/dfw.py deleted file mode 100644 index 4e374150446bfecc72539c9e0f1c732df2e1fd36..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/dfw.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- -import os -from glob import glob - -import numpy as np - -from .builder import DATASETS -from .common import CommonDataset - - -@DATASETS.register_module() -class DFW(CommonDataset): - def __init__(self, cfg, **kwargs): - super().__init__(cfg, **kwargs) - - def _load_from_path(self, split): - assert os.path.exists( - self._cfg.DATA[self.split.upper()].ROOT - ), "Root path to dataset can not be None!" - data = self._cfg["DATA"] - data_type = data.TYPE - fake_types = self._cfg.DATA[split.upper()]["FAKETYPE"] - img_paths, labels, mask_paths, ot_props = [], [], [], [] - - # Load image data for each type of fake techniques - for idx, ft in enumerate(fake_types): - data_dir = os.path.join( - self._cfg.DATA[self.split.upper()].ROOT, self.split, data_type, ft - ) - if not os.path.exists(data_dir): - raise ValueError("Data Directory can not be invalid!") - - for sub_dir in os.listdir(data_dir): - sub_dir_path = os.path.join(data_dir, sub_dir) - # sub_dir_path = data_dir - img_paths_ = glob(f"{sub_dir_path}/*.{self._cfg.IMAGE_SUFFIX}") - - img_paths.extend(img_paths_) - labels.extend(np.full(len(img_paths_), int("fake" in ft))) - - print("{} image paths have been loaded from DFW!".format(len(img_paths))) - return img_paths, labels, mask_paths, ot_props diff --git a/video/fake-stormer/model_code/datasets/diffswap.py b/video/fake-stormer/model_code/datasets/diffswap.py deleted file mode 100644 index ef26e46129b2a92b259a63ee03fbc7cf544512e7..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/diffswap.py +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- -import os -from glob import glob - -import numpy as np - -from .builder import DATASETS -from .common import CommonDataset - - -@DATASETS.register_module() -class DiffSwap(CommonDataset): - def __init__(self, cfg, **kwargs): - super().__init__(cfg, **kwargs) - - def _load_from_path(self, split): - assert os.path.exists( - self._cfg.DATA[self.split.upper()].ROOT - ), "Root path to dataset can not be None!" - data = self._cfg["DATA"] - data_type = data.TYPE - fake_types = self._cfg.DATA[split.upper()]["FAKETYPE"] - img_paths, labels, mask_paths, ot_props = [], [], [], [] - - # Load image data for each type of fake techniques - for idx, ft in enumerate(fake_types): - data_dir = os.path.join( - self._cfg.DATA[self.split.upper()].ROOT, self.split, data_type, ft - ) - if not os.path.exists(data_dir): - raise ValueError("Data Directory can not be invalid!") - - if not os.path.isdir(data_dir): - continue - - for sub_dir in os.listdir(data_dir): - sub_dir_path = os.path.join(data_dir, sub_dir) - # sub_dir_path = data_dir - img_paths_ = glob(f"{sub_dir_path}/*.{self._cfg.IMAGE_SUFFIX}") - - img_paths.extend(img_paths_) - labels.extend(np.full(len(img_paths_), int("Real" not in ft))) - - print("{} image paths have been loaded from DiffSwap!".format(len(img_paths))) - return img_paths, labels, mask_paths, ot_props diff --git a/video/fake-stormer/model_code/datasets/face_forensic_binary.py b/video/fake-stormer/model_code/datasets/face_forensic_binary.py deleted file mode 100644 index e323f886c842b5692aa4dff27efd1eb63bc47cd0..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/face_forensic_binary.py +++ /dev/null @@ -1,180 +0,0 @@ -# -*- coding: utf-8 -*- -import os -import sys -from abc import abstractmethod -from random import shuffle - -import numpy as np -import torch -from package_utils.image_utils import load_image -from PIL import Image -from torch.utils.data import default_collate - -from .builder import DATASETS, PIPELINES, build_pipeline -from .master import MasterDataset - - -@DATASETS.register_module() -class BinaryFaceForensic(MasterDataset): - def __init__(self, config, split, **kwargs): - """ - @params: - config: Dataset config - split: train/val/test which directs to the split folders - """ - self.split = split - if kwargs is not None: - for k, v in kwargs.items(): - if v is None: - raise ValueError(f"{k}:{v} retrieve a None value!") - self.__setattr__(k, v) - super().__init__(config, **kwargs) - - # Load data - self.data_sampler = self._load_data(split) - - # Parse data - self._parsing_data() - - # Calling transform methods for inputs - self.geo_transform = build_pipeline(config.TRANSFORM.geometry, PIPELINES) - self.colorjitter_transform = build_pipeline(config.TRANSFORM.color, PIPELINES) - - def _load_data(self, split, anno_file=None, epoch=0): - from_file = self._cfg.DATA[self.split.upper()].FROM_FILE - - if epoch == 0: - if not from_file: - self.image_paths, self.labels, self.mask_paths, self.ot_props = ( - self._load_from_path(split) - ) - else: - self.image_paths, self.labels, self.mask_paths, self.ot_props = ( - self._load_from_file(split, anno_file=anno_file) - ) - - assert ( - len(self.image_paths) != 0 - ), "Image paths have not been loaded! Please check image directory!" - assert ( - len(self.labels) != 0 - ), "Labels have not been loaded! Please check annotation file!" - - if self.sampler_active: - print("Running sampler...") - params = dict( - mask_paths=self.mask_paths, ot_props=self.ot_props, epoch=epoch - ) - data_sampler = self._sampler(self.image_paths, self.labels, **params) - return data_sampler - - def _parsing_data(self): - assert self.data_type in ["image", "video"] - # Parsing data for training - if self.data_type == "video": - return - self.image_paths, self.labels = ( - self.data_sampler["image_paths"], - self.data_sampler["labels"], - ) - - def _load_img(self, img_path): - return load_image(img_path) - - def __len__(self): - if self.data_type == "image": - assert "image_paths" in self.data_sampler.keys() - return len(self.labels) - elif self.data_type == "video": - return len(self.data_sampler.keys()) - else: - raise ValueError( - f'{self.data_type} has not been supported. Please use "image" or "video" instead!' - ) - - def __getitem__(self, idx): - if self.data_type == "image": - return self.__getitem_path__(idx=idx) - elif self.data_type == "video": - return self.__getitem_video__(idx=idx) - else: - raise ValueError( - f"{self.data_type} has not been supported. Only image or video are used for training!" - ) - - def __getitem_path__(self, idx): - img_path = self.image_paths[idx] - label = np.expand_dims(self.labels[idx], axis=-1) - img = self._load_img(img_path) - - # Applying geo transform to inputs - geo_transfomed = self.geo_transform(img) - img_trans = geo_transfomed["image"] - - # Applying color transform to inputs - color_transfomed = self.colorjitter_transform(img_trans) - img_trans = color_transfomed["image"] - - # Normalise + Convert numpy array to tensor - img_trans = img_trans / 255 - img_trans = self.final_transforms(img_trans) - return img_trans, label - - def __getitem_video__(self, idx): - inputs = [] - vid_id = [*self.data_sampler.keys()][idx] - vid_data = self.data_sampler[vid_id] - - label = np.expand_dims(vid_data[0]["label"], axis=-1) - - f_idxes = range(0, self.samples_per_video) - for ix, f_idx in enumerate(f_idxes): - it = vid_data[f_idx] - img_path = it["image"] - img = self._load_img(img_path) - - if self.train: - # Applying geo transform to inputs - geo_transfomed = self.geo_transform(img) - img_trans = geo_transfomed["image"] - - # Applying color transform to inputs - color_transfomed = self.colorjitter_transform(img_trans) - img_trans = color_transfomed["image"] - - # Normalise + Convert numpy array to tensor - img_trans = img_trans / 255 - else: - img_trans = img / 255 - img_trans = self.final_transforms(img_trans) - inputs.append(img_trans) - inputs = torch.tensor(np.array([ip.numpy() for ip in inputs])) - inputs = inputs.transpose(0, 1) - - if self.train: - return inputs, label - else: - return inputs, label, vid_id.split("-")[0] - - def train_collate_fn(self, batch): - return default_collate(batch) - - -if __name__ == "__main__": - from configs.get_config import load_config - from datasets import * - from pipelines.color_transform import ColorJitterTransform - from pipelines.geo_transform import GeometryTransform - from torch.utils.data import DataLoader - - PIPELINES.register_module(module=GeometryTransform) - PIPELINES.register_module(module=ColorJitterTransform) - - config = load_config("configs/temporal/bin_cls/TimeSFormer_base_c23.yaml") - bin_ff = DATASETS.build( - cfg=config.DATASET, default_args=dict(split="val", config=config.DATASET) - ) - bin_ff_loader = DataLoader(bin_ff, batch_size=10, shuffle=True) - for b, (X, y) in enumerate(bin_ff_loader): - print(f"X.shape - {X.shape}, y shape - {y.shape}") - break diff --git a/video/fake-stormer/model_code/datasets/face_forensic_hm.py b/video/fake-stormer/model_code/datasets/face_forensic_hm.py deleted file mode 100644 index 4c4653b1d3a1dc0201d7a73c1d2ed1a404e0eeae..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/face_forensic_hm.py +++ /dev/null @@ -1,447 +0,0 @@ -# -*- coding: utf-8 -*- -import random - -import cv2 -import numpy as np -import torch -from imgaug import augmenters as iaa -from package_utils.bi_online_generation import ( - blendImages, - colorTransfer, - random_erode_dilate, - random_get_hull, -) -from package_utils.image_utils import load_image -from package_utils.transform import ( - get_affine_transform, - get_center_scale, -) -from package_utils.utils import draw_landmarks, vis_heatmap -from PIL import Image -from skimage import transform as sktransform - -from .builder import DATASETS, PIPELINES, build_pipeline -from .master import MasterDataset - - -@DATASETS.register_module() -class HeatmapFaceForensic(MasterDataset): - def __init__(self, config, split, **kwargs): - """ - @params: - config: Dataset config - split: train/val/test which directs to the split folders - """ - self.split = split - super().__init__(config, **kwargs) - if kwargs is not None: - for k, v in kwargs.items(): - if v is None: - raise ValueError(f"{k}:{v} retrieve a None value!") - self.__setattr__(k, v) - self.rot = 0 - self.pixel_std = 200 - self.target_w = self._cfg.IMAGE_SIZE[1] - self.target_h = self._cfg.IMAGE_SIZE[0] - self.aspect_ratio = self.target_w * 1.0 / self.target_h - self.sigma = self._cfg.SIGMA - self.heatmap_type = self._cfg.HEATMAP_TYPE - self.debug = self._cfg.DEBUG - # self.train = self._cfg.TRAIN - self.dynamic_fxray = self._cfg.DYNAMIC_FXRAY - - # Load data - self.image_paths, self.labels, self.mask_paths, self.ot_props = self._load_data( - split - ) - - # predefine mask distortion - self.distortion = iaa.Sequential([iaa.PiecewiseAffine(scale=(0.01, 0.15))]) - - # Calling transform methods for inputs - self.geo_transform = build_pipeline(config.TRANSFORM.geometry, PIPELINES) - self.colorjitter_transform = build_pipeline(config.TRANSFORM.color, PIPELINES) - - def _load_data(self, split): - from_file = self._cfg.DATA[self.split.upper()].FROM_FILE - - if not from_file: - image_paths, labels, mask_paths, ot_props = self._load_from_path(split) - else: - image_paths, labels, mask_paths, ot_props = self._load_from_file(split) - - if self.sampler_active and self.train: - print("Running sampler...") - params = dict(mask_paths=mask_paths, ot_props=ot_props) - data_sampler = self._sampler(image_paths, labels, **params) - image_paths, labels = data_sampler["image_paths"], data_sampler["labels"] - if len(mask_paths): - mask_paths = data_sampler["mask_paths"] - if len(ot_props): - ot_props = data_sampler["ot_props"] - print(f"n samples after running sampling --- {len(image_paths)}") - - assert ( - len(image_paths) != 0 - ), "Image paths have not been loaded! Please check image directory!" - assert ( - len(labels) != 0 - ), "Labels have not been loaded! Please check annotation file!" - # if not self.dynamic_fxray or self.split == 'val': - if from_file and not (self.dynamic_fxray): - assert ( - len(mask_paths) != 0 - ), "Mask paths have not been loaded! Please check mask directory!" - return image_paths, labels, mask_paths, ot_props - - def _reload_data(self): - self.image_paths, self.labels, self.mask_paths, self.ot_props = self._load_data( - self.split - ) - - def _gen_BI( - self, background_face, background_landmark, foreground_face_path, idx=None - ): - foreground_face = load_image(foreground_face_path) - - # down sample before blending - aug_size = random.randint(128, 317) - background_landmark = background_landmark * (aug_size / 317) - foreground_face = sktransform.resize( - foreground_face, (aug_size, aug_size), preserve_range=True - ).astype(np.uint8) - background_face = sktransform.resize( - background_face, (aug_size, aug_size), preserve_range=True - ).astype(np.uint8) - - # get random type of initial blending mask - mask = random_get_hull(background_landmark, background_face) - - if self.debug: - Image.fromarray((mask * 255).astype(np.uint8)).save( - f"samples/debugs/orig_CH_{idx}.jpg" - ) - - # random deform mask - mask = self.distortion.augment_image(mask) - mask = random_erode_dilate(mask) - - if self.debug: - Image.fromarray((mask * 255).astype(np.uint8)).save( - f"samples/debugs/deformed_CH_{idx}.jpg" - ) - - # filte empty mask after deformation - if np.sum(mask) == 0: - raise NotImplementedError - - # apply color transfer - foreground_face = colorTransfer(background_face, foreground_face, mask * 255) - - # blend two face - blended_face, mask = blendImages(foreground_face, background_face, mask * 255) - blended_face = blended_face.astype(np.uint8) - - # resize back to default resolution - blended_face = sktransform.resize( - blended_face, (317, 317), preserve_range=True - ).astype(np.uint8) - mask = sktransform.resize(mask, (317, 317), preserve_range=True) - mask = mask[:, :, 0:1] - return blended_face, mask - - def _gen_target( - self, background_face, background_landmark, foreground_face_path, idx=None - ): - data_type = "real" if random.randint(0, 1) else "fake" - - if not background_landmark.any(): - data_type = "real" - - if data_type == "fake": - face_img, mask = self._gen_BI( - background_face, background_landmark, foreground_face_path, idx=idx - ) - mask = (1 - mask) * mask * 4 - else: - face_img = background_face - mask = np.zeros((317, 317, 1)) - - face_img = Image.fromarray(face_img) - # randomly downsample after BI pipeline - if random.randint(0, 1): - aug_size = random.randint(64, 317) - if random.randint(0, 1): - face_img = face_img.resize((aug_size, aug_size), Image.BILINEAR) - else: - face_img = face_img.resize((aug_size, aug_size), Image.NEAREST) - face_img = face_img.resize((317, 317), Image.BILINEAR) - face_img = np.array(face_img) - - face_img = face_img[60:(317), 30:(287), :] - mask = mask[60:(317), 30:(287), :] - mask = np.repeat(mask, 3, 2) - mask = (mask * 255).astype(np.uint8) - return face_img, mask, int(data_type == "fake") - - def __len__(self): - return len(self.labels) - - def __getitem__(self, idx): - flag = True - while flag: - try: - img_path = self.image_paths[idx] - label = self.labels[idx] - vid_id = img_path.split("/")[-2] - img = load_image(img_path) - mask = None - - if self.debug: - Image.fromarray(img).save(f"samples/debugs/orig_{idx}.jpg") - - # Applying color transform to inputs - if self.split == "train": - color_transfomed = self.colorjitter_transform(img) - img = color_transfomed["image"] - - # if not self.dynamic_fxray or self.split == 'val': - if not self.dynamic_fxray: - if bool(self.mask_paths): - mask_path = self.mask_paths[idx] - mask = load_image(mask_path) - else: - if self.train: - best_match = ( - self.ot_props[idx]["best_match"] - if len(self.ot_props[idx]["best_match"]) - else [] - ) - if len(self.ot_props[idx]["aligned_lms"]): - f_lms = self.ot_props[idx]["aligned_lms"] - elif len(self.ot_props[idx]["orig_lms"]): - f_lms = self.ot_props[idx]["orig_lms"] - else: - f_lms = [] - - if self.debug: - img_lms_draw = draw_landmarks(img, f_lms) - Image.fromarray(img_lms_draw).save( - f"samples/debugs/orig_{idx}_lms.jpg" - ) - - if len(best_match): - best_match_idx = random.randint(0, len(best_match) - 1) - best_match_path = best_match[best_match_idx] - img, mask, label = self._gen_target( - img, f_lms, best_match_path, idx=idx - ) - else: - img, mask, label = self._gen_target(img, np.array([]), "") - else: - img = cv2.resize(img, (317, 317)) - # Best croppings from 18-299 for testing - img = img[18:(299), 18:(299), :] - target = None - - if mask is not None: - assert ( - mask.shape[:2] == img.shape[:2] - ), "Color Image and Mask must have the same shape!" - - # Applying geo transform to inputs and masks - if self.split == "train": - geo_transfomed = self.geo_transform(img, mask=mask) - img = geo_transfomed["image"] - mask = geo_transfomed["mask"] - - # Applying affine transform - c, s = get_center_scale( - img.shape[:2], self.aspect_ratio, pixel_std=self.pixel_std - ) - trans = get_affine_transform(c, s, self.rot, self._cfg.IMAGE_SIZE) - trans_heatmap = get_affine_transform( - c, s, self.rot, self._cfg.HEATMAP_SIZE - ) - - input = cv2.warpAffine( - img, - trans, - (int(self._cfg.IMAGE_SIZE[0]), int(self._cfg.IMAGE_SIZE[1])), - flags=cv2.INTER_LINEAR, - ) - - if mask is not None: - target = cv2.warpAffine( - mask, - trans_heatmap, - ( - int(self._cfg.HEATMAP_SIZE[0]), - int(self._cfg.HEATMAP_SIZE[1]), - ), - flags=cv2.INTER_LINEAR, - ) - - # Target encoding - # 0 for original, 1 for FXRay, 2 for NoFXRay. If 2, comment: mask = (1 - mask) * mask * 4 - heatmap, cstency_hm = ( - self.select_encode_method(version=1)(target) - if ( - target is not None - and self.heatmap_type == "gaussian" - and self.train - ) - else (None, None) - ) - - if self.debug: - Image.fromarray(input).save(f"samples/debugs/affine_{idx}.jpg") - Image.fromarray(target).save( - f"samples/debugs/mask_affine_{idx}.jpg" - ) - vis_heatmap( - input, - cstency_hm / 255, - f"samples/debugs/cstency_mask_{idx}.jpg", - ) - vis_heatmap(input, heatmap, f"samples/debugs/hm_{idx}.jpg") - - if self.train: - if self.split_image: - patch_img_trans = [] - patch_heatmap = [] - patch_cstency_hm = [] - patch_target = [] - patch_label = np.expand_dims(np.tile(label, len(heatmap)), -1) - - for i, (k, l) in enumerate( - [[0, 0], [1 / 2, 0], [0, 1 / 2], [1 / 2, 1 / 2]] - ): - input_ = input[ - int(self.target_h * k) : int( - self.target_h * (k + 1 / 2) - ), - int(self.target_w * l) : int( - self.target_w * (l + 1 / 2) - ), - :, - ] - heatmap_ = heatmap[i][ - int(self.heatmap_h * k) : int( - self.heatmap_h * (k + 1 / 2) - ), - int(self.heatmap_w * l) : int( - self.heatmap_w * (l + 1 / 2) - ), - ] - cstency_ = cstency_hm[i][ - int(self.heatmap_h * k) : int( - self.heatmap_h * (k + 1 / 2) - ), - int(self.heatmap_w * l) : int( - self.heatmap_w * (l + 1 / 2) - ), - ] - target_ = target[..., 0][ - int(self.heatmap_h * k) : int( - self.heatmap_h * (k + 1 / 2) - ), - int(self.heatmap_w * l) : int( - self.heatmap_w * (l + 1 / 2) - ), - ] - - # Normalise + Convert numpy array to tensor - input_ = input_ / 255 - patch_img_trans.append(self.final_transforms(input_)) - - patch_heatmap.append(heatmap_) - patch_cstency_hm.append(cstency_ / 255) - patch_target.append(target_ / 255) - else: - patch_img_trans = self.final_transforms(input / 255) - patch_heatmap = heatmap - patch_cstency_hm = cstency_hm / 255 - patch_target = target / 255 - patch_label = np.expand_dims(label, axis=-1) - # patch_label = label - else: - # Normalise + Convert numpy array to tensor - img_trans = input / 255 - img_trans = self.final_transforms(img_trans) - label = np.expand_dims(label, axis=-1) - flag = False - except Exception as e: - print("There is an exception during loading data, please check --- ", e) - idx = torch.randint(low=0, high=self.__len__(), size=(1,)).item() - - if self.train: - return ( - patch_img_trans, - patch_label, - patch_target, - patch_heatmap, - patch_cstency_hm, - ) - else: - meta = {"vid_id": vid_id, "img_path": img_path} - return img_trans, label, meta - - def train_collate_fn(self, batch): - batch_data = {} - img, label, target, hm, cstency_hm = zip(*batch) - - # Collating data in case of using spliting images into patches - if self.split_image: - hm_H, hm_W = hm[0][0].shape - - img = np.reshape(img, (-1)) - hm = np.reshape(hm, (-1, 1, hm_H, hm_W)) - cstency_hm = np.reshape(cstency_hm, (-1, 1, hm_H, hm_W)) - target = np.reshape(target, (-1, 1, hm_H, hm_W)) - label = np.reshape(label, (-1, 1)) - - img = torch.tensor([it.numpy() for it in img]) - heatmap = torch.tensor(hm).float() - cstency_heatmap = torch.tensor(cstency_hm).float() - target = torch.tensor(target).float() - label = torch.tensor(label) - - batch_data["img"] = img - batch_data["label"] = label - batch_data["target"] = target - batch_data["heatmap"] = heatmap - batch_data["cstency"] = cstency_heatmap - - return batch_data - - -if __name__ == "__main__": - # from datasets import * - from configs.get_config import load_config - from pipelines.color_transform import ColorJitterTransform - from pipelines.geo_transform import GeometryTransform - from torch.utils.data import DataLoader - - PIPELINES.register_module(module=GeometryTransform) - PIPELINES.register_module(module=ColorJitterTransform) - - config = load_config("configs/efn4_fpn_hm_adv.yaml") - hm_ff = DATASETS.build( - cfg=config.DATASET, default_args=dict(split="train", config=config.DATASET) - ) - hm_ff_loader = DataLoader( - hm_ff, batch_size=10, shuffle=False, collate_fn=hm_ff.train_collate_fn - ) - for b, batch_data in enumerate(hm_ff_loader): - inputs, labels, targets, heatmaps, cstency_heatmap = ( - batch_data["img"], - batch_data["label"], - batch_data["target"], - batch_data["heatmap"], - batch_data["cstency_heatmap"], - ) - print( - f"X.shape - {inputs.shape}, y shape - {labels.shape}, heatmaps - {heatmaps.shape}, consistency -- {cstency_heatmap.shape}" - ) - break diff --git a/video/fake-stormer/model_code/datasets/face_forensic_sbi.py b/video/fake-stormer/model_code/datasets/face_forensic_sbi.py deleted file mode 100644 index c92e169efd99e5fc1c9b2168c74fb73ad1837b1c..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/face_forensic_sbi.py +++ /dev/null @@ -1,463 +0,0 @@ -# -*- coding: utf-8 -*- -import os -import random -import sys - -import cv2 -import numpy as np -import torch -import torch.nn.functional as F -from package_utils.image_utils import crop_by_margin, load_image -from package_utils.transform import get_affine_transform, get_center_scale -from package_utils.utils import draw_landmarks, draw_most_vul_points, vis_heatmap -from PIL import Image - -from .builder import DATASETS, PIPELINES, build_pipeline -from .master import MasterDataset -from .pipelines.geo_transform import get_transforms -from .sbi.utils import * - - -@DATASETS.register_module() -class SBIFaceForensic(MasterDataset): - def __init__(self, config, split, **kwargs): - """ - @params: - config: Dataset config - split: train/val/test which directs to the split folders - """ - self.split = split - super(SBIFaceForensic, self).__init__(config, **kwargs) - if kwargs is not None: - for k, v in kwargs.items(): - if v is None: - raise ValueError(f"{k}:{v} retrieve a None value!") - self.__setattr__(k, v) - self.rot = 0 - self.pixel_std = 200 - self.target_w = self._cfg.IMAGE_SIZE[1] - self.target_h = self._cfg.IMAGE_SIZE[0] - self.aspect_ratio = self.target_w * 1.0 / self.target_h - self.sigma = self._cfg.SIGMA - self.heatmap_type = self._cfg.HEATMAP_TYPE - self.debug = self._cfg.DEBUG - # self.train = self._cfg.TRAIN - self.dynamic_fxray = self._cfg.DYNAMIC_FXRAY - - # Load data - self.image_paths_r, self.labels_r, self.mask_paths_r, self.ot_props_r = ( - self._load_data(split) - ) - - # Calling transform methods for inputs - self.geo_transform = build_pipeline( - config.TRANSFORM.geometry, - PIPELINES, - default_args={"additional_targets": {"image_f": "image", "mask_f": "mask"}}, - ) - # self.colorjitter_transform = build_pipeline(config.TRANSFORM.color, PIPELINES) - - self.transforms = get_transforms() - - def __len__(self): - return len(self.labels_r) - - def _load_img(self, img_path): - return load_image(img_path) - - def _reload_data(self): - self.image_paths, self.labels, self.mask_paths, self.ot_props = self._load_data( - self.split - ) - - def _load_data(self, split, anno_file=None): - from_file = self._cfg.DATA[self.split.upper()].FROM_FILE - - if not from_file: - image_paths, labels, mask_paths, ot_props = self._load_from_path(split) - else: - image_paths, labels, mask_paths, ot_props = self._load_from_file( - split, anno_file=anno_file - ) - - assert ( - len(image_paths) != 0 - ), "Image paths have not been loaded! Please check image directory!" - assert ( - len(labels) != 0 - ), "Labels have not been loaded! Please check annotation file!" - if not self.dynamic_fxray: - assert ( - len(mask_paths) != 0 - ), "Mask paths have not been loaded! Please check mask directory!" - - if self.sampler_active: - print("Running sampler...") - params = dict(mask_paths=mask_paths, ot_props=ot_props) - data_sampler = self._sampler(image_paths, labels, **params) - image_paths, labels = data_sampler["image_paths"], data_sampler["labels"] - if len(mask_paths): - mask_paths = data_sampler["mask_paths"] - if len(ot_props): - ot_props = data_sampler["ot_props"] - print(f"n samples after running sampling --- {len(image_paths)}") - return image_paths, labels, mask_paths, ot_props - - def __getitem__(self, idx): - flag = True - while flag: - try: - # Selecting data from data list - img_path = self.image_paths_r[idx] - label = self.labels_r[idx] - vid_id = img_path.split("/")[-2] - img = self._load_img(img_path) - if self.split == "test": - # Best is 17,17 and 0.0 and 5,5 - img = crop_by_margin(img, margin=[5, 5]) - - img_f = None - mask = None - mask_f = None - - # if not self.dynamic_fxray or self.split == 'val': - if not self.dynamic_fxray: - if bool(self.mask_paths_r): - mask_path = self.mask_paths_r[idx] - mask = self._load_img(mask_path) - else: - mask = np.zeros((img.shape[0], img.shape[1], 3)) - else: - if self.train: - if len(self.ot_props_r[idx]["aligned_lms"]): - f_lms = self.ot_props_r[idx]["aligned_lms"] - elif len(self.ot_props_r[idx]["orig_lms"]): - f_lms = self.ot_props_r[idx]["orig_lms"] - else: - f_lms = [] - f_lms = np.array(f_lms) - if not f_lms.any(): - raise ValueError( - "Can not find fake copy image of empty landmarks!" - ) - - if len(f_lms) > 68: - f_lms = reorder_landmark(f_lms) - - # if self.debug: - # img_lms_draw = draw_landmarks(img, f_lms) - # Image.fromarray(img_lms_draw).save(f'samples/debugs/orig_{idx}_lms.jpg') - - if self.split == "train": - if np.random.rand() < 0.5: - img, ___, f_lms, __ = sbi_hflip(img, None, f_lms, None) - - margin = np.random.randint(5, 25) - img_f, mask_f, img, mask, fake_intensity = gen_target( - img, f_lms, margin=[margin, margin], index=idx, debug=False - ) - target = None - target_f = None - - if mask is not None: - assert ( - mask.shape[:2] == img.shape[:2] - ), "Color Image and Mask must have the same shape!" - - # Applying affine transform - c, s = get_center_scale( - img.shape[:2], self.aspect_ratio, pixel_std=self.pixel_std - ) - - # Applying geo transform to images and masks - if self.split == "train": - geo_transfomed = self.geo_transform( - img, mask=mask, image_f=img_f, mask_f=mask_f - ) - img = geo_transfomed["image"] - mask = geo_transfomed["mask"] - img_f = geo_transfomed["image_f"] - mask_f = geo_transfomed["mask_f"] - - trans = get_affine_transform( - c, s, self.rot, self._cfg.IMAGE_SIZE, pixel_std=self.pixel_std - ) - trans_heatmap = get_affine_transform( - c, s, self.rot, self._cfg.HEATMAP_SIZE, pixel_std=self.pixel_std - ) - - input = cv2.warpAffine( - img, - trans, - (int(self._cfg.IMAGE_SIZE[0]), int(self._cfg.IMAGE_SIZE[1])), - flags=cv2.INTER_LINEAR, - ) - - if img_f is not None: - input_f = cv2.warpAffine( - img_f, - trans, - (int(self._cfg.IMAGE_SIZE[0]), int(self._cfg.IMAGE_SIZE[1])), - flags=cv2.INTER_LINEAR, - ) - - if mask is not None: - target = cv2.warpAffine( - mask, - trans_heatmap, - ( - int(self._cfg.HEATMAP_SIZE[0]), - int(self._cfg.HEATMAP_SIZE[1]), - ), - flags=cv2.INTER_LINEAR, - ) - - if mask_f is not None: - target_f = cv2.warpAffine( - mask_f, - trans_heatmap, - ( - int(self._cfg.HEATMAP_SIZE[0]), - int(self._cfg.HEATMAP_SIZE[1]), - ), - flags=cv2.INTER_LINEAR, - ) - - # Drawing the most vulnerable points (MVPs) - if self.debug: - mvp_f_drawed = draw_most_vul_points(target_f) - mvp_drawed = draw_most_vul_points(target) - Image.fromarray(mvp_f_drawed).save( - f"samples/debugs/mvp_f_{idx}.jpg" - ) - Image.fromarray(mvp_drawed).save(f"samples/debugs/mvp_{idx}.jpg") - - # Target encoding - # 0 for original, 1 for FXRay, 2 for NoFXRay. If 2, comment: mask = (1 - mask) * mask * 4 - heatmap, cstency_hm = ( - self.select_encode_method(version=1)(target) - if ( - target is not None - and self.heatmap_type == "gaussian" - and self.train - ) - else (None, None) - ) - heatmap_f, cstency_hm_f = ( - self.select_encode_method(version=1)(target_f) - if ( - target_f is not None - and self.heatmap_type == "gaussian" - and self.train - ) - else (None, None) - ) - - # Applying transform for blending images - if self.train: - if target_f is None: - transformed = self.transforms(image=input.astype("uint8")) - input = transformed["image"] - else: - transformed = self.transforms( - image=input.astype("uint8"), image_f=input_f.astype("uint8") - ) - input = transformed["image"] - input_f = transformed["image_f"] - - if self.debug: - Image.fromarray(input).save(f"samples/debugs/affine_{idx}.jpg") - Image.fromarray(input_f).save(f"samples/debugs/affine_f_{idx}.jpg") - Image.fromarray(target).save( - f"samples/debugs/mask_affine_{idx}.jpg" - ) - Image.fromarray(target_f).save( - f"samples/debugs/mask_affine_f_{idx}.jpg" - ) - Image.fromarray(mask).save(f"samples/debugs/mask_{idx}.jpg") - Image.fromarray(mask_f).save(f"samples/debugs/mask_f_{idx}.jpg") - vis_heatmap( - input, - cstency_hm_f / 255, - f"samples/debugs/cstency_mask_f_{idx}.jpg", - ) - vis_heatmap( - input, - cstency_hm / 255, - f"samples/debugs/cstency_mask_{idx}.jpg", - ) - vis_heatmap(input, heatmap, f"samples/debugs/hm_{idx}.jpg") - vis_heatmap(input_f, heatmap_f, f"samples/debugs/hm_f_{idx}.jpg") - - if self.train: - # if self.split_image: - # patch_img_trans = [] - # patch_heatmap_r = [] - # patch_img_trans_f = [] - # patch_heatmap_f = [] - # patch_target_r = [] - # patch_target_f = [] - - # for i, (k, l) in enumerate([[0,0], [1/2,0], [0,1/2], [1/2,1/2]]): - # input_ = input[int(self.target_h*k): int(self.target_h*(k+1/2)), int(self.target_w*l): int(self.target_w*(l+1/2)), :] - # input_f_ = input_f[int(self.target_h*k): int(self.target_h*(k+1/2)), int(self.target_w*l): int(self.target_w*(l+1/2)), :] - # heatmap_ = heatmap[i][int(self.heatmap_h*k): int(self.heatmap_h*(k+1/2)), int(self.heatmap_w*l): int(self.heatmap_w*(l+1/2))] - # heatmap_f_ = heatmap_f[i][int(self.heatmap_h*k): int(self.heatmap_h*(k+1/2)), int(self.heatmap_w*l): int(self.heatmap_w*(l+1/2))] - # target_ = target[..., 0][int(self.heatmap_h*k): int(self.heatmap_h*(k+1/2)), int(self.heatmap_w*l): int(self.heatmap_w*(l+1/2))] - # target_f_ = target_f[..., 0][int(self.heatmap_h*k): int(self.heatmap_h*(k+1/2)), int(self.heatmap_w*l): int(self.heatmap_w*(l+1/2))] - - # # Flipping - # if np.random.random() < 0.5: - # input_ = input_[:, ::-1, :] - # input_f_ = input_f_[:, ::-1, :] - # heatmap_f_ = heatmap_f_[:, ::-1] - - # #Normalise + Convert numpy array to tensor - # input_f_ = input_f_/255 - # patch_img_trans_f.append(self.final_transforms(input_f_)) - - # input_ = input_/255 - # patch_img_trans.append(self.final_transforms(input_)) - - # patch_heatmap_r.append(heatmap_) - # patch_heatmap_f.append(heatmap_f_) - # patch_target_r.append(target_/255) - # patch_target_f.append(target_f_/255) - # else: - patch_img_trans = self.final_transforms(input / 255) - patch_img_trans_f = self.final_transforms(input_f / 255) - patch_heatmap_f = heatmap_f - patch_heatmap_r = heatmap - patch_target_f = target_f / 255 - patch_target_r = target / 255 - patch_cstency_r = cstency_hm / 255 - patch_cstency_f = cstency_hm_f / 255 - else: - # Normalise + Convert numpy array to tensor - img_trans = input / 255 - img_trans = self.final_transforms(img_trans) - - label = np.expand_dims(label, axis=-1) - flag = False - except Exception as e: - # print(f'There is something wrong! Please check the DataLoader!, {e}') - flag = True - idx = torch.randint(low=0, high=self.__len__(), size=(1,)).item() - - if self.train: - return ( - patch_img_trans_f, - patch_heatmap_f, - patch_target_f, - patch_cstency_f, - patch_img_trans, - patch_heatmap_r, - patch_target_r, - patch_cstency_r, - ) - else: - meta = {"vid_id": vid_id, "img_path": img_path} - return img_trans, label, meta - - def train_collate_fn(self, batch): - batch_data = {} - - img_f, hm_f, target_f, cst_f, img_r, hm_r, target_r, cst_r = zip(*batch) - - # Collating data in case of using spliting images into patches - # if self.split_image: - # hm_H, hm_W = hm_r[0][0].shape - - # img_f = np.reshape(img_f, (-1)) - # hm_f = np.reshape(hm_f, (-1, 1, hm_H, hm_W)) - # target_f = np.reshape(target_f, (-1, 1, hm_H, hm_W)) - # img_r = np.reshape(img_r, (-1)) - # hm_r = np.reshape(hm_r, (-1, 1, hm_H, hm_W)) - # target_r = np.reshape(target_r, (-1, 1, hm_H, hm_W)) - - img = torch.cat( - [ - torch.tensor(np.array([it.numpy() for it in img_r])), - torch.tensor(np.array([it.numpy() for it in img_f])), - ], - 0, - ) - heatmap = torch.cat( - [ - torch.tensor(np.array(hm_r)).float(), - torch.tensor(np.array(hm_f)).float(), - ], - 0, - ) - target = torch.cat( - [ - torch.tensor(np.array(target_r)).float(), - torch.tensor(np.array(target_f)).float(), - ], - 0, - ) - label = torch.tensor([[0]] * len(img_r) + [[1]] * len(img_f)) - # label = torch.tensor([0] * len(img_r) + [1]*len(img_f)) - cst = torch.cat( - [ - torch.tensor(np.array(cst_r)).float(), - torch.tensor(np.array(cst_f)).float(), - ], - 0, - ) - - b_size = label.size(0) - - # Permute idxes - idxes = torch.randperm(b_size) - img, label, target, heatmap, cst = ( - img[idxes], - label[idxes], - target[idxes], - heatmap[idxes], - cst[idxes], - ) - - batch_data["img"] = img - batch_data["label"] = label - batch_data["target"] = target - batch_data["heatmap"] = heatmap - batch_data["cstency"] = cst - - return batch_data - - def train_worker_init_fn(self, worker_id): - # print('Current state {} --- worker id {}'.format(np.random.get_state()[1][0], worker_id)) - np.random.seed(np.random.get_state()[1][0] + worker_id) - - -if __name__ == "__main__": - from configs.get_config import load_config - from pipelines.geo_transform import GeometryTransform - from torch.utils.data import DataLoader - - PIPELINES.register_module(module=GeometryTransform) - - config = load_config("configs/efn4_fpn_sbi_adv.yaml") - hm_ff = DATASETS.build( - cfg=config.DATASET, default_args=dict(split="train", config=config.DATASET) - ) - hm_ff_loader = DataLoader( - hm_ff, - batch_size=10, - shuffle=True, - collate_fn=hm_ff.train_collate_fn, - worker_init_fn=hm_ff.train_worker_init_fn, - ) - - for b, batch_data in enumerate(hm_ff_loader): - inputs, labels, heatmaps, consistencies = ( - batch_data["img"], - batch_data["label"], - batch_data["heatmap"], - batch_data["cstency"], - ) - print( - f"X.shape - {inputs.shape}, y shape - {labels.shape}, heatmap shape - {heatmaps.shape}, {heatmaps.max()}, cst shape - {consistencies.shape}" - ) - break diff --git a/video/fake-stormer/model_code/datasets/fakesformer_bi.py b/video/fake-stormer/model_code/datasets/fakesformer_bi.py deleted file mode 100644 index 6cdee4afac2dafc3c6f794ececfb8c3d7281b64d..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/fakesformer_bi.py +++ /dev/null @@ -1,394 +0,0 @@ -# -*- coding: utf-8 -*- -import random - -import cv2 -import numpy as np -import torch -from imgaug import augmenters as iaa -from package_utils.bi_online_generation import ( - blendImages, - colorTransfer, - random_erode_dilate, - random_get_hull, -) -from package_utils.image_utils import load_image -from package_utils.transform import ( - get_affine_transform, - get_center_scale, -) -from package_utils.utils import draw_landmarks, vis_heatmap -from PIL import Image -from skimage import transform as sktransform - -from .builder import DATASETS, PIPELINES, build_pipeline -from .master import MasterDataset - - -@DATASETS.register_module() -class FakeSFormerBI(MasterDataset): - def __init__(self, config, split, **kwargs): - """ - @params: - config: Dataset config - split: train/val/test which directs to the split folders - """ - self.split = split - super().__init__(config, **kwargs) - if kwargs is not None: - for k, v in kwargs.items(): - if v is None: - raise ValueError(f"{k}:{v} retrieve a None value!") - self.__setattr__(k, v) - self.rot = 0 - self.pixel_std = 200 - self.target_w = self._cfg.IMAGE_SIZE[1] - self.target_h = self._cfg.IMAGE_SIZE[0] - self.aspect_ratio = self.target_w * 1.0 / self.target_h - self.sigma = self._cfg.SIGMA - self.heatmap_type = self._cfg.HEATMAP_TYPE - self.debug = self._cfg.DEBUG - self.dynamic_fxray = self._cfg.DYNAMIC_FXRAY - self.target_overlap = self._cfg.TARGET_OVERLAP - - # Load data - self.image_paths, self.labels, self.mask_paths, self.ot_props = self._load_data( - split - ) - - # predefine mask distortion - self.distortion = iaa.Sequential([iaa.PiecewiseAffine(scale=(0.01, 0.15))]) - - # Calling transform methods for inputs - self.geo_transform = build_pipeline(config.TRANSFORM.geometry, PIPELINES) - self.colorjitter_transform = build_pipeline(config.TRANSFORM.color, PIPELINES) - - def _load_data(self, split): - from_file = self._cfg.DATA[self.split.upper()].FROM_FILE - - if not from_file: - image_paths, labels, mask_paths, ot_props = self._load_from_path(split) - else: - image_paths, labels, mask_paths, ot_props = self._load_from_file(split) - - if self.sampler_active and self.train: - print("Running sampler...") - params = dict(mask_paths=mask_paths, ot_props=ot_props) - data_sampler = self._sampler(image_paths, labels, **params) - image_paths, labels = data_sampler["image_paths"], data_sampler["labels"] - if len(mask_paths): - mask_paths = data_sampler["mask_paths"] - if len(ot_props): - ot_props = data_sampler["ot_props"] - print(f"n samples after running sampling --- {len(image_paths)}") - - assert ( - len(image_paths) != 0 - ), "Image paths have not been loaded! Please check image directory!" - assert ( - len(labels) != 0 - ), "Labels have not been loaded! Please check annotation file!" - # if not self.dynamic_fxray or self.split == 'val': - if from_file and not (self.dynamic_fxray): - assert ( - len(mask_paths) != 0 - ), "Mask paths have not been loaded! Please check mask directory!" - return image_paths, labels, mask_paths, ot_props - - def _reload_data(self): - self.image_paths, self.labels, self.mask_paths, self.ot_props = self._load_data( - self.split - ) - - def _gen_BI( - self, background_face, background_landmark, foreground_face_path, idx=None - ): - foreground_face = load_image(foreground_face_path) - - # down sample before blending - aug_size = random.randint(128, 317) - background_landmark = background_landmark * (aug_size / 317) - foreground_face = sktransform.resize( - foreground_face, (aug_size, aug_size), preserve_range=True - ).astype(np.uint8) - background_face = sktransform.resize( - background_face, (aug_size, aug_size), preserve_range=True - ).astype(np.uint8) - - # get random type of initial blending mask - mask = random_get_hull(background_landmark, background_face) - - # if self.debug: - # Image.fromarray((mask*255).astype(np.uint8)).save(f'samples/debugs/orig_CH_{idx}.jpg') - - # random deform mask - mask = self.distortion.augment_image(mask) - mask = random_erode_dilate(mask) - - # if self.debug: - # Image.fromarray((mask*255).astype(np.uint8)).save(f'samples/debugs/deformed_CH_{idx}.jpg') - - # filte empty mask after deformation - if np.sum(mask) == 0: - raise NotImplementedError - - # apply color transfer - foreground_face = colorTransfer(background_face, foreground_face, mask * 255) - - # blend two face - blended_face, mask = blendImages(foreground_face, background_face, mask * 255) - blended_face = blended_face.astype(np.uint8) - - # resize back to default resolution - blended_face = sktransform.resize( - blended_face, (317, 317), preserve_range=True - ).astype(np.uint8) - mask = sktransform.resize(mask, (317, 317), preserve_range=True) - mask = mask[:, :, 0:1] - return blended_face, mask - - def _gen_target( - self, background_face, background_landmark, foreground_face_path, idx=None - ): - data_label = "real" if random.randint(0, 1) else "fake" - - if not background_landmark.any(): - data_label = "real" - - if data_label == "fake": - face_img, mask = self._gen_BI( - background_face, background_landmark, foreground_face_path, idx=idx - ) - mask = (1 - mask) * mask * 4 - else: - face_img = background_face - mask = np.zeros((317, 317, 1)) - - face_img = Image.fromarray(face_img) - # randomly downsample after BI pipeline - if random.randint(0, 1): - aug_size = random.randint(64, 317) - if random.randint(0, 1): - face_img = face_img.resize((aug_size, aug_size), Image.BILINEAR) - else: - face_img = face_img.resize((aug_size, aug_size), Image.NEAREST) - face_img = face_img.resize((317, 317), Image.BILINEAR) - face_img = np.array(face_img) - - soft_margin = np.random.randint(-30, 30) - - face_img = face_img[ - 30 + soft_margin : (287 + soft_margin), - 30 + soft_margin : (287 + soft_margin), - :, - ] - mask = mask[ - 30 + soft_margin : (287 + soft_margin), - 30 + soft_margin : (287 + soft_margin), - :, - ] - mask = np.repeat(mask, 3, 2) - mask = (mask * 255).astype(np.uint8) - return face_img, mask, int(data_label == "fake") - - def __len__(self): - return len(self.labels) - - def __getitem__(self, idx): - flag = True - while flag: - try: - img_path = self.image_paths[idx] - label = self.labels[idx] - vid_id = img_path.split("/")[-2] - img = load_image(img_path) - mask = None - - # if self.debug: - # Image.fromarray(img).save(f'samples/debugs/orig_{idx}.jpg') - - # Applying color transform to inputs - if self.split == "train": - color_transfomed = self.colorjitter_transform(img) - img = color_transfomed["image"] - - # if not self.dynamic_fxray or self.split == 'val': - if not self.dynamic_fxray: - if bool(self.mask_paths): - mask_path = self.mask_paths[idx] - mask = load_image(mask_path) - else: - if self.train: - best_match = ( - self.ot_props[idx]["best_match"] - if len(self.ot_props[idx]["best_match"]) - else [] - ) - if len(self.ot_props[idx]["aligned_lms"]): - f_lms = self.ot_props[idx]["aligned_lms"] - elif len(self.ot_props[idx]["orig_lms"]): - f_lms = self.ot_props[idx]["orig_lms"] - else: - f_lms = [] - - # if self.debug: - # img_lms_draw = draw_landmarks(img, f_lms) - # Image.fromarray(img_lms_draw).save(f'samples/debugs/orig_{idx}_lms.jpg') - - if len(best_match): - best_match_idx = random.randint(0, len(best_match) - 10) - best_match_path = best_match[best_match_idx] - img, mask, label = self._gen_target( - img, f_lms, best_match_path, idx=idx - ) - else: - img, mask, label = self._gen_target(img, np.array([]), "") - else: - img = cv2.resize(img, (317, 317)) - # Best croppings from 18-299 for testing - img = img[18:(299), 18:(299), :] - target = None - - if mask is not None: - assert ( - mask.shape[:2] == img.shape[:2] - ), "Color Image and Mask must have the same shape!" - - # Applying geo transform to inputs and masks - if self.split == "train": - geo_transfomed = self.geo_transform(img, mask=mask) - img = geo_transfomed["image"] - mask = geo_transfomed["mask"] - - # Applying affine transform - c, s = get_center_scale( - img.shape[:2], self.aspect_ratio, pixel_std=self.pixel_std - ) - trans = get_affine_transform(c, s, self.rot, self._cfg.IMAGE_SIZE) - trans_heatmap = get_affine_transform( - c, s, self.rot, self._cfg.HEATMAP_SIZE - ) - - input = cv2.warpAffine( - img, - trans, - (int(self._cfg.IMAGE_SIZE[0]), int(self._cfg.IMAGE_SIZE[1])), - flags=cv2.INTER_LINEAR, - ) - - if mask is not None: - if self.target_overlap: - target = cv2.warpAffine( - mask, - trans_heatmap, - ( - int(self._cfg.HEATMAP_SIZE[0]), - int(self._cfg.HEATMAP_SIZE[1]), - ), - flags=cv2.INTER_LINEAR, - ) - else: - mask = cv2.warpAffine( - mask, - trans, - ( - int(self._cfg.IMAGE_SIZE[0]), - int(self._cfg.IMAGE_SIZE[1]), - ), - flags=cv2.INTER_LINEAR, - ) - target = self._gen_vul_parts(blending_mask=mask) - - # Target encoding - # 0 for original, 1 for FXRay, 2 for NoFXRay. If 2, comment: mask = (1 - mask) * mask * 4 - heatmap, cstency_hm = ( - self.select_encode_method(version=0)(target, fake_intensity=1.0) - if ( - target is not None - and self.heatmap_type == "gaussian" - and self.train - ) - else (None, None) - ) - - if self.debug: - Image.fromarray(input).save(f"samples/debugs/affine_{idx}.jpg") - # Image.fromarray(target).save(f'samples/debugs/mask_affine_{idx}.jpg') - vis_heatmap(input, heatmap, f"samples/debugs/hm_{idx}.jpg") - - if self.train: - patch_img_trans = self.final_transforms(input / 255) - patch_heatmap = heatmap - patch_label = np.expand_dims(label, axis=-1) - # patch_label = label - else: - # Normalise + Convert numpy array to tensor - img_trans = input / 255 - img_trans = self.final_transforms(img_trans) - label = np.expand_dims(label, axis=-1) - flag = False - except Exception as e: - print("There is an exception during loading data, please check --- ", e) - idx = torch.randint(low=0, high=self.__len__(), size=(1,)).item() - - if self.train: - return patch_img_trans, patch_label, patch_heatmap - else: - meta = {"vid_id": vid_id, "img_path": img_path} - return img_trans, label, meta - - def train_collate_fn(self, batch): - batch_data = {} - img, label, hm = zip(*batch) - - # Collating data in case of using spliting images into patches - if self.split_image: - hm_H, hm_W = hm[0][0].shape - - img = np.reshape(img, (-1)) - hm = np.reshape(hm, (-1, 1, hm_H, hm_W)) - # cstency_hm = np.reshape(cstency_hm, (-1, 1, hm_H, hm_W)) - # target = np.reshape(target, (-1, 1, hm_H, hm_W)) - label = np.reshape(label, (-1, 1)) - - img = torch.tensor(np.array([it.numpy() for it in img])) - heatmap = torch.tensor(np.array(hm)).float() - # cstency_heatmap = torch.tensor(cstency_hm).float() - # target = torch.tensor(target).float() - label = torch.tensor(np.array(label)) - - batch_data["img"] = img - batch_data["label"] = label - # batch_data["target"] = target - batch_data["heatmap"] = heatmap - # batch_data["cstency"] = cstency_heatmap - - return batch_data - - -if __name__ == "__main__": - # from datasets import * - from configs.get_config import load_config - from pipelines.color_transform import ColorJitterTransform - from pipelines.geo_transform import GeometryTransform - from torch.utils.data import DataLoader - - PIPELINES.register_module(module=GeometryTransform) - PIPELINES.register_module(module=ColorJitterTransform) - - config = load_config("configs/spatial/vit_bi_base.yaml") - hm_ff = DATASETS.build( - cfg=config.DATASET, default_args=dict(split="val", config=config.DATASET) - ) - hm_ff_loader = DataLoader( - hm_ff, batch_size=10, shuffle=False, collate_fn=hm_ff.train_collate_fn - ) - for b, batch_data in enumerate(hm_ff_loader): - inputs, labels, heatmaps = ( - batch_data["img"], - batch_data["label"], - batch_data["heatmap"], - ) - print( - f"X.shape - {inputs.shape}, y shape - {labels.shape}, heatmaps - {heatmaps.shape}" - ) - break diff --git a/video/fake-stormer/model_code/datasets/fakesformer_sbi.py b/video/fake-stormer/model_code/datasets/fakesformer_sbi.py deleted file mode 100644 index fd97cc8e34cdaca517200d6d959eb865f90d9e45..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/fakesformer_sbi.py +++ /dev/null @@ -1,1074 +0,0 @@ -# -*- coding: utf-8 -*- -import os -import random -import sys - -import cv2 -import numpy as np -import torch -import torch.nn.functional as F -from numpy.random import randint -from package_utils.image_utils import crop_by_margin, load_image -from package_utils.transform import get_affine_transform, get_center_scale -from package_utils.utils import ( - draw_landmarks, - draw_most_vul_points, - vis_3d_heatmap, - vis_heatmap, -) -from PIL import Image - -from .builder import DATASETS, PIPELINES, build_pipeline -from .common import ParameterStore -from .master import MasterDataset -from .pipelines.geo_transform import get_transforms -from .sbi.utils import * - - -@DATASETS.register_module() -class FakeSFormerSBI(MasterDataset): - def __init__(self, config, split, **kwargs): - """ - @params: - config: Dataset config - split: train/val/test which directs to the split folders - """ - self.split = split - super(FakeSFormerSBI, self).__init__(config, **kwargs) - if kwargs is not None: - for k, v in kwargs.items(): - if v is None: - raise ValueError(f"{k}:{v} retrieve a None value!") - self.__setattr__(k, v) - self.rot = 0 - self.pixel_std = 200 - self.target_w = self._cfg.IMAGE_SIZE[1] - self.target_h = self._cfg.IMAGE_SIZE[0] - self.aspect_ratio = self.target_w * 1.0 / self.target_h - self.sigma = self._cfg.SIGMA - self.heatmap_type = self._cfg.HEATMAP_TYPE - self.debug = self._cfg.DEBUG - self.dynamic_blending_prob = self._cfg.DYNAMIC_BLENDING_PROB - self.dynamic_fxray = self._cfg.DYNAMIC_FXRAY - self.target_overlap = self._cfg.TARGET_OVERLAP - if self.data_type == "video": - self.mask_prob = self._cfg.MASK_PROB - self.temp_maskout = self._cfg.TEMP_MASKOUT - - # Load data - self.data_sampler = self._load_data(split) - - # Parse data - self._parsing_data() - - # Calling transform methods for inputs - self.geo_transform = build_pipeline( - config.TRANSFORM.geometry, - PIPELINES, - default_args={"additional_targets": {"image_f": "image", "mask_f": "mask"}}, - ) - - # predefine mask distortion - self.distortion = iaa.Sequential([iaa.PiecewiseAffine(scale=(0.01, 0.15))]) - - self.transforms = get_transforms(data_type=self.data_type) - - def __len__(self): - if self.data_type == "image": - assert "image_paths" in self.data_sampler.keys() - return len(self.labels_r) - elif self.data_type == "video": - return len(self.data_sampler.keys()) - else: - raise ValueError( - f'{self.data_type} has not been supported. Please use "image" or "video" instead!' - ) - - def _load_img(self, img_path): - return load_image(img_path) - - def _reload_data(self, epoch=0): - self.data_sampler = self._load_data(self.split, epoch=epoch) - - def _load_data(self, split, anno_file=None, epoch=0): - from_file = self._cfg.DATA[self.split.upper()].FROM_FILE - - if epoch == 0: - if not from_file: - self.image_paths, self.labels, self.mask_paths, self.ot_props = ( - self._load_from_path(split) - ) - else: - self.image_paths, self.labels, self.mask_paths, self.ot_props = ( - self._load_from_file(split, anno_file=anno_file) - ) - - assert ( - len(self.image_paths) != 0 - ), "Image paths have not been loaded! Please check image directory!" - assert ( - len(self.labels) != 0 - ), "Labels have not been loaded! Please check annotation file!" - if not self.dynamic_fxray: - assert ( - len(self.mask_paths) != 0 - ), "Mask paths have not been loaded! Please check mask directory!" - - if self.sampler_active: - print("Running sampler...") - params = dict( - mask_paths=self.mask_paths, ot_props=self.ot_props, epoch=epoch - ) - data_sampler = self._sampler(self.image_paths, self.labels, **params) - return data_sampler - - def _parsing_data(self): - assert self.data_type in ["image", "video"] - # Parsing data for training - if self.data_type == "video": - return - - self.image_paths_r, self.labels_r = ( - self.data_sampler["image_paths"], - self.data_sampler["labels"], - ) - if "mask_paths" in self.data_sampler.keys() and len( - self.data_sampler["mask_paths"] - ): - self.mask_paths_r = self.data_sampler["mask_paths"] - if "ot_props" in self.data_sampler.keys() and len( - self.data_sampler["ot_props"] - ): - self.ot_props_r = self.data_sampler["ot_props"] - - def __getitem_path__(self, idx): - param_store_ins = ParameterStore.get_instance() - # Use to store func parameters that can be reused to generate multiple blending, e.g. SBI synthesis frames - param_store_ins.add_parameters("data_type", self.data_type) - flag = True - - while flag: - try: - # Selecting data from data list - img_path = self.image_paths_r[idx] - label = self.labels_r[idx] - vid_id = img_path.split("/")[-2] - img = self._load_img(img_path) - if self.split == "test": - # Best is 9,9 and 0.0 and 11,11 - img = crop_by_margin(img, margin=[9, 9]) - - img_f = None - mask = None - mask_f = None - - # if not self.dynamic_fxray or self.split == 'val': - if not self.dynamic_fxray: - if bool(self.mask_paths_r): - mask_path = self.mask_paths_r[idx] - mask = self._load_img(mask_path) - else: - mask = np.zeros((img.shape[0], img.shape[1], 3)) - else: - if self.train: - if len(self.ot_props_r[idx]["aligned_lms"]): - f_lms = self.ot_props_r[idx]["aligned_lms"] - elif len(self.ot_props_r[idx]["orig_lms"]): - f_lms = self.ot_props_r[idx]["orig_lms"] - else: - f_lms = [] - f_lms = np.array(f_lms) - if not f_lms.any(): - raise ValueError( - "Can not find fake copy image of empty landmarks!" - ) - - if len(f_lms) > 68: - f_lms = reorder_landmark(f_lms) - - # if self.debug: - # img_lms_draw = draw_landmarks(img, f_lms) - # Image.fromarray(img_lms_draw).save(f'samples/debugs/orig_{idx}_lms.jpg') - - if self.split == "train": - if np.random.rand() < 0.5: - img, ___, f_lms, __ = sbi_hflip(img, None, f_lms, None) - - margin = np.random.randint(5, 25) - img_f, mask_f, img, mask, fake_intensity = gen_target( - img, - f_lms, - margin=[margin, margin], - index=idx, - debug=False, - dynamic_blending_prob=self.dynamic_blending_prob, - ) - target = None - target_f = None - - if mask is not None: - assert ( - mask.shape[:2] == img.shape[:2] - ), "Color Image and Mask must have the same shape!" - - # Applying affine transform - c, s = get_center_scale( - img.shape[:2], self.aspect_ratio, pixel_std=self.pixel_std - ) - - # Applying geo transform to images and masks - if self.split == "train": - geo_transfomed = self.geo_transform( - img, mask=mask, image_f=img_f, mask_f=mask_f - ) - img = geo_transfomed["image"] - mask = geo_transfomed["mask"] - img_f = geo_transfomed["image_f"] - mask_f = geo_transfomed["mask_f"] - - trans = get_affine_transform( - c, s, self.rot, self._cfg.IMAGE_SIZE, pixel_std=self.pixel_std - ) - trans_heatmap = get_affine_transform( - c, s, self.rot, self._cfg.HEATMAP_SIZE, pixel_std=self.pixel_std - ) - - input = cv2.warpAffine( - img, - trans, - (int(self._cfg.IMAGE_SIZE[0]), int(self._cfg.IMAGE_SIZE[1])), - flags=cv2.INTER_LINEAR, - ) - - if img_f is not None: - input_f = cv2.warpAffine( - img_f, - trans, - (int(self._cfg.IMAGE_SIZE[0]), int(self._cfg.IMAGE_SIZE[1])), - flags=cv2.INTER_LINEAR, - ) - - if mask is not None: - if self.target_overlap: - target = cv2.warpAffine( - mask, - trans_heatmap, - ( - int(self._cfg.HEATMAP_SIZE[0]), - int(self._cfg.HEATMAP_SIZE[1]), - ), - flags=cv2.INTER_LINEAR, - ) - else: - mask = cv2.warpAffine( - mask, - trans, - ( - int(self._cfg.IMAGE_SIZE[0]), - int(self._cfg.IMAGE_SIZE[1]), - ), - flags=cv2.INTER_LINEAR, - ) - target = self._gen_vul_parts(blending_mask=mask) - - if mask_f is not None: - if self.target_overlap: - target_f = cv2.warpAffine( - mask_f, - trans_heatmap, - ( - int(self._cfg.HEATMAP_SIZE[0]), - int(self._cfg.HEATMAP_SIZE[1]), - ), - flags=cv2.INTER_LINEAR, - ) - else: - mask_f = cv2.warpAffine( - mask_f, - trans, - ( - int(self._cfg.IMAGE_SIZE[0]), - int(self._cfg.IMAGE_SIZE[1]), - ), - flags=cv2.INTER_LINEAR, - ) - target_f = self._gen_vul_parts(blending_mask=mask_f) - - # Drawing the most vulnerable parts (MVPs) - if self.debug: - mvp_f_drawed = draw_most_vul_points(target_f) - mvp_drawed = draw_most_vul_points(target) - Image.fromarray(mvp_f_drawed).save( - f"samples/fakeformer_debugs/mvp_f_{idx}.jpg" - ) - Image.fromarray(mvp_drawed).save( - f"samples/fakeformer_debugs/mvp_{idx}.jpg" - ) - - # Target encoding - # 0 for original, 1 for FXRay, 2 for NoFXRay. If 2, comment: mask = (1 - mask) * mask * 4 - heatmap_f, cstency_hm_f = ( - self.select_encode_method(version=0)(target_f, fake_intensity=1.0) - if ( - target_f is not None - and self.heatmap_type == "gaussian" - and self.train - ) - else (None, None) - ) - heatmap, cstency_hm = ( - self.select_encode_method(version=0)(target, fake_intensity=1.0) - if ( - target is not None - and self.heatmap_type == "gaussian" - and self.train - ) - else (None, None) - ) - - # Applying transform for blending images - if self.train: - if target_f is None: - transformed = self.transforms(image=input.astype("uint8")) - input = transformed["image"] - else: - transformed = self.transforms( - image=input.astype("uint8"), image_f=input_f.astype("uint8") - ) - input = transformed["image"] - input_f = transformed["image_f"] - - if self.debug: - Image.fromarray(input).save( - f"samples/fakeformer_debugs/affine_{idx}.jpg" - ) - Image.fromarray(input_f).save( - f"samples/fakeformer_debugs/affine_f_{idx}.jpg" - ) - Image.fromarray(np.tile(target, 3)).save( - f"samples/fakeformer_debugs/mask_affine_{idx}.jpg" - ) - Image.fromarray(np.tile(target_f, 3)).save( - f"samples/fakeformer_debugs/mask_affine_f_{idx}.jpg" - ) - Image.fromarray(mask).save( - f"samples/fakeformer_debugs/mask_{idx}.jpg" - ) - Image.fromarray(mask_f).save( - f"samples/fakeformer_debugs/mask_f_{idx}.jpg" - ) - if cstency_hm is not None: - vis_heatmap( - input, - cstency_hm_f / 255, - f"samples/fakeformer_debugs/cstency_mask_f_{idx}.jpg", - ) - vis_heatmap( - input, - cstency_hm / 255, - f"samples/fakeformer_debugs/cstency_mask_{idx}.jpg", - ) - vis_heatmap( - input, heatmap, f"samples/fakeformer_debugs/hm_{idx}.jpg" - ) - vis_heatmap( - input_f, heatmap_f, f"samples/fakeformer_debugs/hm_f_{idx}.jpg" - ) - - if self.train: - patch_img_trans = self.final_transforms(input / 255) - patch_img_trans_f = self.final_transforms(input_f / 255) - patch_heatmap_f = heatmap_f - patch_heatmap_r = heatmap - patch_target_f = target_f / 255 - patch_target_r = target / 255 - patch_cstency_r = ( - cstency_hm / 255 if cstency_hm is not None else None - ) - patch_cstency_f = ( - cstency_hm_f / 255 if cstency_hm_f is not None else None - ) - else: - # Normalise + Convert numpy array to tensor - img_trans = input / 255 - img_trans = self.final_transforms(img_trans) - - label = np.expand_dims(label, axis=-1) - flag = False - except Exception as e: - print(f"There is something wrong! Please check the DataLoader!, {e}") - flag = True - idx = torch.randint(low=0, high=self.__len__(), size=(1,)).item() - - if self.train: - return ( - patch_img_trans_f, - patch_heatmap_f, - patch_target_f, - patch_cstency_f, - patch_img_trans, - patch_heatmap_r, - patch_target_r, - patch_cstency_r, - ) - else: - meta = {"vid_id": vid_id, "img_path": img_path} - return img_trans, label, meta - - def __getitem_video__(self, idx): - param_store_ins = ParameterStore.get_instance() - # Use to store func parameters that can be reused to generate multiple blending, e.g. SBI synthesis frames - param_store_ins.add_parameters("data_type", self.data_type) - flag = True - - while flag: - try: - # Real data section - inputs = [] - targets = [] - temp_loc = np.zeros(self.samples_per_video) - masked_matrixes = [] - - # Fake data section - inputs_f = [] - targets_f = [] - labels = [] - temp_loc_f = np.ones(self.samples_per_video) - masked_matrixes_f = [] - - vid_id = [*self.data_sampler.keys()][idx] - vid_data = self.data_sampler[vid_id] - - # f_idxes = randint(0, len(vid_data), self.samples_per_video) #randint might generate duplicate values, be careful! - f_idxes = range(0, self.samples_per_video) - pre_lms = None - vid_path = None - - if self.train: - seq_det = self.distortion.to_deterministic() - margin_ = np.random.randint(5, 25) - else: - # Optimal hyper-param for testing - margin_ = ( - 15 # 0 for DFW, 5 for DFDCP, 13 for DFD, and 15 for the others - ) - - for ix, f_idx in enumerate(f_idxes): - it = vid_data[f_idx] - img_path = it["image"] - if ix == 0: - vid_path = os.path.dirname(img_path) - label = it["label"] - img = self._load_img(img_path) - if self.split == "test": - img = crop_by_margin( - img, margin=[margin_, margin_] - ) # Best is 17,17 and 0.0 and 5,5 - - img_f = None - mask = None - mask_f = None - - # if not self.dynamic_fxray or self.split == 'val': - if self.train: - assert ( - self.dynamic_fxray - ), "Online blending (dynamic_fxray) is always TRUE when working with SBI!" - if "ot_props" in it.keys(): - ot_props = it["ot_props"] - - if ( - len(ot_props["aligned_lms"]) and "aligned" in img_path - ): # only take aligned lms when input already aligned - f_lms = ot_props["aligned_lms"] - elif len(ot_props["orig_lms"]): - f_lms = ot_props["orig_lms"] - else: - f_lms = [] - f_lms = np.array(f_lms) - if not f_lms.any(): - raise ValueError( - "Can not find fake copy image of empty landmarks!" - ) - - if len(f_lms) > 68: - f_lms = reorder_landmark(f_lms) - # Compute the variation of lms between each frame - if f_idx != 0: - l2_lms_dis = np.linalg.norm(f_lms - pre_lms) / len( - f_lms - ) - # print(f'Change of norm of landmark distance --- {l2_lms_dis}') - if l2_lms_dis > 0.35: - f_lms = pre_lms + (f_lms - pre_lms) / ( - round(l2_lms_dis / 0.2) - ) - pre_lms = f_lms - - if self.debug: - img_lms_draw = draw_landmarks(img, f_lms) - Image.fromarray(img_lms_draw).save( - f"samples/debugs/orig_{idx}_{f_idx}_lms.jpg" - ) - - if self.split == "train": - rand_flip = param_store_ins.get_parameters("rand_flip") - if rand_flip is None: - rand_flip = np.random.rand() < 0.5 - param_store_ins.add_parameters( - "rand_flip", rand_flip - ) - - if rand_flip < 0.5: - img, ___, f_lms, __ = sbi_hflip( - img, None, f_lms, None - ) - - img_f, mask_f, img, mask, fake_intensity = gen_target( - img, - f_lms, - margin=[margin_, margin_], - index=f_idx, - debug=False, - dynamic_blending_prob=self.dynamic_blending_prob, - distortion=seq_det, - ) - - target = None - target_f = None - - if mask is not None: - assert ( - mask.shape[:2] == img.shape[:2] - ), "Color Image and Mask must have the same shape!" - - # Applying affine transform - c, s = get_center_scale( - img.shape[:2], self.aspect_ratio, pixel_std=self.pixel_std - ) - - # Applying geo transform to images and masks - # if self.split == 'train': - # geo_transfomed = self.geo_transform(img, mask=mask, image_f=img_f, mask_f=mask_f) - # img = geo_transfomed['image'] - # mask = geo_transfomed['mask'] - # img_f = geo_transfomed['image_f'] - # mask_f = geo_transfomed['mask_f'] - - trans = get_affine_transform( - c, s, self.rot, self._cfg.IMAGE_SIZE, pixel_std=self.pixel_std - ) - trans_heatmap = get_affine_transform( - c, s, self.rot, self._cfg.HEATMAP_SIZE, pixel_std=self.pixel_std - ) - - input = cv2.warpAffine( - img, - trans, - (int(self._cfg.IMAGE_SIZE[0]), int(self._cfg.IMAGE_SIZE[1])), - flags=cv2.INTER_LINEAR, - ) - - if img_f is not None: - input_f = cv2.warpAffine( - img_f, - trans, - ( - int(self._cfg.IMAGE_SIZE[0]), - int(self._cfg.IMAGE_SIZE[1]), - ), - flags=cv2.INTER_LINEAR, - ) - - if mask is not None: - if self.target_overlap: - target = cv2.warpAffine( - mask, - trans_heatmap, - ( - int(self._cfg.HEATMAP_SIZE[0]), - int(self._cfg.HEATMAP_SIZE[1]), - ), - flags=cv2.INTER_LINEAR, - ) - else: - mask = cv2.warpAffine( - mask, - trans, - ( - int(self._cfg.IMAGE_SIZE[0]), - int(self._cfg.IMAGE_SIZE[1]), - ), - flags=cv2.INTER_LINEAR, - ) - target = self._gen_vul_parts(blending_mask=mask) - - if mask_f is not None: - if self.target_overlap: - target_f = cv2.warpAffine( - mask_f, - trans_heatmap, - ( - int(self._cfg.HEATMAP_SIZE[0]), - int(self._cfg.HEATMAP_SIZE[1]), - ), - flags=cv2.INTER_LINEAR, - ) - else: - mask_f = cv2.warpAffine( - mask_f, - trans, - ( - int(self._cfg.IMAGE_SIZE[0]), - int(self._cfg.IMAGE_SIZE[1]), - ), - flags=cv2.INTER_LINEAR, - ) - target_f = self._gen_vul_parts(blending_mask=mask_f) - - # Drawing the most vulnerable parts (MVPs) - if self.debug: - mvp_drawed = draw_most_vul_points(target_f) - Image.fromarray(mvp_drawed).save( - f"samples/debugs/mvp_{idx}_{f_idx}_{fake_intensity}.png" - ) - - # Applying transform for blending images - if self.train: - if target_f is None: - if f_idx == 0: - transformed = self.transforms( - image=input.astype(np.uint8) - ) - input = transformed["image"] - replay_params = transformed["replay"] - param_store_ins.add_parameters( - "replay_transform", replay_params - ) - else: - replay_params = param_store_ins.get_parameters( - "replay_transform" - ) - data = alb.ReplayCompose.replay( - replay_params, image=input.astype(np.uint8) - ) - input = data["image"] - else: - if f_idx == 0: - transformed = self.transforms( - image=input.astype(np.uint8), - image_f=input_f.astype(np.uint8), - ) - input = transformed["image"] - input_f = transformed["image_f"] - replay_params = transformed["replay"] - param_store_ins.add_parameters( - "replay_transform", replay_params - ) - else: - replay_params = param_store_ins.get_parameters( - "replay_transform" - ) - data = alb.ReplayCompose.replay( - replay_params, - image=input.astype(np.uint8), - image_f=input_f.astype(np.uint8), - ) - input = data["image"] - input_f = data["image_f"] - - mask_out_rand = ( - param_store_ins.get_parameters("mask_out_rand") - or np.random.rand() - ) - label = 1 - if f_idx == 0: - param_store_ins.add_parameters( - "mask_out_rand", mask_out_rand - ) - if mask_out_rand > 0.5 and self.mask_prob > 0: - # Mask out vulnerabilities - ( - input_f, - target_f, - masked_matrix_f, - upper_bound_value, - fake_intensity, - ) = self._mask_out_vulnerability2( - input_f, - target_f, - fake_intensity=fake_intensity, - mask_prob=self.mask_prob, - ) - if upper_bound_value == 1: - label = 0 - - temp_loc_f[f_idx] = ( - fake_intensity # Updating temporal location value, default 0 - ) - input, target, masked_matrix, upper_bound_value, _ = ( - self._mask_out_vulnerability2( - input, - target, - fake_intensity=fake_intensity, - mask_prob=self.mask_prob, - ) - ) - else: - masked_matrix = np.ones_like(target[..., 0]) - masked_matrix_f = np.ones_like(target_f[..., 0]) - - targets.append(target) - targets_f.append(target_f) - masked_matrixes.append(masked_matrix) - masked_matrixes_f.append(masked_matrix_f) - - if self.debug: - # Image.fromarray(mask).save(f'samples/debugs/mask_{fake_intensity}.jpg') - # Image.fromarray(mask_f).save(f'samples/debugs/mask_f_{fake_intensity}.jpg') - Image.fromarray(input).save( - f"samples/debugs/affine_{idx}_{f_idx}_{fake_intensity}.jpg" - ) - Image.fromarray(input_f).save( - f"samples/debugs/affine_f_{idx}_{f_idx}_{fake_intensity}.png" - ) - # Image.fromarray(target).save(f'samples/debugs/mask_affine_{idx}_{f_idx}_{fake_intensity}.jpg') - Image.fromarray(target_f).save( - f"samples/debugs/mask_affine_f_{idx}_{f_idx}_{fake_intensity}.png" - ) - Image.fromarray(mask_f).save( - f"samples/debugs/mask_f_{idx}_{f_idx}_{fake_intensity}.png" - ) - - if self.train: - img_trans = self.final_transforms(input / 255) - img_trans_f = self.final_transforms(input_f / 255) - inputs_f.append(img_trans_f) - else: - # Normalise + Convert numpy array to tensor - img_trans = input / 255 - img_trans = self.final_transforms(img_trans) - - inputs.append(img_trans) - labels.append(label) - - if self.train and self.temp_maskout: - if np.random.rand() < 0.5: - start_idx = np.random.randint(0, len(inputs) - 1) - end_idx = min( - len(inputs), - start_idx + np.random.randint(1, int(len(inputs) / 2 + 1)), - ) - targets_f = np.array(targets_f) - targets = np.array(targets) - - if np.random.rand() > 0.5: # Repeat - # inputs_f[start_idx:end_idx] = inputs[start_idx:end_idx] - inputs_f[start_idx:end_idx] = ( - inputs_f[start_idx] - .unsqueeze(0) - .repeat(end_idx - start_idx, 1, 1, 1) - ) - targets_f[start_idx:end_idx] = targets_f[ - np.newaxis, start_idx - ].repeat(end_idx - start_idx, 0) - temp_loc_f[start_idx:end_idx] = temp_loc_f[ - np.newaxis, start_idx - ].repeat(end_idx - start_idx) - else: # Temporal cutout - zero_transform = self.final_transforms( - np.zeros( - ( - int(self._cfg.IMAGE_SIZE[0]), - int(self._cfg.IMAGE_SIZE[1]), - 3, - ) - ) - ) - - # Assigning values for the range from start_idx to end_idx - inputs_f.extend(inputs_f[start_idx:end_idx]) - targets_f = np.append( - targets_f, targets_f[start_idx:end_idx], 0 - ) - temp_loc_f = np.append( - temp_loc_f, temp_loc_f[start_idx:end_idx], 0 - ) - - inputs_f[start_idx:end_idx] = zero_transform.unsqueeze( - 0 - ).repeat(end_idx - start_idx, 1, 1, 1) - targets_f[start_idx:end_idx] = targets[start_idx:end_idx] - temp_loc_f[start_idx:end_idx] = temp_loc[start_idx:end_idx] - - inputs_f = inputs_f[: self.samples_per_video] - targets_f = targets_f[: self.samples_per_video] - temp_loc_f = temp_loc_f[: self.samples_per_video] - - labels[start_idx:end_idx] = [ - 0 for i in range(end_idx - start_idx) - ] - - # Target encoding - # 0 for original, 1 for FXRay, 2 for NoFXRay. If 2, find and comment the line: mask = (1 - mask) * mask * 4 - heatmap_f, cstency_hm_f, normalized_params = ( - self.select_encode_method(version=0, dimension="temporal")( - targets_f, fake_intensity=fake_intensity - ) - if (len(targets_f) and self.train) - else (None, None, None) - ) - heatmap, cstency_hm, _ = ( - self.select_encode_method(version=0, dimension="temporal")( - targets, fake_intensity=fake_intensity, **normalized_params - ) - if (len(targets) and self.train) - else (None, None, None) - ) - - # Debugging 3D heatmap - if self.debug: - vis_3d_heatmap(heatmap, f"samples/debugs/hm_{idx}_{f_idx}.png") - vis_3d_heatmap(heatmap_f, f"samples/debugs/hm_f_{idx}_{f_idx}.png") - vis_3d_heatmap( - cstency_hm, f"samples/debugs/cstency_{idx}_{f_idx}.png" - ) - vis_3d_heatmap( - cstency_hm_f, f"samples/debugs/cstency_f_{idx}_{f_idx}.png" - ) - - # End for loop - if not self.train: - inputs = torch.tensor( - np.array([[j.numpy() for j in i] for i in inputs]) - ).transpose(0, 1) - labels = torch.tensor(np.array([np.array(it) for it in labels])) - label = torch.max(labels).unsqueeze(0) - else: - label = np.max(labels) - if label == 0: - raise ValueError( - "There is at least one frame containing artifacts!" - ) - - flag = False - ParameterStore.reset() - except Exception as e: - print(f"There is something wrong! Please check the DataLoader!, {e}") - flag = True - idx = torch.randint(low=0, high=self.__len__(), size=(1,)).item() - - if self.train: - return ( - inputs, - inputs_f, - heatmap, - heatmap_f, - 0, - 1, - temp_loc, - temp_loc_f, - masked_matrixes, - masked_matrixes_f, - cstency_hm, - cstency_hm_f, - ) - else: - meta = {"vid_id": vid_id.split("+++")[0], "vid_path": vid_path} - return inputs, label, meta - - def __getitem__(self, idx): - if self.data_type == "image": - return self.__getitem_path__(idx=idx) - elif self.data_type == "video": - return self.__getitem_video__(idx=idx) - else: - raise ValueError( - f"{self.data_type} has not been supported. Only image or video are used for training!" - ) - - def train_collate_fn(self, batch): - batch_data = {} - - if self.data_type == "image": - img_f, hm_f, target_f, cst_f, img_r, hm_r, target_r, cst_r = zip(*batch) - - img = torch.cat( - [ - torch.tensor(np.array([it.numpy() for it in img_r])), - torch.tensor(np.array([it.numpy() for it in img_f])), - ], - 0, - ) - heatmap = torch.cat( - [ - torch.tensor(np.array(hm_r)).float(), - torch.tensor(np.array(hm_f)).float(), - ], - 0, - ) - target = torch.cat( - [ - torch.tensor(np.array(target_r)).float(), - torch.tensor(np.array(target_f)).float(), - ], - 0, - ) - label = torch.tensor([[0]] * len(img_r) + [[1]] * len(img_f)) - cst = ( - torch.cat( - [ - torch.tensor(np.array(cst_r)).float(), - torch.tensor(np.array(cst_f)).float(), - ], - 0, - ) - if None not in cst_r - else None - ) - - b_size = label.size(0) - - # Permute idxes - idxes = torch.randperm(b_size) - img, label, target, heatmap = ( - img[idxes], - label[idxes], - target[idxes], - heatmap[idxes], - ) - if cst is not None: - cst = cst[idxes] - - batch_data["img"] = img - batch_data["label"] = label - batch_data["target"] = target - batch_data["heatmap"] = heatmap - batch_data["cstency"] = cst - else: - ( - img_r, - img_f, - hm_r, - hm_f, - label_r, - label_f, - temp_loc_r, - temp_loc_f, - mask_idx_r, - mask_idx_f, - cst_r, - cst_f, - ) = zip(*batch) - - img = torch.cat( - [ - torch.tensor( - np.array([[j.numpy() for j in i] for i in img_r]) - ).transpose(1, 2), - torch.tensor( - np.array([[j.numpy() for j in i] for i in img_f]) - ).transpose(1, 2), - ], - 0, - ) - label = torch.cat( - [ - torch.tensor([i for i in label_r]), - torch.tensor([i for i in label_f]), - ], - 0, - ).unsqueeze(1) - hm = torch.cat( - [ - torch.tensor(np.array(hm_r)).float(), - torch.tensor(np.array(hm_f)).float(), - ], - 0, - ).unsqueeze(1) - temp_loc = torch.cat( - [ - torch.tensor(np.array([i for i in temp_loc_r])), - torch.tensor(np.array([i for i in temp_loc_f])), - ], - 0, - ) - mask_idx = torch.cat( - [ - torch.tensor(np.array(mask_idx_r)), - torch.tensor(np.array(mask_idx_f)), - ], - 0, - ).unsqueeze(1) - cst = torch.cat( - [ - torch.tensor(np.array(cst_r)).float(), - torch.tensor(np.array(cst_f)).float(), - ], - 0, - ).unsqueeze(1) - - b_size = label.size(0) - - # Permute idxes - idxes = torch.randperm(b_size) - img, label, hm, temp_loc, mask_idx, cst = ( - img[idxes], - label[idxes], - hm[idxes], - temp_loc[idxes], - mask_idx[idxes], - cst[idxes], - ) - - batch_data["img"] = img - batch_data["label"] = label - batch_data["heatmap"] = hm - batch_data["temp_loc"] = temp_loc - batch_data["mask_out_p"] = mask_idx - batch_data["cstency"] = cst - - return batch_data - - def train_worker_init_fn(self, worker_id): - # print('Current state {} --- worker id {}'.format(np.random.get_state()[1][0], worker_id)) - np.random.seed(np.random.get_state()[1][0] + worker_id) - - -if __name__ == "__main__": - from configs.get_config import load_config - from pipelines.geo_transform import GeometryTransform - from torch.utils.data import DataLoader - - PIPELINES.register_module(module=GeometryTransform) - - config = load_config("configs/temporal/ResNet3D_EFPN3D_hm3D_c23.yaml") - - # Seed - seed = 529 - random.seed(seed) - torch.manual_seed(seed) - np.random.seed(seed) - torch.cuda.manual_seed(seed) - - hm_ff = DATASETS.build( - cfg=config.DATASET, default_args=dict(split="val", config=config.DATASET) - ) - hm_ff_loader = DataLoader( - hm_ff, - batch_size=8, - shuffle=True, - collate_fn=hm_ff.train_collate_fn, - worker_init_fn=hm_ff.train_worker_init_fn, - ) - - for b, batch_data in enumerate(hm_ff_loader): - inputs, labels, heatmaps = ( - batch_data["img"], - batch_data["label"], - batch_data["heatmap"], - ) - print( - f"X.shape - {inputs.shape}, y shape - {labels.shape}, heatmap shape - {heatmaps.shape}" - ) - break diff --git a/video/fake-stormer/model_code/datasets/ff.py b/video/fake-stormer/model_code/datasets/ff.py deleted file mode 100644 index 9844a63f9094dc81607806e8320437411f161495..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/ff.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- -import os -from glob import glob - -import numpy as np - -from .builder import DATASETS -from .common import CommonDataset - - -@DATASETS.register_module() -class FF(CommonDataset): - def __init__(self, cfg, **kwargs): - super().__init__(cfg, **kwargs) - - def _load_from_path(self, split): - assert os.path.exists( - self._cfg.DATA[self.split.upper()].ROOT - ), "Root path to dataset can not be None!" - data = self._cfg["DATA"] - data_type = data.TYPE - fake_types = self._cfg.DATA[split.upper()]["FAKETYPE"] - label_folders = self._cfg.DATA[split.upper()]["LABEL_FOLDER"] - img_paths, labels, mask_paths, ot_props = [], [], [], [] - - # Load image data for each type of fake techniques - for idx, ft in enumerate(fake_types): - data_dir = os.path.join( - self._cfg.DATA[self.split.upper()].ROOT, self.split, data_type, ft - ) - if not os.path.exists(data_dir): - raise ValueError("Data Directory can not be invalid!") - - for sub_dir in os.listdir(data_dir): - sub_dir_path = os.path.join(data_dir, sub_dir) - img_paths_ = glob(f"{sub_dir_path}/*.{self._cfg.IMAGE_SUFFIX}") - - img_paths.extend(img_paths_) - labels.extend(np.full(len(img_paths_), int("original" not in ft))) - - print("{} image paths have been loaded from FF++!".format(len(img_paths))) - return img_paths, labels, mask_paths, ot_props diff --git a/video/fake-stormer/model_code/datasets/master.py b/video/fake-stormer/model_code/datasets/master.py deleted file mode 100644 index 18d546bd481bf5709c06cc36f348d462a2ffd104..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/master.py +++ /dev/null @@ -1,48 +0,0 @@ -# -*- coding: utf-8 -*- -from .builder import DATASETS -from .celebDF_v1 import CDFV1 -from .celebDF_v2 import CDFV2 -from .combine import Combine -from .df40 import DF40 -from .dfd import DFD -from .dfdc import DFDC -from .dfdcp import DFDCP -from .dfo import DFo -from .dfw import DFW -from .diffswap import DiffSwap -from .ff import FF - - -@DATASETS.register_module() -class MasterDataset( - CDFV1, FF, DFDCP, CDFV2, DFDC, DFD, DFW, DFo, DiffSwap, DF40, Combine -): - def __init__(self, cfg, **kwargs): - super().__init__(cfg, **kwargs) - - def _load_from_path(self, split): - # Explicitly overide some main methods from the dataset config - if self.dataset == "FF++": - return MasterDataset.__mro__[2]._load_from_path(self, split=split) - elif self.dataset == "Celeb-DFv1": - return MasterDataset.__mro__[1]._load_from_path(self, split=split) - elif self.dataset == "DFDCP": - return MasterDataset.__mro__[3]._load_from_path(self, split=split) - elif self.dataset == "Celeb-DFv2": - return MasterDataset.__mro__[4]._load_from_path(self, split=split) - elif self.dataset == "DFDC": - return MasterDataset.__mro__[5]._load_from_path(self, split=split) - elif self.dataset == "DFD": - return MasterDataset.__mro__[6]._load_from_path(self, split=split) - elif self.dataset == "DFW": - return MasterDataset.__mro__[7]._load_from_path(self, split=split) - elif self.dataset == "DFo": - return MasterDataset.__mro__[8]._load_from_path(self, split=split) - elif self.dataset == "DiffSwap": - return MasterDataset.__mro__[9]._load_from_path(self, split=split) - elif self.dataset == "DF40": - return MasterDataset.__mro__[10]._load_from_path(self, split=split) - elif self.dataset == "Combine": - return MasterDataset.__mro__[11]._load_from_path(self, split=split) - else: - return NotImplementedError(f"{self.dataset} has not been supported yet!") diff --git a/video/fake-stormer/model_code/datasets/pipelines/__init__.py b/video/fake-stormer/model_code/datasets/pipelines/__init__.py deleted file mode 100644 index 3be7f6cb584fa2e32c5a9f17f7511fc0ee65e738..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/pipelines/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# -*- coding: utf-8 -*- -from .color_transform import ColorJitterTransform -from .geo_transform import GeometryTransform - -__all__ = ["GeometryTransform", "ColorJitterTransform"] diff --git a/video/fake-stormer/model_code/datasets/pipelines/color_transform.py b/video/fake-stormer/model_code/datasets/pipelines/color_transform.py deleted file mode 100644 index d2175d72e0a423f8ec822bdc6cd38502565378dd..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/pipelines/color_transform.py +++ /dev/null @@ -1,193 +0,0 @@ -import os -import sys - -if not os.getcwd() in sys.path: - sys.path.append(os.getcwd()) - -import albumentations as A -from datasets.builder import PIPELINES - - -@PIPELINES.register_module() -class ColorJitterTransform(object): - def __init__( - self, - clahe: float, - colorjitter: float, - gaussianblur: float, - jpegcompression: list, - rgbshift: float, - randomcontrast: float, - randomgamma: float, - randombrightness: float, - huesat: float, - gaussnoise: float, - *args, - **kwargs, - ): - super().__init__() - self.clahe = clahe - self.colorjitter = colorjitter - self.gaussianblur = gaussianblur - self.jpegcompression = jpegcompression - self.rgbshift = rgbshift - self.randomcontrast = randomcontrast - self.randomgamma = randomgamma - self.randombrightness = randombrightness - self.huesat = huesat - self.gaussnoise = gaussnoise - - if kwargs is not None: - for k, v in kwargs.items(): - if v is None: - raise ValueError(f"{k}:{v} retrieve a None value!") - self.__setattr__(k, v) - - def _CLAHE(self, clip_limit=4.0, tile_grid_size=(8, 8), always_apply=False, p=0.5): - return A.CLAHE( - clip_limit=clip_limit, - tile_grid_size=tile_grid_size, - always_apply=always_apply, - p=p, - ) - - def _colorjitter( - self, - brightness=0.2, - contrast=0.2, - saturation=0.2, - hue=0.2, - always_apply=False, - p=0.5, - ): - return A.ColorJitter( - brightness=brightness, - contrast=contrast, - saturation=saturation, - hue=hue, - always_apply=always_apply, - p=p, - ) - - def _gaussianblur( - self, blur_limit=(3, 7), sigma_limit=0, always_apply=False, p=0.5 - ): - return A.GaussianBlur( - blur_limit=blur_limit, - sigma_limit=sigma_limit, - always_apply=always_apply, - p=p, - ) - - def _gauss_noise( - self, - var_limit=(10.0, 50.0), - mean=0, - per_channel=True, - always_apply=False, - p=0.5, - ): - return A.GaussNoise( - var_limit=var_limit, - mean=mean, - per_channel=per_channel, - always_apply=always_apply, - p=p, - ) - - def _jpegcompression( - self, quality_lower=70, quality_upper=100, always_apply=False, p=0.5 - ): - return A.ImageCompression( - quality_lower=quality_lower, - quality_upper=quality_upper, - always_apply=always_apply, - p=p, - ) - - def _rgbshift( - self, - r_shift_limit=20, - g_shift_limit=20, - b_shift_limit=20, - always_apply=False, - p=0.5, - ): - return A.RGBShift( - r_shift_limit=r_shift_limit, - g_shift_limit=g_shift_limit, - b_shift_limit=b_shift_limit, - always_apply=always_apply, - p=p, - ) - - def _randomcontrast(self, limit=0.2, always_apply=False, p=0.5): - return A.RandomContrast(limit=limit, always_apply=always_apply, p=p) - - def _randombrightness( - self, - brightness_limit=0.1, - contrast_limit=0.1, - brightness_by_max=True, - always_apply=False, - p=0.5, - ): - return A.RandomBrightnessContrast( - brightness_limit=brightness_limit, - contrast_limit=contrast_limit, - brightness_by_max=brightness_by_max, - always_apply=always_apply, - p=p, - ) - - def _randomgamma(self, gamma_limit=(80, 120), eps=None, always_apply=False, p=0.5): - return A.RandomGamma( - gamma_limit=gamma_limit, eps=eps, always_apply=always_apply, p=p - ) - - def _huesaturation( - self, - hue_shift_limit=20, - sat_shift_limit=20, - val_shift_limit=20, - always_apply=False, - p=0.5, - ): - return A.HueSaturationValue( - hue_shift_limit=hue_shift_limit, - sat_shift_limit=sat_shift_limit, - val_shift_limit=val_shift_limit, - always_apply=always_apply, - p=p, - ) - - def __call__(self, x): - transforms = [ - A.Compose( - [ - self._CLAHE(p=self.clahe), - self._randomcontrast(p=self.randomcontrast), - self._colorjitter(p=self.colorjitter), - self._jpegcompression( - p=self.jpegcompression[0], - quality_lower=self.jpegcompression[1], - quality_upper=self.jpegcompression[2], - ), - self._rgbshift(p=self.rgbshift), - self._randomgamma(p=self.randomgamma), - ] - ), - A.OneOf( - [ - self._gaussianblur(p=self.gaussianblur), - self._gauss_noise(p=self.gaussnoise), - ] - ), - A.OneOf( - [ - self._randombrightness(p=self.randombrightness), - self._huesaturation(p=self.huesat), - ] - ), - ] - return A.Compose(transforms)(image=x) diff --git a/video/fake-stormer/model_code/datasets/pipelines/functional.py b/video/fake-stormer/model_code/datasets/pipelines/functional.py deleted file mode 100644 index 2730494f2301b94bbc8debbe5c9394fb227544a8..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/pipelines/functional.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -import numpy as np - - -def _get_pixels(per_pixel, rand_color, patch_size, dtype=np.float32): - if per_pixel: - return np.random.randint(0, 255, patch_size).astype(dtype=dtype) - elif rand_color: - return np.random.randint(0, 255, (1, 1, patch_size[2])).astype(dtype=dtype) - else: - return np.zeros((1, 1, patch_size[2]), dtype=dtype) diff --git a/video/fake-stormer/model_code/datasets/pipelines/geo_transform.py b/video/fake-stormer/model_code/datasets/pipelines/geo_transform.py deleted file mode 100644 index d7c39de0f531bd0cd77ff59606c0b4f7f7d27d71..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/pipelines/geo_transform.py +++ /dev/null @@ -1,372 +0,0 @@ -# -*- coding: utf-8 -*- -import math -import os -import random -import sys -from typing import Dict - -if not os.getcwd() in sys.path: - sys.path.append(os.getcwd()) - -import albumentations as A -import cv2 -import numpy as np -from albumentations.augmentations.transforms import DualTransform -from albumentations.core.transforms_interface import ImageOnlyTransform -from datasets.builder import PIPELINES - -from .functional import _get_pixels - - -@PIPELINES.register_module() -class GeometryTransform(object): - def __init__( - self, - resize: list, - normalize: float, - horizontal_flip: float, - scale: list, - cropping: list, - rand_erasing: list, - *args, - **kwargs, - ): - super().__init__() - self.resize = resize # [H, W, p] - self.normalize = normalize # p - self.horizontal_flip = horizontal_flip # p - self.cropping = cropping # [crop_limit, p] - self.scale = scale # [scale_limit, p] - self.rand_erasing = rand_erasing # p - - if kwargs is not None: - for k, v in kwargs.items(): - if v is None: - raise ValueError(f"{k}:{v} retrieve a None value!") - self.__setattr__(k, v) - - def _resize(self): - hr, wr, p = self.resize - return A.Resize(hr, wr, interpolation=2, p=p) - - # We offen use normalize transform from torch, so set p=0.0 - def _normalize(self, p=0.0): - return A.Normalize(p=p) - - def _horizontal_flip(self, p=0.5, always_apply=False): - return A.HorizontalFlip(always_apply=always_apply, p=p) - - def _random_scale( - self, p=0.5, always_apply=False, scale_limit=0.1, interpolation=1 - ): - return A.RandomScale( - scale_limit=scale_limit, - interpolation=interpolation, - always_apply=always_apply, - p=p, - ) - - def _random_crop( - self, p=0.5, always_apply=False, crop_limit=0.1, img_h=256, img_w=256 - ): - crop_h = int((1 - np.random.choice(np.arange(0.0, crop_limit, 0.01))) * img_h) - crop_w = int((1 - np.random.choice(np.arange(0.0, crop_limit, 0.01))) * img_w) - return A.RandomCrop(height=crop_h, width=crop_w, always_apply=always_apply, p=p) - - def _random_erasing(self, p=0.5, always_apply=False, max_count=3, mode="const"): - return RandomErasing( - p=p, always_apply=always_apply, mode=mode, max_count=max_count - ) - - def __call__(self, x, mask=None, image_f=None, mask_f=None): - x_h, x_w = x.shape[:2] - - if hasattr(self, "additional_targets"): - additional_targets = self.__getattribute__("additional_targets") - else: - additional_targets = {} - - transform = A.Compose( - [ - A.OneOf( - [ - self._random_crop( - p=self.cropping[1], - crop_limit=self.cropping[0], - img_h=x_h, - img_w=x_w, - ), - self._random_scale(p=self.scale[1], scale_limit=self.scale[0]), - self._random_erasing( - p=self.rand_erasing[0], - mode="const", - max_count=self.rand_erasing[1], - ), - ] - ), - A.Compose( - [ - self._resize(), - self._normalize(p=self.normalize), - self._horizontal_flip(p=self.horizontal_flip), - ] - ), - ], - additional_targets=additional_targets, - ) - - if mask is not None: - if mask_f is not None: - assert ( - image_f is not None - ), "Image Fake sample can not be None in case of Mask sample!" - assert len( - additional_targets.keys() - ), "Additional targets for Albumentations can not be None!" - return transform(image=x, mask=mask, image_f=image_f, mask_f=mask_f) - else: - return transform(image=x, mask=mask) - else: - return transform(image=x) - - -class RandomErasing(DualTransform): - def __init__( - self, - always_apply: bool = False, - p: float = 0.5, - min_area=0.02, - max_area=1 / 3, - min_aspect=0.3, - max_aspect=None, - mode="const", - min_count=1, - max_count=None, - num_splits=0, - img_h=257, - img_w=257, - img_chan=3, - ): - super(RandomErasing, self).__init__(always_apply, p) - self.min_area = min_area - self.max_area = max_area - max_aspect = max_aspect or 1 / min_aspect - self.log_aspect_ratio = (math.log(min_aspect), math.log(max_aspect)) - self.min_count = min_count - self.max_count = max_count or min_count - self.num_splits = num_splits - mode = mode.lower() - self.rand_color = False - self.per_pixel = False - self.img_h = img_h - self.img_w = img_w - self.img_chan = img_chan - - if mode == "rand": - self.rand_color = True # per block random normal - elif mode == "pixel": - self.per_pixel = True # per pixel random normal - else: - assert not mode or mode == "const" - - def apply(self, img: np.array, **params): - return self._erase(img, **params) - - def get_params(self) -> Dict: - area = self.img_h * self.img_w - count = ( - self.min_count - if self.min_count == self.max_count - else random.randint(self.min_count, self.max_count) - ) - - tops, lefts, ws, hs = [], [], [], [] - for _ in range(count): - for attempt in range(10): - target_area = ( - random.uniform(self.min_area, self.max_area) * area / count - ) - aspect_ratio = math.exp(random.uniform(*self.log_aspect_ratio)) - h = int(round(math.sqrt(target_area * aspect_ratio))) - w = int(round(math.sqrt(target_area / aspect_ratio))) - - if w < self.img_w and h < self.img_h: - top = random.randint(0, self.img_h - h) - left = random.randint(0, self.img_w - w) - - tops.append(top) - lefts.append(left) - ws.append(w) - hs.append(h) - break - return { - "tops": tops, - "lefts": lefts, - "ws": ws, - "hs": hs, - "img_chan": self.img_chan, - } - - def _erase( - self, - img: np.array, - tops: list, - lefts: list, - hs: list, - ws: list, - img_chan: int, - **params, - ): - for i in range(len(tops)): - top = tops[i] - left = lefts[i] - w = ws[i] - h = hs[i] - - img[top : top + h, left : left + w, :] = _get_pixels( - self.per_pixel, self.rand_color, (h, w, img_chan), dtype=img.dtype - ) - return img - - -class RandomDownScale(ImageOnlyTransform): - def __init__( - self, always_apply: bool = False, p: float = 0.5, ratio_list: list = [2, 4] - ): - self.ratio_list = ratio_list - super().__init__(p=p, always_apply=always_apply) - - def apply(self, img: np.ndarray, ratio: int, **params): - return self.randomdownscale(img, ratio, **params) - - def get_params(self): - ratio = self.ratio_list[np.random.randint(len(self.ratio_list))] - return {"ratio": ratio} - - def randomdownscale(self, img, ratio, **kwargs): - keep_ratio = True - keep_input_shape = True - H, W, C = img.shape - - # r = np.random.uniform(2, 4) - img_ds = cv2.resize( - img, (int(W / ratio), int(H / ratio)), interpolation=cv2.INTER_NEAREST - ) - if keep_input_shape: - img_ds = cv2.resize(img_ds, (W, H), interpolation=cv2.INTER_LINEAR) - - return img_ds - - def get_transform_init_args_names(self): - return ("ratio_list",) - - -def get_source_transforms(data_type="image"): - """ - Transforms specially design for SBI synthesis - """ - assert data_type in ["image", "video"] - if data_type == "image": - return A.Compose( - [ - A.Compose( - [ - A.RGBShift((-20, 20), (-20, 20), (-20, 20), p=0.3), - A.HueSaturationValue( - hue_shift_limit=(-0.3, 0.3), - sat_shift_limit=(-0.3, 0.3), - val_shift_limit=(-0.3, 0.3), - p=1, - ), - A.RandomBrightnessContrast( - brightness_limit=(-0.1, 0.1), - contrast_limit=(-0.1, 0.1), - p=1, - ), - ], - p=1, - ), - A.OneOf( - [ - RandomDownScale(p=1), - A.Sharpen(alpha=(0.2, 0.5), lightness=(0.5, 1.0), p=1), - ], - p=1, - ), - ], - p=1.0, - ) - else: - return A.ReplayCompose( - [ - A.Compose( - [ - A.RGBShift((-20, 20), (-20, 20), (-20, 20), p=0.3), - A.HueSaturationValue( - hue_shift_limit=(-0.3, 0.3), - sat_shift_limit=(-0.3, 0.3), - val_shift_limit=(-0.3, 0.3), - p=1, - ), - A.RandomBrightnessContrast( - brightness_limit=(-0.1, 0.1), - contrast_limit=(-0.1, 0.1), - p=1, - ), - ], - p=1, - ), - A.OneOf( - [ - RandomDownScale(p=1), - A.Sharpen(alpha=(0.2, 0.5), lightness=(0.5, 1.0), p=1), - ], - p=1, - ), - ], - p=1.0, - ) - - -def get_transforms(data_type="image"): - """ - Transforms specially design for SBI synthesis - """ - assert data_type in ["image", "video"] - - if data_type == "image": - return A.Compose( - [ - A.RGBShift((-20, 20), (-20, 20), (-20, 20), p=0.3), - A.HueSaturationValue( - hue_shift_limit=(-0.3, 0.3), - sat_shift_limit=(-0.3, 0.3), - val_shift_limit=(-0.3, 0.3), - p=0.3, - ), - A.RandomBrightnessContrast( - brightness_limit=(-0.3, 0.3), contrast_limit=(-0.3, 0.3), p=0.3 - ), - A.ImageCompression(quality_lower=40, quality_upper=100, p=0.5), - ], - additional_targets={"image_f": "image"}, - p=1.0, - ) - else: - return A.ReplayCompose( - [ - A.RGBShift((-20, 20), (-20, 20), (-20, 20), p=0.3), - A.HueSaturationValue( - hue_shift_limit=(-0.3, 0.3), - sat_shift_limit=(-0.3, 0.3), - val_shift_limit=(-0.3, 0.3), - p=0.3, - ), - A.RandomBrightnessContrast( - brightness_limit=(-0.3, 0.3), contrast_limit=(-0.3, 0.3), p=0.3 - ), - A.ImageCompression(quality_lower=40, quality_upper=100, p=0.5), - ], - additional_targets={"image_f": "image"}, - p=1.0, - ) diff --git a/video/fake-stormer/model_code/datasets/sbi/utils.py b/video/fake-stormer/model_code/datasets/sbi/utils.py deleted file mode 100644 index e8fb51471d3a980eba15fda107e03a297cbfd1fb..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/sbi/utils.py +++ /dev/null @@ -1,354 +0,0 @@ -# -*- coding: utf-8 -*- -import os -import random -import sys - -if os.getcwd() not in sys.path: - sys.path.insert(0, os.getcwd()) - -import albumentations as alb -import cv2 -import numpy as np -from imgaug import augmenters as iaa -from package_utils.bi_online_generation import blendImages, random_erode_dilate -from package_utils.deepfake_mask import dynamic_blend, random_get_hull -from package_utils.image_utils import load_image -from package_utils.transform import randaffine -from PIL import Image -from skimage import transform as sktransform - -from ..common import ParameterStore -from ..pipelines.geo_transform import get_source_transforms - - -def gen_SBI(img, landmark, **kwargs): - """ - This function is adapted to process SBI generation for both image-level and video-level - """ - index = kwargs.get("index") - assert index is not None - debug = kwargs.get("debug") or False - - param_store_ins = ParameterStore.get_instance() - - use_lms68 = param_store_ins.get_parameters("use_lms68") or False - data_type = param_store_ins.get_parameters("data_type") - assert data_type is not None - - if ( - (data_type == "image" and np.random.rand() < 0.25) - or (data_type == "video" and index == 0 and np.random.rand() < 0.25) - or use_lms68 - ): - landmark = landmark[:68] - - if not param_store_ins.has_key("use_lms68") and data_type == "video": - param_store_ins.add_parameters("use_lms68", True) - - # Getting ConvexHull - mask, hull_type = random_get_hull( - landmark, img, hull_type=param_store_ins.get_parameters("hull_type") - ) - if index == 0 and data_type == "video": - param_store_ins.add_parameters("hull_type", hull_type) - - # For debugging - if index is not None and debug: - # Image.fromarray(img).save(f'samples/debugs/BG_{index}.jpg') - Image.fromarray((mask * 255).astype(np.uint8)).save( - f"samples/debugs/ConvexHull_{index}.jpg" - ) - - source = img.copy() - rand_value = param_store_ins.get_parameters("rand_value") or np.random.rand() - if index == 0 and data_type == "video": - param_store_ins.add_parameters("rand_value", rand_value) - - if rand_value < 0.5: - if data_type == "video": - if index == 0: - transform = get_source_transforms(data_type=data_type) - data = transform(image=source.astype(np.uint8)) - source = data["image"] - replay_params = data["replay"] - param_store_ins.add_parameters("s_replay_params", replay_params) - else: - replay_params = param_store_ins.get_parameters("s_replay_params") - data = alb.ReplayCompose.replay( - replay_params, image=source.astype(np.uint8) - ) - source = data["image"] - else: - source = get_source_transforms()(image=source.astype(np.uint8))["image"] - else: - if data_type == "video": - if index == 0: - transform = get_source_transforms(data_type=data_type) - data = transform(image=img.astype(np.uint8)) - img = data["image"] - replay_params = data["replay"] - param_store_ins.add_parameters("i_replay_params", replay_params) - else: - replay_params = param_store_ins.get_parameters("i_replay_params") - data = alb.ReplayCompose.replay( - replay_params, image=img.astype(np.uint8) - ) - img = data["image"] - else: - img = get_source_transforms()(image=img.astype(np.uint8))["image"] - - # if index is not None and debug: - # Image.fromarray(source.astype(np.uint8)).save(f'samples/debugs/FG_{index}.jpg') - - if data_type == "image": - source, mask, _ = randaffine(source, mask[:, :, 0]) - else: - # if use_lms68: - # seq_distortion = kwargs.get('distortion') - # img_h, img_w, img_c = mask.shape - # aug_size = param_store_ins.get_parameters('aug_size') or random.randint(int(img_h*0.8), int(img_h/0.8)) - # mask = sktransform.resize(mask,(aug_size,aug_size),preserve_range=True) # resize mask before deformation - # mask = seq_distortion.augment_image(mask) - # mask, ksize, rand_erode = random_erode_dilate(mask, - # ksize=param_store_ins.get_parameters('ksize'), - # rand_erode=param_store_ins.get_parameters('rand_erode')) # mask of shape (H,W,3) - # mask = sktransform.resize(mask,(img_h,img_w),preserve_range=True) # getting back mask - # mask = mask[:,:,0] - - # # filte empty mask after deformation - # if np.sum(mask) == 0 : - # raise ValueError('Deformed mask has no facial region for blending!!!') - - # if not param_store_ins.has_key('ksize'): - # param_store_ins.add_parameters('ksize', ksize) - # if not param_store_ins.has_key('rand_erode'): - # param_store_ins.add_parameters('rand_erode', rand_erode) - # if not param_store_ins.has_key('aug_size'): - # param_store_ins.add_parameters('aug_size', aug_size) - # else: - if index == 0: - source, mask, fg_replay_params = randaffine( - source, mask[:, :, 0], index=index, data_type=data_type - ) - param_store_ins.add_parameters( - "f_replay_params", fg_replay_params["f_replay_params"] - ) - param_store_ins.add_parameters( - "g_replay_params", fg_replay_params["g_replay_params"] - ) - else: - f_replay_params = param_store_ins.get_parameters("f_replay_params") - g_replay_params = param_store_ins.get_parameters("g_replay_params") - source, mask, _ = randaffine( - source, - mask[:, :, 0], - index=index, - data_type=data_type, - f_replay_params=f_replay_params, - g_replay_params=g_replay_params, - ) # mask of shape (H, W) - - # Getting Deformed ConvexHull - if index is not None and debug: - Image.fromarray((mask * 255).astype(np.uint8)).save( - f"samples/debugs/Deformed_ConvexHull_{index}.jpg" - ) - - if data_type == "image": - img_blended, mask, _ = dynamic_blend(source, img, mask) - else: - # use_BI = param_store_ins.get_parameters('use_BI') or np.random.rand() > 0.5 - # if not param_store_ins.has_key('use_BI'): - # param_store_ins.add_parameters('use_BI', use_BI) - # if use_lms68: - # if index == 0: - # img_blended, mask, blending_params = blendImages(source, - # img, - # mask*255) - # param_store_ins.add_parameters('blending_params', blending_params) - # else: - # img_blended, mask, _ = blendImages(source, - # img, - # mask*255, - # **param_store_ins.get_parameters('blending_params')) - # mask = mask[:,:,0:1] - # else: - if index == 0: - img_blended, mask, blending_params = dynamic_blend(source, img, mask) - param_store_ins.add_parameters("blending_params", blending_params) - else: - blending_params = param_store_ins.get_parameters("blending_params") - img_blended, mask, _ = dynamic_blend(source, img, mask, **blending_params) - img_blended = img_blended.astype(np.uint8) - img = img.astype(np.uint8) - - return img, img_blended, mask - - -def gen_target(background_face, background_landmark, margin=[20, 20], **kwargs): - index = kwargs.get("index") - assert index is not None - - if isinstance(background_face, str): - background_face = load_image(background_face) - - background_face, face_img, mask_f = gen_SBI( - background_face, background_landmark, **kwargs - ) - mask_f = (1 - mask_f) * mask_f * 4 - mask_r = np.zeros((mask_f.shape[0], mask_f.shape[1], 1)) - - margin_x, margin_y = margin - H, W = len(face_img), len(face_img[0]) - face_img = face_img[margin_y : (H - margin_y), margin_x : (W - margin_x), :] - background_face = background_face[ - margin_y : (H - margin_y), margin_x : (W - margin_x), : - ] - - mask_f = mask_f[margin_y : (H - margin_y), margin_x : (W - margin_x), :] - mask_r = mask_r[margin_y : (H - margin_y), margin_x : (W - margin_x), :] - - mask_f, mask_r = np.repeat(mask_f, 3, 2), np.repeat(mask_r, 3, 2) - mask_f, mask_r = (mask_f * 255).astype(np.uint8), (mask_r * 255).astype(np.uint8) - - # lower_bound = [0.5,0.75,1,1] - # fake_intensity = np.random.uniform(lower_bound[np.random.randint(len(lower_bound))], 1.) - fake_intensity = np.random.uniform(0.5, 1.0) - return face_img, mask_f, background_face, mask_r, fake_intensity - - -def reorder_landmark(landmark): - landmark_add = np.zeros((13, 2)) - for idx, idx_l in enumerate([77, 75, 76, 68, 69, 70, 71, 80, 72, 73, 79, 74, 78]): - landmark_add[idx] = landmark[idx_l] - landmark[68:] = landmark_add - return landmark - - -def sbi_hflip(img, mask=None, landmark=None, bbox=None): - H, W = img.shape[:2] - if landmark is not None: - landmark = landmark.copy() - - if bbox is not None: - bbox = bbox.copy() - - if landmark is not None: - landmark_new = np.zeros_like(landmark) - - landmark_new[:17] = landmark[:17][::-1] - landmark_new[17:27] = landmark[17:27][::-1] - - landmark_new[27:31] = landmark[27:31] - landmark_new[31:36] = landmark[31:36][::-1] - - landmark_new[36:40] = landmark[42:46][::-1] - landmark_new[40:42] = landmark[46:48][::-1] - - landmark_new[42:46] = landmark[36:40][::-1] - landmark_new[46:48] = landmark[40:42][::-1] - - landmark_new[48:55] = landmark[48:55][::-1] - landmark_new[55:60] = landmark[55:60][::-1] - - landmark_new[60:65] = landmark[60:65][::-1] - landmark_new[65:68] = landmark[65:68][::-1] - if len(landmark) == 68: - pass - elif len(landmark) == 81: - landmark_new[68:81] = landmark[68:81][::-1] - else: - raise NotImplementedError - landmark_new[:, 0] = W - landmark_new[:, 0] - else: - landmark_new = None - - if bbox is not None: - bbox_new = np.zeros_like(bbox) - bbox_new[0, 0] = bbox[1, 0] - bbox_new[1, 0] = bbox[0, 0] - bbox_new[:, 0] = W - bbox_new[:, 0] - bbox_new[:, 1] = bbox[:, 1].copy() - if len(bbox) > 2: - bbox_new[2, 0] = W - bbox[3, 0] - bbox_new[2, 1] = bbox[3, 1] - bbox_new[3, 0] = W - bbox[2, 0] - bbox_new[3, 1] = bbox[2, 1] - bbox_new[4, 0] = W - bbox[4, 0] - bbox_new[4, 1] = bbox[4, 1] - bbox_new[5, 0] = W - bbox[6, 0] - bbox_new[5, 1] = bbox[6, 1] - bbox_new[6, 0] = W - bbox[5, 0] - bbox_new[6, 1] = bbox[5, 1] - else: - bbox_new = None - - if mask is not None: - mask = mask[:, ::-1] - else: - mask = None - img = img[:, ::-1].copy() - return img, mask, landmark_new, bbox_new - - -def BI_postprocessing(img, face_img, mask): - param_store_ins = ParameterStore.get_instance() - face_img = Image.fromarray(face_img) - img = Image.fromarray(img) - - # randomly downsample after BI pipeline - rand_val_post = param_store_ins.get_parameters("rand_val_post") or random.randint( - 0, 1 - ) - if rand_val_post: - aug_size = param_store_ins.get_parameters("post_aug_size") or random.randint( - 64, 317 - ) - rand_resize = param_store_ins.get_parameters("rand_resize") or random.randint( - 0, 1 - ) - - if rand_resize: - face_img = face_img.resize((aug_size, aug_size), Image.BILINEAR) - img = img.resize((aug_size, aug_size), Image.BILINEAR) - else: - face_img = face_img.resize((aug_size, aug_size), Image.NEAREST) - img = img.resize((aug_size, aug_size), Image.NEAREST) - - if not param_store_ins.has_key("post_aug_size"): - param_store_ins.add_parameters("post_aug_size", aug_size) - - if not param_store_ins.has_key("rand_resize"): - param_store_ins.add_parameters("rand_resize", rand_resize) - - if not param_store_ins.has_key("rand_val_post"): - param_store_ins.add_parameters("rand_val_post", rand_val_post) - - face_img = face_img.resize((317, 317), Image.BILINEAR) - img = img.resize((317, 317), Image.BILINEAR) - face_img = np.array(face_img) - img = np.array(img) - - soft_margin = param_store_ins.get_parameters("soft_margin") or np.random.randint( - -30, 30 - ) - if not param_store_ins.has_key("soft_margin"): - param_store_ins.add_parameters("soft_margin", soft_margin) - - face_img = face_img[ - 30 + soft_margin : (287 + soft_margin), - 30 + soft_margin : (287 + soft_margin), - :, - ] - img = img[ - 30 + soft_margin : (287 + soft_margin), - 30 + soft_margin : (287 + soft_margin), - :, - ] - mask = mask[ - 30 + soft_margin : (287 + soft_margin), - 30 + soft_margin : (287 + soft_margin), - :, - ] - - return img, face_img, mask diff --git a/video/fake-stormer/model_code/datasets/utils.py b/video/fake-stormer/model_code/datasets/utils.py deleted file mode 100644 index a6b3c6fdb6ed9c080a893dc90147287108e5b1ae..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/datasets/utils.py +++ /dev/null @@ -1,128 +0,0 @@ -# -*- coding: utf-8 -*- -import os -import random - -import numpy as np - - -def _extract_data_based_dist( - data_type: str, image_paths: list, labels: list, dist: list, **params -): - def sampling_frames(image_paths: list, labels: list, dist: list, **params): - """ - Extracting image paths and labels based on given distribution - """ - total_f = sum(labels) - total_r = len(labels) - total_f - - assert ( - total_f > 0 - ), "Number of fake images must be greater than 0 for distribution sampling!" - assert ( - total_r > 0 - ), "Number of real images must be greater than 0 for distribution sampling!" - - r_dist, f_dist = dist[0], dist[1] - - idxes = sorted(range(0, len(labels)), key=lambda k: labels[k]) - r_idxes = idxes[:total_r] - f_idxes = idxes[total_r:] - - print(f"Original Number of Fake images --- {len(f_idxes)}") - print(f"Original Number of Real images --- {len(r_idxes)}") - - if int((total_f / f_dist) * r_dist) > total_r: - total_f = int((total_r / r_dist) * f_dist) - f_idxes = random.sample(f_idxes, total_f) - else: - total_r = int((total_f / f_dist) * r_dist) - r_idxes = random.sample(r_idxes, total_r) - - print( - f"Number of Fake images --- {len(f_idxes)} given Fake distribution --- {f_dist}" - ) - print( - f"Number of Real images --- {len(r_idxes)} given Real distribution --- {r_dist}" - ) - - new_idxes = r_idxes + f_idxes - - image_paths = [image_paths[i] for i in new_idxes] - labels = np.array(labels)[new_idxes] - - for k, v in params.items(): - if v is not None and len(v): - params[k] = [v[i] for i in new_idxes] - - return image_paths, labels, params - - def sampling_videos(image_paths: list, labels: list, dist: list, **params): - """ - Extracting image paths and labels based on given distribution for video data - """ - f_vid_ids = [] - r_vid_ids = [] - for ip in image_paths: - faketype = ip.split("/")[8] - vid_id = os.path.dirname(ip) - if ( - faketype == "real_videos" - or "real" in faketype - or "original" in faketype - ): - r_vid_ids.append(vid_id) - else: - f_vid_ids.append(vid_id) - - f_vid_ids = list(set(f_vid_ids)) - r_vid_ids = list(set(r_vid_ids)) - total_f = len(f_vid_ids) - total_r = len(r_vid_ids) - - assert ( - total_f > 0 - ), "Number of fake videos must be greater than 0 for distribution sampling!" - assert ( - total_r > 0 - ), "Number of real videos must be greater than 0 for distribution sampling!" - print(f"Original Number of Fake videos --- {total_f}") - print(f"Original Number of Real videos --- {total_r}") - - r_dist, f_dist = dist[0], dist[1] - - if int((total_f / f_dist) * r_dist) > total_r: - total_f = int((total_r / r_dist) * f_dist) - f_vid_ids = random.sample(f_vid_ids, total_f) - else: - total_r = int((total_f / f_dist) * r_dist) - r_vid_ids = random.sample(r_vid_ids, total_r) - - print( - f"Number of Fake videos --- {len(f_vid_ids)} given Fake distribution --- {f_dist}" - ) - print( - f"Number of Real videos --- {len(r_vid_ids)} given Real distribution --- {r_dist}" - ) - - vid_ids = r_vid_ids + f_vid_ids - new_idxes = [] - - for i in range(len(labels)): - ip = image_paths[i] - vid_id = "/".join([ip.split("/")[-3], ip.split("/")[-2]]) - if vid_id in vid_ids: - new_idxes.append(i) - - image_paths = [image_paths[i] for i in new_idxes] - labels = np.array(labels)[new_idxes] - - for k, v in params.items(): - if v is not None and len(v): - params[k] = [v[i] for i in new_idxes] - - return image_paths, labels, params - - if data_type == "image": - return sampling_frames(image_paths, labels, dist, **params) - else: - return sampling_videos(image_paths, labels, dist, **params) diff --git a/video/fake-stormer/model_code/demo/method.png b/video/fake-stormer/model_code/demo/method.png deleted file mode 100644 index ca956c5a695416cc55db07a44f7f0fb5caa7f48f..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/demo/method.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d7c6acdff1e9e7673b97b2ef5000e63b23c4e7be75cf9a8a3ba3989d90ab1131 -size 3612142 diff --git a/video/fake-stormer/model_code/dockerfiles/Dockerfile b/video/fake-stormer/model_code/dockerfiles/Dockerfile deleted file mode 100644 index 19c1c1ca1f7b98764f1a5e242e4b8056f612f3f8..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/dockerfiles/Dockerfile +++ /dev/null @@ -1,25 +0,0 @@ -FROM pytorch/pytorch:1.8.0-cuda11.1-cudnn8-devel - -MAINTAINER DatNGUYEN - -ENV TZ=Europe/Luxembourg -RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone - -RUN apt-key del 7fa2af80 && \ - apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub && \ - apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/7fa2af80.pub - -RUN apt-get -y update && \ - apt-get upgrade -y && \ - apt-get install -y libprotobuf-dev protobuf-compiler && \ - apt-get install -y cmake && \ - apt-get install -y git && \ - apt-get install -y libgl1-mesa-dev && \ - apt-get -y update && apt-get install -y libopencv-dev - -RUN pip install albumentations==1.1.0 dlib==19.24.0 python-box==7.1.1 imgaug==0.4.0 && \ - pip install imutils==0.5.4 ipython numpy==1.23.3 opencv-python==4.5.1.48 && \ - pip install pandas==1.3.5 Pillow==9.3.0 scikit-image==0.19.3 scipy==1.9.3 simplejson && \ - pip install tensorboardX==2.5.1 natsort==8.4.0 tqdm PyYAML - -WORKDIR /workspace diff --git a/video/fake-stormer/model_code/dockerfiles/README.md b/video/fake-stormer/model_code/dockerfiles/README.md deleted file mode 100644 index fc135f5a640c1159aa76356a309c6079c65e4f83..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/dockerfiles/README.md +++ /dev/null @@ -1,59 +0,0 @@ -## Docker Build (Optional) -*We further provide an optional Docker file which can be used to build working env with Docker.* - -1. Install docker to the system (skip the step if docker has been already installed): - ```shell - sudo apt install docker - ``` -2. To start your docker environment, please go to the folder **dockerfiles**: - ```shell - cd dockerfiles - ``` -3. Create a docker image (you can put any name you want): - ```shell - docker build --tag 'fakestormer' . - ``` -4. Check the status of the image created: - 1. Run command: - ``` shell - docker image ls - ``` - 2. You should see something similiar: - - |REPOSITORY| IMAGE ID|CREATED| SIZE |TAG| - |----------|---------|-------|------|---| - |fakestormer| efd422370750|12 minutes ago| 18.4GB |latest | -5. Run a container from the created image: - 1. Run command - ```shell - docker run -v : --gpus 'all,capabilities=utility' -it fakestormer /bin/bash - ``` - 2. Check the container created: - 1. Run command: - ```shell - docker ps - ``` - 2. Check the result: - CONTAINER ID|IMAGE|COMMAND|CREATED|STATUS|PORTS|NAMES| - |-----------|-----|-------|-------|------|-----|-----| - |0203c192febb|fakestormer|"/bin/bash"| 29 seconds ago |Up 28 seconds | |determined_cannon| - 3. To access the docker container: - ```shell - docker exec -it 0203c192febb /bin/bash - ``` - 4. To start the container: - ```shell - docker start 0203c192febb - ``` - 5. To stop the container: - ```shell - docker stop 0203c192febb - ``` - -6. Inside the docker container, you can clone or mount the repository from outside: - ```shell - cd /workspace/ - git clone https://github.com/10Ring/FakeSTormer.git - cd FakeSTormer/ - ``` -7. Now you are ready for [*QuickStart*](#quickstart) diff --git a/video/fake-stormer/model_code/lib/core_function.py b/video/fake-stormer/model_code/lib/core_function.py deleted file mode 100644 index 3295477e3e0decdc92e6b63a9ce77752298886a3..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/lib/core_function.py +++ /dev/null @@ -1,552 +0,0 @@ -# -*- coding: utf-8 -*- -import os -import time -from typing import Union - -import torch -from lib.metrics import bin_calculate_auc_ap_ar, get_acc_mesure_func -from logs.logger import board_writing -from numpy import arange -from package_utils.utils import debugging_panel -from tqdm import tqdm - - -class AverageMeter(object): - """Computes and stores the average and current value""" - - def __init__(self): - self.reset() - - def reset(self): - self.val = 0 - self.avg = 0 - self.sum = 0 - self.count = 0 - - def update(self, val, n=1): - self.val = val - self.sum += val * n - self.count += n - self.avg = self.sum / self.count if self.count != 0 else 0 - - -def get_batch_data(batch_data: Union[dict]): - """ - Parsing data for model consumption (train/val/test) - """ - inputs = batch_data["img"] if isinstance(batch_data, dict) else batch_data[0] - labels = batch_data["label"] if isinstance(batch_data, dict) else batch_data[1] - heatmaps = None - cstency_heatmaps = None - offsets = None - targets = None - temp_locs = None - maskout_pes = None - - if "heatmap" in batch_data: - heatmaps = batch_data["heatmap"] - - if "target" in batch_data: - targets = batch_data["target"] - - if "cstency" in batch_data: - cstency_heatmaps = batch_data["cstency"] - - if "offset" in batch_data: - offsets = batch_data["offset"] - - if "temp_loc" in batch_data: - temp_locs = batch_data["temp_loc"] - - if "mask_out_p" in batch_data: - maskout_pes = batch_data["mask_out_p"] - - return ( - inputs, - labels, - targets, - heatmaps, - cstency_heatmaps, - offsets, - temp_locs, - maskout_pes, - ) - - -def train( - cfg, - model, - critetion, - optimizer, - epoch, - data_loader, - logger, - writer, - devices, - trainIters, - metrics_base="combine", - scaler=None, -): - calculate_acc = get_acc_mesure_func(metrics_base) - batch_time = AverageMeter() - data_time = AverageMeter() - losses = AverageMeter() - acc = AverageMeter() - - # Switch to train mode - model.train() - data_loader = tqdm(data_loader, dynamic_ncols=True) - accumulation_steps = cfg.TRAIN.accumulation_steps if cfg.TRAIN.use_amp else 1 - start = time.time() - optimizer.zero_grad() - for i, batch_data in enumerate(data_loader): - ( - inputs, - labels, - targets, - heatmaps, - cstency_heatmaps, - offsets, - temp_locs, - maskout_pes, - ) = get_batch_data(batch_data) - inputs = inputs.cuda().to(non_blocking=True, dtype=torch.float) - labels = labels.cuda().to(non_blocking=True, dtype=torch.float) - maskout_pes = ( - maskout_pes.cuda().to(non_blocking=True) - if maskout_pes is not None - else None - ) - # additional_targets = {"maskout_pes": maskout_pes} - - # Measuring data loading time - data_time.update(time.time() - start) - loop = arange(1) if cfg.TRAIN.optimizer != "SAM" else arange(2) - - for idx in loop: - with torch.cuda.amp.autocast(enabled=cfg.TRAIN.use_amp): - # outputs = model(inputs, **additional_targets) - outputs = model(inputs) - if isinstance(outputs, list): - outputs = outputs[0] - - # In case outputs contain a dict key - if isinstance(outputs, dict): - outputs_cls = outputs["cls"] - outputs_hm = outputs["hm"] if "hm" in outputs.keys() else None - outputs_offset = ( - outputs["offset"] if "offset" in outputs.keys() else None - ) - outputs_cstency = ( - outputs["cstency"] if "cstency" in outputs.keys() else None - ) - outputs_temp_loc = ( - outputs["temp_loc"] if "temp_loc" in outputs.keys() else None - ) - - if idx == 0: - first_outputs_hm = outputs_hm - first_outputs_cls = outputs_cls - - if "Combined" in cfg.TRAIN.loss.type: - # labels = labels.cuda().to(non_blocking=True).long() - - if offsets is not None: - offsets = offsets.cuda().to(non_blocking=True) - - if cstency_heatmaps is not None: - cstency_heatmaps = cstency_heatmaps.cuda().to(non_blocking=True) - - if temp_locs is not None: - temp_locs = temp_locs.cuda().to(non_blocking=True) - - if cfg.TRAIN.loss.type != "CombinedHeatmapBinaryLoss": - heatmaps = heatmaps.cuda().to(non_blocking=True) - else: - heatmaps = targets.cuda().to(non_blocking=True) - - loss_ = critetion( - outputs_hm, - heatmaps, - outputs_cls, - labels, - offset_preds=outputs_offset, - offset_gts=offsets, - cstency_preds=outputs_cstency, - cstency_gts=cstency_heatmaps, - temp_loc_preds=outputs_temp_loc, - temp_loc_gts=temp_locs, - hm_mask=maskout_pes, - ) - loss = loss_["hm"] - if "cls" in loss_.keys(): - loss += loss_["cls"] - if "dst_hm_cls" in loss_.keys(): - loss += loss_["dst_hm_cls"] - if "offset" in loss_.keys(): - loss += loss_["offset"] - if "cstency" in loss_.keys(): - loss += loss_["cstency"] - if "temp_loc" in loss_.keys(): - loss += loss_["temp_loc"] - else: - loss = critetion(outputs_cls, labels) - - loss /= accumulation_steps - - # gradients accumulation for larger batch - if cfg.TRAIN.use_amp: - scaler( - cfg, - loss, - optimizer, - parameters=model.parameters(), - step=idx, - update_grad=(i + 1) % accumulation_steps == 0, - ) - if (i + 1) % accumulation_steps == 0: - optimizer.zero_grad() - else: - loss.backward() - - if cfg.TRAIN.optimizer != "SAM": - optimizer.step() - else: - if idx == 0: - optimizer.first_step(zero_grad=True) - else: - optimizer.second_step(zero_grad=True) - optimizer.zero_grad() - - if cfg.TRAIN.use_amp: - torch.cuda.synchronize() - - if cfg.TRAIN.debug.active: - debugging_panel( - cfg.TRAIN.debug, - inputs, - heatmaps, - first_outputs_hm, - i, - batch_cls_pred=first_outputs_cls, - ) - - if metrics_base == "binary": - acc_ = calculate_acc(first_outputs_cls, targets=targets, labels=labels) - elif metrics_base == "heatmap": - acc_ = calculate_acc(first_outputs_hm, targets=targets, labels=labels) - else: - acc_ = calculate_acc( - first_outputs_hm, - first_outputs_cls, - targets=targets, - labels=labels, - cls_lamda=critetion.cls_lmda, - ) - - if isinstance(inputs, list): - batch_size = inputs[0].size(0) - else: - batch_size = inputs.size(0) - - # Measure accuracy and record loss - losses.update(loss.item() * accumulation_steps, n=batch_size) - acc.update(acc_, n=batch_size) - - batch_time.update(time.time() - start) - start = time.time() - - # Logging - if i % 5 == 0: - params = {} - if "Combined" in cfg.TRAIN.loss.type: - if ( - hasattr(critetion, "dst_hm_cls_lmda") - and critetion.dst_hm_cls_lmda > 0 - ): - params["loss_dst"] = loss_["dst_hm_cls"].item() - if hasattr(critetion, "offset_lmda") and critetion.offset_lmda > 0: - params["loss_offset"] = loss_["offset"].item() - if "cstency" in loss_.keys(): - params["loss_cstency"] = loss_["cstency"].item() - if "temp_loc" in loss_.keys(): - params["loss_temp_loc"] = loss_["temp_loc"].item() - logger.epochInfor( - epoch, - i, - len(data_loader), - batch_time=batch_time, - data_time=data_time, - losses=losses, - acc=acc, - speed=batch_size / batch_time.val, - loss_cls=loss_["cls"].item(), - **params, - ) - else: - logger.epochInfor( - epoch, - i, - len(data_loader), - batch_time=batch_time, - data_time=data_time, - losses=losses, - acc=acc, - speed=batch_size / batch_time.val, - ) - - trainIters += 1 - if cfg.TRAIN.tensorboard: - board_writing(writer, losses.avg, acc.avg, trainIters, "Train") - return losses, acc, trainIters - - -def validate( - cfg, - model, - critetion, - epoch, - data_loader, - logger, - writer, - devices, - valIters, - metrics_base="combine", -): - calculate_acc = get_acc_mesure_func(metrics_base) - batch_time = AverageMeter() - data_time = AverageMeter() - losses = AverageMeter() - acc = AverageMeter() - - # Switch to test mode - model.eval() - data_loader = tqdm(data_loader, dynamic_ncols=True) - start = time.time() - with torch.no_grad(): - for i, batch_data in enumerate(data_loader): - ( - inputs, - labels, - targets, - heatmaps, - cstency_heatmaps, - offsets, - temp_locs, - maskout_pes, - ) = get_batch_data(batch_data) - inputs = inputs.to(devices, non_blocking=True, dtype=torch.float).cuda() - labels = labels.cuda().to(non_blocking=True, dtype=torch.float) - maskout_pes = ( - maskout_pes.cuda().to(non_blocking=True) - if maskout_pes is not None - else None - ) - # additional_targets = {"maskout_pes": maskout_pes} - - # Measuring data loading time - data_time.update(time.time() - start) - - # outputs = model(inputs, **additional_targets) - outputs = model(inputs) - if isinstance(outputs, list): - outputs = outputs[0] - - # In case outputs contain a dict key - if isinstance(outputs, dict): - outputs_cls = outputs["cls"] - outputs_hm = outputs["hm"] if "hm" in outputs.keys() else None - outputs_offset = ( - outputs["offset"] if "offset" in outputs.keys() else None - ) - outputs_cstency = ( - outputs["cstency"] if "cstency" in outputs.keys() else None - ) - outputs_temp_loc = ( - outputs["temp_loc"] if "temp_loc" in outputs.keys() else None - ) - - if "Combined" in cfg.TRAIN.loss.type: - # labels = labels.cuda().to(non_blocking=True).long() - - if offsets is not None: - offsets = offsets.cuda().to(non_blocking=True) - - if cstency_heatmaps is not None: - cstency_heatmaps = cstency_heatmaps.cuda().to(non_blocking=True) - - if temp_locs is not None: - temp_locs = temp_locs.cuda().to(non_blocking=True) - - if cfg.TRAIN.loss.type != "CombinedHeatmapBinaryLoss": - heatmaps = heatmaps.cuda().to(non_blocking=True) - else: - heatmaps = targets.cuda().to(non_blocking=True) - - loss_ = critetion( - outputs_hm, - heatmaps, - outputs_cls, - labels, - offset_preds=outputs_offset, - offset_gts=offsets, - cstency_preds=outputs_cstency, - cstency_gts=cstency_heatmaps, - temp_loc_preds=outputs_temp_loc, - temp_loc_gts=temp_locs, - hm_mask=maskout_pes, - ) - loss = loss_["hm"] - if "cls" in loss_.keys(): - loss += loss_["cls"] - if "dst_hm_cls" in loss_.keys(): - loss += loss_["dst_hm_cls"] - if "offset" in loss_.keys(): - loss += loss_["offset"] - if "cstency" in loss_.keys(): - loss += loss_["cstency"] - if "temp_loc" in loss_.keys(): - loss += loss_["temp_loc"] - else: - loss = critetion(outputs_cls, labels) - - if cfg.TRAIN.debug.active: - debugging_panel( - cfg.TRAIN.debug, - inputs, - heatmaps, - outputs_hm, - i, - batch_cls_pred=outputs_cls, - split="val", - ) - - if metrics_base == "binary": - acc_ = calculate_acc(outputs_cls, targets=targets, labels=labels) - elif metrics_base == "heatmap": - acc_ = calculate_acc(outputs_hm, targets=targets, labels=labels) - else: - acc_ = calculate_acc( - outputs_hm, - outputs_cls, - targets=targets, - labels=labels, - cls_lamda=critetion.cls_lmda, - ) - - if isinstance(inputs, list): - batch_size = inputs[0].size(0) - else: - batch_size = inputs.size(0) - - # Measure accuracy and record loss - losses.update(loss.item(), n=batch_size) - acc.update(acc_, n=batch_size) - - batch_time.update(time.time() - start) - start = time.time() - - valIters += 1 - if cfg.TRAIN.tensorboard: - board_writing(writer, losses.avg, acc.avg, valIters, "Val") - - # Logging - params = {} - if "Combined" in cfg.TRAIN.loss.type: - if ( - hasattr(critetion, "dst_hm_cls_lmda") - and critetion.dst_hm_cls_lmda > 0 - ): - params["loss_dst"] = loss_["dst_hm_cls"].item() - if hasattr(critetion, "offset_lmda") and critetion.offset_lmda > 0: - params["loss_offset"] = loss_["offset"].item() - if "cstency" in loss_.keys(): - params["loss_cstency"] = loss_["cstency"].item() - if "temp_loc" in loss_.keys(): - params["loss_temp_loc"] = loss_["temp_loc"].item() - logger.epochInfor( - epoch, - i, - len(data_loader), - batch_time=batch_time, - data_time=data_time, - losses=losses, - acc=acc, - speed=batch_size / batch_time.val, - loss_cls=loss_["cls"].item(), - **params, - ) - else: - logger.epochInfor( - epoch, - i, - len(data_loader), - batch_time=batch_time, - data_time=data_time, - losses=losses, - acc=acc, - speed=batch_size / batch_time.val, - ) - return losses, acc, valIters - - -def test( - cfg, - model, - critetion, - epoch, - data_loader, - logger, - writer, - devices, - valIters, - metrics_base="combine", -): - calculate_acc = get_acc_mesure_func(metrics_base) - total_preds = torch.tensor([]).cuda().to(dtype=torch.float) - total_labels = torch.tensor([]).cuda().to(dtype=torch.float) - - # Switch to test mode - model.eval() - test_dataloader = tqdm(data_loader, dynamic_ncols=True) - with torch.no_grad(): - for b, (inputs, labels, vid_ids) in enumerate(test_dataloader): - inputs = inputs.to(dtype=torch.float).cuda() - labels = labels.to(dtype=torch.float).cuda() - - outputs = model(inputs) - # Applying Flip test - if isinstance(outputs, list): - outputs = outputs[0] - - # In case outputs contain a dict key - if isinstance(outputs, dict): - # hm_outputs = outputs['hm'] if 'hm' in outputs.keys() else None - cls_outputs = outputs["cls"] - # outputs_temp_loc = outputs['temp_loc'] if 'temp_loc' in outputs.keys() else None - - total_preds = torch.cat((total_preds, cls_outputs), 0) - total_labels = torch.cat((total_labels, labels), 0) - - acc_ = calculate_acc( - total_preds, targets=None, labels=total_labels, threshold=cfg.TEST.threshold - ) - metrics = bin_calculate_auc_ap_ar( - total_preds, - total_labels, - metrics_base=metrics_base, - threshold=cfg.TEST.threshold, - ) - auc_, ap_, ar_, mf1_ = ( - metrics["auc"], - metrics["ap"], - metrics["ar"], - metrics["mf1"], - ) - - logger.info( - f"Current ACC, AUC, AP, AR, mF1 for {cfg.DATASET.DATA.TEST.FAKETYPE} --- {cfg.DATASET.DATA.TEST.LABEL_FOLDER} -- \ - {acc_*100} -- {auc_*100} -- {ap_*100} -- {ar_*100} -- {mf1_*100}" - ) - - return acc_, auc_, ap_, ar_ diff --git a/video/fake-stormer/model_code/lib/metrics.py b/video/fake-stormer/model_code/lib/metrics.py deleted file mode 100644 index c25e662345713ca5b0dfa616130a988f9a8c5e88..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/lib/metrics.py +++ /dev/null @@ -1,201 +0,0 @@ -# -*- coding: utf-8 -*- -import os - -import numpy as np -import torch -from losses.losses import _avg_sigmoid, _sigmoid -from scipy.stats import beta, gaussian_kde -from sklearn import metrics as cal_metrics -from sklearn.metrics import ( - average_precision_score, - balanced_accuracy_score, - f1_score, - precision_score, - recall_score, -) - - -def bin_calculate_acc(preds, labels, targets=None, threshold=0.5): - if torch.is_tensor(preds): - if preds.shape[-1] > 1: - preds = preds.softmax(dim=-1) - if preds.shape[-1] == 2: - preds = preds[:, -1] - else: - preds = preds.max(dim=-1, keepdim=True).values - labels = labels.max(dim=-1, keepdim=True).values - else: - preds = preds.sigmoid() - - preds = preds.detach().cpu().numpy() - labels = labels.detach().cpu().numpy() - - preds_ = (preds >= threshold).astype(int) - acc = np.mean((preds_ == labels).astype(int), axis=0) - - if acc.ndim >= 1: - return acc[0] - else: - return acc - - -def hm_calculate_acc(preds, targets=None, labels=None, threshold=0.5): - cls_ = _avg_sigmoid(preds) - acc = bin_calculate_acc(cls_, labels, threshold=threshold) - return acc - - -def hm_bin_calculate_acc( - hm_preds, cls_preds, targets=None, labels=None, cls_lamda=0.05 -): - # Select top hm_preds - hm_preds_ = _sigmoid(hm_preds.clone()) - hm_preds_ = torch.reshape(hm_preds_, (hm_preds_.shape[0], hm_preds_.shape[1], -1)) - top_k = torch.topk(hm_preds_, 10, -1).values - mean_hm_preds = torch.mean(top_k, -1) - - cls_preds_ = cls_lamda * cls_preds + (1 - cls_lamda) * mean_hm_preds - acc = bin_calculate_acc(cls_preds_, labels) - return acc - - -def bin_calculate_auc_ap_ar( - cls_preds, - labels, - metrics_base="binary", - hm_preds=None, - cls_lamda=0.1, - threshold=0.5, - apr=True, -): - assert metrics_base in [ - "binary", - "heatmap", - "combine", - ], "Metric base is only one of these values [binary, heatmap, combine]" - - if torch.is_tensor(cls_preds): - if cls_preds.shape[-1] > 1: - cls_preds = cls_preds.softmax(dim=-1) - if cls_preds.shape[-1] == 2: - cls_preds = cls_preds[:, -1] - else: - cls_preds = cls_preds.max(dim=-1, keepdim=True).values - labels = labels.max(dim=-1, keepdim=True).values - else: - cls_preds = cls_preds.sigmoid() - - if metrics_base == "combine": - assert ( - hm_preds is not None - ), "Heatmap predict can not be None if metrics-base is combine" - hm_preds = _sigmoid(hm_preds) - hm_preds = torch.reshape(hm_preds, (hm_preds.shape[0], 1, -1)) - top_k = torch.topk(hm_preds, 10, -1).values - mean_hm_preds = torch.mean(top_k, -1) - cls_preds = cls_lamda * cls_preds + (1 - cls_lamda) * mean_hm_preds - - labels = labels.cpu().numpy() - cls_preds = cls_preds.cpu().numpy() - fpr, tpr, thresholds = cal_metrics.roc_curve(labels, cls_preds, pos_label=1) - - metrics = {} - distances = np.sqrt((1 - tpr) ** 2 + fpr**2) - optimal_idx = np.argmin(distances) - optimal_threshold = thresholds[optimal_idx] - top_k_min_indices = np.argsort(distances)[:5] - top_k_thresholds = thresholds[top_k_min_indices] - metrics["best_thr"] = optimal_threshold - metrics["thr_var"] = np.var(top_k_thresholds, ddof=1) - - # AUC - metrics["auc"] = cal_metrics.auc(fpr, tpr) - - if apr: - # AP metric - ap = average_precision_score(labels, cls_preds) - metrics["ap"] = ap - - # AR metric - ar = recall_score(labels, (cls_preds >= threshold).astype(int), average="macro") - metrics["ar"] = ar - - # mF1 metric - metrics["mf1"] = (ap * ar * 2) / (ap + ar) - - return metrics - else: - # False Negative Rate - fnr = 1 - tpr - eer_threshold = thresholds[np.nanargmin(np.absolute(fpr - fnr))] - eer = fpr[np.nanargmin(np.absolute(fpr - fnr))] - metrics["eer"] = eer - - metrics["bacc"] = balanced_accuracy_score( - labels, (cls_preds >= threshold).astype(int) - ) - - metrics["p"] = precision_score(labels, (cls_preds >= threshold).astype(int)) - - metrics["r"] = recall_score(labels, (cls_preds >= threshold).astype(int)) - - metrics["s"] = recall_score( - labels, (cls_preds >= threshold).astype(int), pos_label=0 - ) - - metrics["f1"] = f1_score(labels, (cls_preds >= threshold).astype(int)) - - return metrics - - -def get_acc_mesure_func(task="binary"): - if task == "binary": - return bin_calculate_acc - elif task == "heatmap": - return hm_calculate_acc - else: - return hm_bin_calculate_acc - - -# Compute Empirical CDF -def empirical_cdf(data): - sorted_data = np.sort(data) - return sorted_data, np.arange(1, len(sorted_data) + 1) / len(sorted_data) - - -# Transformations -def apply_cdf_transform(neg_data, pos_data, cdf_type="empirical"): - if cdf_type == "empirical": - return ( - empirical_cdf(neg_data)[1], - empirical_cdf(pos_data)[1], - ) # Get the ECDF values - elif cdf_type == "kde": - kde_data1 = gaussian_kde(neg_data) - kde_data2 = gaussian_kde(pos_data) - - x_values = np.linspace(0, 1, 11) # 0.0; 0.1; 0.2; ... - - cdf1 = np.cumsum(kde_data1(x_values)) - cdf1 /= cdf1[-1] - - cdf2 = np.cumsum(kde_data2(x_values)) - cdf2 /= cdf2[-1] - return cdf1, cdf2 - elif cdf_type == "para": - alp1, bta1, _, _ = beta.fit(neg_data, floc=0, fscale=1.0001) - alp2, bta2, _, _ = beta.fit(pos_data, floc=0, fscale=1.0001) - - x_values = np.linspace(0, 1, 11) # 0.0; 0.1; 0.2; ... - - cdf1 = beta.cdf(x_values, alp1, bta1) - cdf2 = beta.cdf(x_values, alp2, bta2) - return cdf1, cdf2 - elif cdf_type == "quantile": - q = np.linspace(0, 1, min(len(neg_data), len(pos_data))) # Matching quantiles - F_inv_P0 = np.quantile(neg_data, q) - F_inv_P1 = np.quantile(pos_data, q) - - return F_inv_P0, F_inv_P1 - else: - raise ValueError("Unknown CDF type") diff --git a/video/fake-stormer/model_code/lib/optimizers/sam.py b/video/fake-stormer/model_code/lib/optimizers/sam.py deleted file mode 100644 index 8247fbf4e0d1ed50169a897f238ac67a594e7bde..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/lib/optimizers/sam.py +++ /dev/null @@ -1,96 +0,0 @@ -# -*- coding: utf-8 -*- -import torch -import torch.nn as nn - - -def disable_running_stats(model): - def _disable(module): - if isinstance(module, nn.BatchNorm2d): - module.backup_momentum = module.momentum - module.momentum = 0 - - model.apply(_disable) - - -def enable_running_stats(model): - def _enable(module): - if isinstance(module, nn.BatchNorm2d) and hasattr(module, "backup_momentum"): - module.momentum = module.backup_momentum - - model.apply(_enable) - - -class SAM(torch.optim.Optimizer): - def __init__(self, params, base_optimizer, rho=0.05, **kwargs): - assert rho >= 0.0, f"Invalid rho, should be non-negative: {rho}" - - defaults = dict(rho=rho, **kwargs) - super(SAM, self).__init__(params, defaults) - - self.base_optimizer = base_optimizer(self.param_groups, **kwargs) - self.param_groups = self.base_optimizer.param_groups - - @torch.no_grad() - def first_step(self, zero_grad=False): - grad_norm = self._grad_norm() - for group in self.param_groups: - scale = group["rho"] / (grad_norm + 1e-12) - - for p in group["params"]: - if p.grad is None: - continue - e_w = p.grad * scale.to(p) - p.add_(e_w) # climb to the local maximum "w + e(w)" - self.state[p]["e_w"] = e_w - - if zero_grad: - self.zero_grad() - - @torch.no_grad() - def second_step(self, zero_grad=False, scaler=None): - for group in self.param_groups: - for p in group["params"]: - if p.grad is None: - continue - p.sub_(self.state[p]["e_w"]) # get back to "w" from "w + e(w)" - - if scaler is None: - self.base_optimizer.step() # do the actual "sharpness-aware" update - else: - scaler.step(self.base_optimizer) - - if zero_grad: - self.zero_grad() - - if scaler is not None: - return scaler - - @torch.no_grad() - def step(self, closure=None): - assert ( - closure is not None - ), "Sharpness Aware Minimization requires closure, but it was not provided" - closure = torch.enable_grad()( - closure - ) # the closure should do a full forward-backward pass - - self.first_step(zero_grad=True) - closure() - self.second_step() - - def _grad_norm(self): - shared_device = self.param_groups[0]["params"][ - 0 - ].device # put everything on the same device, in case of model parallelism - norm = torch.norm( - torch.stack( - [ - p.grad.norm(p=2).to(shared_device) - for group in self.param_groups - for p in group["params"] - if p.grad is not None - ] - ), - p=2, - ) - return norm diff --git a/video/fake-stormer/model_code/lib/scheduler/linear_decay.py b/video/fake-stormer/model_code/lib/scheduler/linear_decay.py deleted file mode 100644 index a218e60ee69a54f454f324fbef46a77071f07243..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/lib/scheduler/linear_decay.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- -import torch -from torch.optim import SGD -from torch.optim.lr_scheduler import _LRScheduler - - -class LinearDecayLR(_LRScheduler): - def __init__(self, optimizer, n_epoch, start_decay, last_epoch=-1, booster=2): - self.start_decay = start_decay - self.n_epoch = n_epoch - self.booster = booster - super(LinearDecayLR, self).__init__(optimizer, last_epoch) - - def get_lr(self): - last_epoch = self.last_epoch - n_epoch = self.n_epoch - b_lr = self.base_lrs[-1] - - if last_epoch > 0: - try: - cur_lr = self.get_last_lr() - except: - cur_lr = b_lr * self.booster - start_decay = self.start_decay - - if last_epoch >= start_decay: - lr = b_lr * self.booster - (b_lr * self.booster) / ( - n_epoch - start_decay - ) * (last_epoch - start_decay) - else: - if last_epoch < start_decay: - lr = b_lr + (b_lr * self.booster - b_lr) / start_decay * last_epoch - else: - lr = cur_lr - - self._last_lr = lr - print(f"Active Learning Rate --- {lr}") - return [lr] diff --git a/video/fake-stormer/model_code/logs/logger.py b/video/fake-stormer/model_code/logs/logger.py deleted file mode 100644 index 655ae2871372e8788a1c800918bf6571350f6920..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/logs/logger.py +++ /dev/null @@ -1,109 +0,0 @@ -# -*- coding: utf-8 -*- -import logging -import os -from datetime import datetime -from types import MethodType - -import torch -import torch.nn.functional as F -from mmcv.utils import get_logger -from package_utils.utils import make_dir - -LOG_DIR = "logs/{}".format(datetime.today().strftime("%d-%m-%Y")) -make_dir(LOG_DIR) - - -class Logger: - def __init__(self, task="training", workdir=LOG_DIR): - super().__init__() - self.logger = logging.getLogger("") - self.logger.setLevel(logging.INFO) - - file_handler = logging.FileHandler("{}/{}.log".format(workdir, task)) - stream_handler = logging.StreamHandler() - self.logger.addHandler(file_handler) - self.logger.addHandler(stream_handler) - self.logger.epochInfor = MethodType(self.epochInfor, self.logger) - self.info = self.logger.info - - def epochInfor( - self, - epoch, - idx, - length, - batch_time, - speed, - data_time, - losses, - acc, - loss_cls=None, - **kwargs, - ): - msg = ( - "Epoch: [{0}][{1}/{2}]\t" - "Time {batch_time.val:.3f}s ({batch_time.avg:.3f}s)\t" - "Speed {speed:.1f} samples/s\t" - "Data {data_time.val:.3f}s ({data_time.avg:.3f}s)\t" - "Loss {loss.val:.5f} ({loss.avg:.5f})\t" - "Accuracy {acc.val:.3f} ({acc.avg:.3f})".format( - epoch, - idx, - length, - batch_time=batch_time, - speed=speed, - data_time=data_time, - loss=losses, - acc=acc, - ) - ) - if loss_cls is not None: - msg += "\t Cls Loss: {loss_cls:.5f}".format(loss_cls=loss_cls) - - for k, v in kwargs.items(): - if v is not None: - msg += f"\t {k}: {v:.5f}" - - self.logger.info(msg) - - -def board_writing(writer, loss, acc, iterations, dataset="Train"): - writer.add_scalar("{}/loss".format(dataset), loss, iterations) - writer.add_scalar("{}/acc".format(dataset), acc, iterations) - - -def debug_writing(writer, outputs, labels, inputs, iterations): - tmp_tar = torch.unsqueeze(labels.cpu().data[0], dim=1) - # tmp_out = torch.unsqueeze(outputs.cpu().data[0], dim=1) - - tmp_inp = inputs.cpu().data[0] - tmp_inp[0] += 0.406 - tmp_inp[1] += 0.457 - tmp_inp[2] += 0.480 - - tmp_inp[0] += torch.sum( - F.interpolate(tmp_tar, scale_factor=4, mode="bilinear"), dim=0 - )[0] - tmp_inp.clamp_(0, 1) - - writer.add_image("Data/input", tmp_inp, iterations) - - -def get_root_logger(log_file=None, log_level=logging.INFO): - """Use `get_logger` method in mmcv to get the root logger. - - The logger will be initialized if it has not been initialized. By default a - StreamHandler will be added. If `log_file` is specified, a FileHandler will - also be added. The name of the root logger is the top-level package name, - e.g., "mmpose". - - Args: - log_file (str | None): The log filename. If specified, a FileHandler - will be added to the root logger. - log_level (int): The root logger level. Note that only the process of - rank 0 is affected, while other processes will set the level to - "Error" and be silent most of the time. - - Returns: - logging.Logger: The root logger. - """ - return get_logger(LOG_DIR, log_file, log_level) diff --git a/video/fake-stormer/model_code/losses/__init__.py b/video/fake-stormer/model_code/losses/__init__.py deleted file mode 100644 index 6a92031f4fe8b37a637cb268e7d6f239c516e39c..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/losses/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# -*- coding: utf-8 -*- -from .builder import LOSSES, build_losses -from .losses import BinaryCrossEntropy - -__all__ = ["LOSSES", "build_losses", "BinaryCrossEntropy"] diff --git a/video/fake-stormer/model_code/losses/builder.py b/video/fake-stormer/model_code/losses/builder.py deleted file mode 100644 index 3602ef6e21758e2de844ed9cad4f0294ab5aaa8a..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/losses/builder.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- -from typing import Any, Dict, Optional - -from register.register import Registry, build_from_cfg - -LOSSES = Registry("Loss") - - -def build_losses( - cfg, - loss_func: Registry, - build_func=build_from_cfg, - default_args: Optional[Dict] = None, -) -> Any: - return build_func(cfg, loss_func, default_args) diff --git a/video/fake-stormer/model_code/losses/losses.py b/video/fake-stormer/model_code/losses/losses.py deleted file mode 100644 index 62aa97883c9e368cf346bb0a5f3b5acffb51a9b2..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/losses/losses.py +++ /dev/null @@ -1,485 +0,0 @@ -# -*- coding: utf-8 -*- -import math - -import numpy as np -import torch -import torch.nn as nn -import torch.nn.functional as F -from torch.nn import BCELoss, CrossEntropyLoss -from torch.nn.functional import binary_cross_entropy - -from .builder import LOSSES - - -def _sigmoid(hm): - x = hm - y = torch.clamp(x.sigmoid_(), min=1e-4, max=1 - 1e-4) - return y - - -def _avg_sigmoid(hm): - if hm.dim() == 4: - x = torch.mean(hm, [2, 3]) - else: - x = hm - y = torch.clamp(x.sigmoid_(), min=1e-4, max=1 - 1e-4) - return y - - -def f_cstency(cstency_hm_preds, cstency_hm_gt, feature="2D"): - # Heatmap here that is original is returned from model without any modification - cstency_matrix = torch.zeros_like(cstency_hm_gt).cuda() - b_size = cstency_hm_preds.size(0) - - indices_ = cstency_hm_gt.view(b_size, -1).argmax(dim=-1) - - cst_hm_dim = cstency_hm_preds.size(1) - - if feature == "2D": - # Handling 2D output features - cst_hm_h = cstency_hm_preds.size(2) - cst_hm_w = cstency_hm_preds.size(3) - - cstency_matrix_ = torch.matmul( - cstency_hm_preds.view(b_size, cst_hm_dim, -1)[ - np.arange(b_size), :, indices_ - ].view(b_size, 1, cst_hm_dim), - cstency_hm_preds.view(b_size, cst_hm_dim, -1), - ) - cstency_matrix_ = cstency_matrix_.view( - b_size, cstency_hm_gt.size(1), cst_hm_h, cst_hm_w - ) / math.sqrt(cst_hm_dim) - elif feature == "3D": - # Handling 3D output features - cst_hm_d = cstency_hm_preds.size(2) - cst_hm_h = cstency_hm_preds.size(3) - cst_hm_w = cstency_hm_preds.size(4) - - cstency_matrix_ = torch.matmul( - cstency_hm_preds.view(b_size, cst_hm_dim, -1)[ - np.arange(b_size), :, indices_ - ].view(b_size, 1, cst_hm_dim), - cstency_hm_preds.view(b_size, cst_hm_dim, -1), - ) - cstency_matrix_ = cstency_matrix_.view( - b_size, cstency_hm_gt.size(1), cst_hm_d, cst_hm_h, cst_hm_w - ) / math.sqrt(cst_hm_dim) - else: - raise ValueError(f"{feature} output shape has not been supported!") - - cstency_matrix = cstency_matrix_.sigmoid_() - - return cstency_matrix - - -def _neg_pos_loss(hm_pred, hm_gt): - pos_idxes = hm_gt > 0 - neg_idxes = ~pos_idxes - batch_size = hm_gt.size(0) - neg_pos_gt, neg_pos_pred = ( - torch.zeros(batch_size, 1, dtype=torch.float).cuda(), - torch.zeros(batch_size, 1, dtype=torch.float).cuda(), - ) - hm_pred_ = torch.squeeze(torch.clone(hm_pred)) - - for i in range(batch_size): - neg_pos_gt[i] = torch.sum(hm_gt[i][pos_idxes[i, :, :]]) - torch.sum( - hm_gt[i][neg_idxes[i, :, :]] - ) - neg_pos_pred[i] = torch.sum(hm_pred_[i][pos_idxes[i, :, :]]) - torch.sum( - hm_pred_[i][neg_idxes[i, :, :]] - ) - - return torch.abs(neg_pos_pred), torch.abs(neg_pos_gt) - - -def _neg_loss(pred, gt, epsilon=0.1, noise_distribution=0.2, alpha=0.25, **kwargs): - """Modified focal loss. Exactly the same as CornerNet. - Runs faster and costs a little bit more memory - Arguments: - pred (batch x c x h x w) - gt_regr (batch x c x h x w) - """ - hm_mask = kwargs.get( - "hm_mask" - ) # Removing non-computed self-attention positions in total loss - - loss = 0 - pos_inds = gt.eq(1.0).float() - neg_inds = gt.lt(1.0).float() - b_size = gt.shape[0] - - if hm_mask is not None: - pos_inds = hm_mask * pos_inds - neg_inds = hm_mask * neg_inds - - neg_weights = torch.pow(1 - gt, 4) - - # pos_loss = torch.log(pred) * torch.pow(1 - pred, 2) * pos_inds * alpha - pos_loss = (1 - epsilon) * torch.log(pred) * torch.pow(1 - pred, 2) * pos_inds - pos_loss_noise = ( - epsilon - * torch.log(pred) - * torch.pow(1 - pred, 2) - * noise_distribution - * pos_inds - ) - pos_loss = pos_loss + pos_loss_noise - neg_loss = torch.log(1 - pred) * torch.pow(pred, 2) * neg_inds * neg_weights - - num_pos = pos_inds.float().sum() - pos_loss = pos_loss.sum() - neg_loss = neg_loss.sum() - - if num_pos == 0: - loss = loss - neg_loss - else: - loss = loss - (pos_loss + neg_loss) / num_pos - loss *= alpha - return loss - - -def _distance_hm_cls_loss( - cos_sim_ins, hm_preds, hm_gts, label_preds, label_gts, alpha=0.25 -): - b_size = hm_preds.size(0) - hm_preds = hm_preds.view(b_size, -1) - hm_gts = hm_gts.view(b_size, -1) - pos_hm_loss = 0.0 - neg_hm_loss = 0.0 - - for i in range(0, b_size // 2): - for j in range(0, b_size // 2): - pos_hm_loss += (1 / 2) * (1 - cos_sim_ins(hm_preds[i], hm_preds[j])) - neg_hm_loss += (1 / 2) * ( - 1 - cos_sim_ins(hm_preds[i], hm_preds[j + b_size // 2]) - ) - - cos_loss = pos_hm_loss / ((b_size // 2) ** 2) - neg_hm_loss / ((b_size // 2) ** 2) - cos_loss = cos_loss * alpha - return cos_loss - - -@LOSSES.register_module() -class BaseLoss(nn.Module): - def __init__(self, cfg, **kwargs): - self.cfg = cfg - super().__init__() - - for k, v in kwargs.items(): - if v is not None: - self.__setattr__(k, v) - # Critetion ins - self.mse_critetion = nn.MSELoss(reduction=self.cfg.mse_reduction) - if hasattr(self, "use_ce") and getattr(self, "use_ce"): - self.bce_critetion = nn.CrossEntropyLoss(reduction=self.ce_reduction) - else: - self.bce_critetion = nn.BCEWithLogitsLoss( - reduction=self.cfg.ce_reduction - ) # For Binary Cross Entropy Loss - self.ce_critetion = CrossEntropyLoss( - reduction=self.cfg.ce_reduction - ) # For Cross Entropy Loss in general - - # Lambda coefs - self.offset_lmda = self.cfg.offset_lmda - self.cls_lmda = self.cfg.cls_lmda - self.dst_hm_cls_lmda = self.cfg.dst_hm_cls_lmda - self.hm_lmda = self.cfg.hm_lmda - self.cstency_lmda = self.cfg.cstency_lmda - - # Others - self.cos_sim_ins = nn.CosineSimilarity(dim=0, eps=1e-6) - - def _offset_loss(self, preds, gts, apply_filter=False): - loss = 0 - coefs = gts.gt(0).float() if apply_filter else 1 - n_coefs = coefs.float().sum() - - loss = 0.5 * self.mse_critetion(preds * coefs, gts * coefs) - loss /= n_coefs + 1e-6 - loss *= self.offset_lmda - return loss - - def _cls_loss(self, preds, gts): - loss = 0 - loss = self.bce_critetion(preds, gts) - loss *= self.cls_lmda - return loss - - def _consistency_loss(self, preds, gts, feature="2D"): - loss = torch.zeros(1).cuda() - encode_preds = f_cstency(preds, gts, feature=feature) - # loss = self.bce_critetion(encode_preds.view(-1, 1), gts.view(-1, 1)) - loss = self.mse_critetion(encode_preds, gts) - loss *= self.cstency_lmda - return loss.sum() - - def _temp_loc_loss(self, preds, gts, alpha=0.25, gamma=2): - """ - Calculating loss for temporal location - agrs: - preds: output prediction of temporal location - gts: gt of temporal location - """ - loss = self.bce_critetion( - preds.view(-1).unsqueeze(-1), gts.view(-1).unsqueeze(-1) - ) - loss *= self.cfg.tmp_loc_lmda - return loss - - -@LOSSES.register_module() -class BinaryCrossEntropy(nn.Module): - def __init__(self, cfg, reduction="mean"): - super(BinaryCrossEntropy, self).__init__() - self.reduction = reduction - self.bce = nn.BCEWithLogitsLoss(reduction=self.reduction) - - def __call__(self, pred, y): - return self.bce(pred, y) - - -@LOSSES.register_module() -class CombinedFocalLoss(BaseLoss): - """nn.Module warpper for focal loss""" - - def __init__(self, cfg, use_target_weight, **kwargs): - super(CombinedFocalLoss, self).__init__(cfg, **kwargs) - self.hm_loss = _neg_loss - self.feature = kwargs.get("feature") or "2D" - - def forward( - self, - hm_outputs, - hm_targets, - cls_preds, - cls_gts, - hm_mask=None, - offset_preds=None, - offset_gts=None, - cstency_preds=None, - cstency_gts=None, - target_weight=None, - temp_loc_preds=None, - temp_loc_gts=None, - ): - loss_return = {} - hm_outputs_ = torch.clone(hm_outputs) - hm_outputs_ = _sigmoid(hm_outputs_) - if hm_targets.dim() == 3: - hm_targets = torch.unsqueeze(hm_targets, 1) - - loss_hm = self.hm_loss( - hm_outputs_, hm_targets, alpha=self.hm_lmda, hm_mask=hm_mask - ) - loss_return["hm"] = loss_hm - loss_return["cls"] = self._cls_loss(cls_preds, cls_gts) - - if self.dst_hm_cls_lmda > 0: - loss_return["dst_hm_cls"] = _distance_hm_cls_loss( - self.cos_sim_ins, - hm_outputs, - hm_targets, - cls_preds, - cls_gts, - alpha=self.dst_hm_cls_lmda, - ) - - if self.offset_lmda > 0 and offset_preds is not None: - loss_return["offset"] = self._offset_loss( - offset_preds, offset_gts, apply_filter=True - ) - - if self.cstency_lmda > 0 and cstency_preds is not None: - loss_return["cstency"] = self._consistency_loss( - cstency_preds, cstency_gts, feature=self.feature - ) - - if temp_loc_preds is not None and self.cfg.tmp_loc_lmda is not None: - loss_temp_loc = self._temp_loc_loss(temp_loc_preds, temp_loc_gts) - loss_return["temp_loc"] = loss_temp_loc - - return loss_return - - -@LOSSES.register_module() -class JointsMSELoss(nn.Module): - def __init__(self, use_target_weight, reduction="mean", lmda=1): - super(JointsMSELoss, self).__init__() - self.reduction = reduction - self.criterion = nn.MSELoss(reduction=reduction) - self.use_target_weight = use_target_weight - self.lmda = lmda - - def forward(self, output, target, target_weight=None, **kwargs): - hm_mask = kwargs.get("hm_mask") - batch_size = output.size(0) - num_joints = output.size(1) - heatmaps_pred = output.reshape((batch_size, num_joints, -1)).split(1, 1) - heatmaps_gt = target.reshape((batch_size, num_joints, -1)).split(1, 1) - if hm_mask is not None: - hm_mask_ = hm_mask.reshape((batch_size, num_joints, -1)).split(1, 1) - loss = 0 - - for idx in range(num_joints): - heatmap_pred = heatmaps_pred[idx].squeeze() - heatmap_gt = heatmaps_gt[idx].squeeze() - if self.use_target_weight and target_weight is not None: - loss += 0.5 * self.criterion( - heatmap_pred.mul(target_weight[:, idx]), - heatmap_gt.mul(target_weight[:, idx]), - ) - else: - if hm_mask is not None: - heatmap_pred = heatmap_pred * hm_mask_[idx].squeeze() - heatmap_gt = heatmap_gt * hm_mask_[idx].squeeze() - loss += 0.5 * self.criterion(heatmap_pred, heatmap_gt) - - if self.reduction != "mean": - loss = loss * self.lmda / num_joints - else: - loss = loss * self.lmda - - return loss - - -@LOSSES.register_module() -class CombinedMSELoss(BaseLoss): - def __init__(self, cfg, use_target_weight=False, **kwargs): - super(CombinedMSELoss, self).__init__(cfg=cfg, **kwargs) - self.criterion_hm = JointsMSELoss( - use_target_weight=use_target_weight, - reduction=self.cfg.mse_reduction, - lmda=self.cfg.hm_lmda, - ) - self.use_target_weight = use_target_weight - self.feature = kwargs.get("feature") or "2D" - - def forward( - self, - hm_outputs, - hm_targets, - cls_preds, - cls_gts, - hm_mask=None, - target_weight=None, - cstency_preds=None, - cstency_gts=None, - temp_loc_preds=None, - temp_loc_gts=None, - **kwargs, - ): - loss_return = {} - loss_hm = self.criterion_hm( - hm_outputs, hm_targets, target_weight=target_weight, hm_mask=hm_mask - ) - loss_return["hm"] = loss_hm - - loss_cls = self._cls_loss(cls_preds / self.temperature, cls_gts) - loss_return["cls"] = loss_cls - - if self.cstency_lmda > 0 and cstency_preds is not None: - loss_return["cstency"] = self._consistency_loss( - cstency_preds, cstency_gts, feature=self.feature - ) - - if temp_loc_preds is not None and self.cfg.tmp_loc_lmda is not None: - loss_temp_loc = self._temp_loc_loss(temp_loc_preds, temp_loc_gts) - loss_return["temp_loc"] = loss_temp_loc - - return loss_return - - -@LOSSES.register_module() -class CombinedHeatmapBinaryLoss(nn.Module): - def __init__( - self, use_target_weight, cls_lmda=0.2, reduction="mean", cls_cal=True, **kwargs - ): - super(CombinedHeatmapBinaryLoss, self).__init__() - self.criterion_cls = BinaryCrossEntropy(reduction=reduction) - self.criterion_hm = BinaryCrossEntropy(reduction=reduction) - self.use_target_weight = use_target_weight - self.cls_lmda = cls_lmda if cls_cal else 0 - self.cls_cal = cls_cal - - def forward(self, hm_outputs, hm_targets, cls_preds, cls_gts, target_weight=None): - batch_size = hm_outputs.size(0) - hm_targets = hm_targets[:, :, :, 0] - hm_h = hm_outputs.size(2) - hm_w = hm_outputs.size(3) - total_pixels = hm_h * hm_w - loss_hm = torch.zeros(1).cuda() - hm_outputs_ = torch.clone(hm_outputs) - hm_outputs_ = _sigmoid(hm_outputs_) - - for i in range(hm_h): - for j in range(hm_w): - loss_hm_ = self.criterion_hm( - hm_outputs_[:, :, i, j], torch.unsqueeze(hm_targets[:, i, j], 1) - ) - loss_hm += loss_hm_ - - loss_hm = loss_hm / total_pixels - loss_return = {} - loss_return["hm"] = loss_hm - - loss_cls = self.criterion_cls(cls_preds, cls_gts) - loss_return["cls"] = loss_cls - return loss_return - - -@LOSSES.register_module() -class CombinedPolyLoss(nn.Module): - """ - PolyLoss: A Polynomial Expansion Perspective of Classification Loss Functions - """ - - def __init__( - self, - use_target_weight, - epsilon=2.0, - cls_lmda=0.05, - reduction="mean", - cls_cal=True, - **kwargs, - ): - super(CombinedPolyLoss, self).__init__() - self.cls_critetion = BinaryCrossEntropy(reduction=reduction) - self.use_target_weight = use_target_weight - self.epsilon = epsilon - self.cls_lmda = cls_lmda if cls_cal else 0 - self.reduction = reduction - self.cls_cal = cls_cal - - def forward(self, hm_outputs, hm_targets, cls_preds, cls_gts): - batch_size = hm_outputs.size(0) - n_classes = hm_outputs.size(1) - hm_h = hm_outputs.size(2) - hm_w = hm_outputs.size(3) - total_pixels = hm_h * hm_w - poly_loss = torch.zeros(batch_size, 1).cuda() - hm_outputs_ = _sigmoid(hm_outputs) - - for i in range(hm_h): - for j in range(hm_w): - ce = binary_cross_entropy( - hm_outputs_[:, :, i, j], - torch.unsqueeze(hm_targets[:, i, j], -1), - reduction="none", - ) - pt = hm_outputs_[:, :, i, j] - pt = torch.squeeze(pt) - pt = torch.where(hm_targets[:, i, j] > 0, pt, 1 - pt) - poly_loss += ce + self.epsilon * (1.0 - torch.unsqueeze(pt, -1)) - - if self.reduction == "mean": - poly_loss = poly_loss.sum() / total_pixels / batch_size - else: - poly_loss = poly_loss.sum() - loss_return = {} - loss_return["hm"] = poly_loss - - loss_cls = self.cls_critetion(cls_preds, cls_gts) - loss_return["cls"] = loss_cls * self.cls_lmda - return loss_return diff --git a/video/fake-stormer/model_code/models/__init__.py b/video/fake-stormer/model_code/models/__init__.py deleted file mode 100644 index 0e79a1504a6cc94e37644af9a91dc288e636974b..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/__init__.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8 -*- -from .builder import MODELS, build_model -from .networks.backbones import ( - ResNet3D, - SwinTransformer, - SwinTransformer3D, - TimeViT, - ViT, - Xception, -) -from .networks.backbones.arcface import ( - SimpleClassificationDF, -) -from .networks.common import * -from .networks.detectors import TopDownDetector -from .networks.heads.hm_simple_head import TopdownHeatmapSimpleHead -from .networks.mrsa_resnet import Bottleneck, PoseResNet, resnet_spec -from .networks.necks import EFPN3D -from .networks.pose_efficientNet import PoseEfficientNet -from .networks.pose_hrnet import PoseHighResolutionNet -from .utils import ( - freeze_backbone, - load_model, - load_pretrained, - n_param_model, - preset_model, - save_model, - unfreeze_backbone, -) - -__all__ = [ - "SimpleClassificationDF", - "PoseResNet", - "MODELS", - "build_model", - "load_pretrained", - "freeze_backbone", - "resnet_spec", - "n_param_model", - "load_model", - "save_model", - "unfreeze_backbone", - "Bottleneck", - "preset_model", - "PoseHighResolutionNet", - "Xception", - "PoseEfficientNet", - "TopDownDetector", - "ViT", - "TopdownHeatmapSimpleHead", - "TimeViT", - "SwinTransformer", - "ResNet3D", - "Xception", - "SwinTransformer3D", - "EFPN3D", -] diff --git a/video/fake-stormer/model_code/models/builder.py b/video/fake-stormer/model_code/models/builder.py deleted file mode 100644 index 47f605ab1e84b61a59e375de95516fded85915f5..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/builder.py +++ /dev/null @@ -1,46 +0,0 @@ -# -*- coding: utf-8 -*- -import os -import sys -from typing import Any, Dict, Optional - -if not os.getcwd() in sys.path: - sys.path.append(os.getcwd()) - -from register.register import Registry, build_from_cfg -from torch.nn import Sequential - - -def build_model_from_cfg(cfg, registry, default_args=None): - """Build a PyTorch model from config dict(s). Different from - ``build_from_cfg``, if cfg is a list, a ``nn.Sequential`` will be built. - Args: - cfg (dict, list[dict]): The config of modules, is is either a config - dict or a list of config dicts. If cfg is a list, a - the built modules will be wrapped with ``nn.Sequential``. - registry (:obj:`Registry`): A registry the module belongs to. - default_args (dict, optional): Default arguments to build the module. - Defaults to None. - Returns: - nn.Module: A built nn module. - """ - if isinstance(cfg, list): - modules = [build_from_cfg(cfg_, registry, default_args) for cfg_ in cfg] - return Sequential(*modules) - else: - return build_from_cfg(cfg, registry, default_args) - - -MODELS = Registry("model", build_func=build_model_from_cfg) -HEADS = MODELS -BACKBONES = MODELS -DETECTORS = MODELS -NECKS = MODELS - - -def build_model( - cfg: Dict, - model: Registry, - build_func=build_model_from_cfg, - default_args: Optional[Dict] = None, -) -> Any: - return build_func(cfg, model, default_args) diff --git a/video/fake-stormer/model_code/models/networks/backbones/__init__.py b/video/fake-stormer/model_code/models/networks/backbones/__init__.py deleted file mode 100644 index b012fa9f3f3374d9c242e1a568a7d87d729bd5e0..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/backbones/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- -from .resnet3d import ResNet3D -from .swin import SwinTransformer -from .swin3d import SwinTransformer3D -from .vit import TimeViT, ViT -from .xception import Xception - -__all__ = [ - "ViT", - "TimeViT", - "SwinTransformer", - "ResNet3D", - "Xception", - "SwinTransformer3D", -] diff --git a/video/fake-stormer/model_code/models/networks/backbones/arcface.py b/video/fake-stormer/model_code/models/networks/backbones/arcface.py deleted file mode 100644 index 33ee14e492c661bfa1abb38457bfc09874155ae2..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/backbones/arcface.py +++ /dev/null @@ -1,484 +0,0 @@ -# -*- coding: utf-8 -*- -import math -import os -from collections import namedtuple - -import torch -import torch.nn.functional as F -from torch.nn import ( - AdaptiveAvgPool2d, - AvgPool2d, - BatchNorm1d, - BatchNorm2d, - Conv2d, - Dropout, - Dropout2d, - Linear, - MaxPool2d, - Module, - Parameter, - PReLU, - ReLU, - Sequential, - Sigmoid, - Softmax, -) - -from ...builder import ( - BACKBONES, - HEADS, - MODELS, - build_model, -) - -################################## Original Arcface Model ############################################################# - - -class Flatten(Module): - def forward(self, input): - return input.view(input.size(0), -1) - - -def l2_norm(input, axis=1): - norm = torch.norm(input, 2, axis, True) - output = torch.div(input, norm) - return output - - -class SEModule(Module): - def __init__(self, channels, reduction): - super(SEModule, self).__init__() - self.avg_pool = AdaptiveAvgPool2d(1) - self.fc1 = Conv2d( - channels, channels // reduction, kernel_size=1, padding=0, bias=False - ) - self.relu = ReLU(inplace=True) - self.fc2 = Conv2d( - channels // reduction, channels, kernel_size=1, padding=0, bias=False - ) - self.sigmoid = Sigmoid() - - def forward(self, x): - module_input = x - x = self.avg_pool(x) - x = self.fc1(x) - x = self.relu(x) - x = self.fc2(x) - x = self.sigmoid(x) - return module_input * x - - -class bottleneck_IR(Module): - def __init__(self, in_channel, depth, stride): - super(bottleneck_IR, self).__init__() - if in_channel == depth: - self.shortcut_layer = MaxPool2d(1, stride) - else: - self.shortcut_layer = Sequential( - Conv2d(in_channel, depth, (1, 1), stride, bias=False), - BatchNorm2d(depth), - ) - self.res_layer = Sequential( - BatchNorm2d(in_channel), - Conv2d(in_channel, depth, (3, 3), (1, 1), 1, bias=False), - PReLU(depth), - Conv2d(depth, depth, (3, 3), stride, 1, bias=False), - BatchNorm2d(depth), - ) - - def forward(self, x): - shortcut = self.shortcut_layer(x) - res = self.res_layer(x) - return res + shortcut - - -class bottleneck_IR_SE(Module): - def __init__(self, in_channel, depth, stride): - super(bottleneck_IR_SE, self).__init__() - if in_channel == depth: - self.shortcut_layer = MaxPool2d(1, stride) - else: - self.shortcut_layer = Sequential( - Conv2d(in_channel, depth, (1, 1), stride, bias=False), - BatchNorm2d(depth), - ) - self.res_layer = Sequential( - BatchNorm2d(in_channel), - Conv2d(in_channel, depth, (3, 3), (1, 1), 1, bias=False), - PReLU(depth), - Conv2d(depth, depth, (3, 3), stride, 1, bias=False), - BatchNorm2d(depth), - SEModule(depth, 16), - ) - - def forward(self, x): - shortcut = self.shortcut_layer(x) - res = self.res_layer(x) - return res + shortcut - - -class Bottleneck(namedtuple("Block", ["in_channel", "depth", "stride"])): - """A named tuple describing a ResNet block.""" - - -def get_block(in_channel, depth, num_units, stride=2): - return [Bottleneck(in_channel, depth, stride)] + [ - Bottleneck(depth, depth, 1) for i in range(num_units - 1) - ] - - -def get_blocks(num_layers): - if num_layers == 50: - blocks = [ - get_block(in_channel=64, depth=64, num_units=3), - get_block(in_channel=64, depth=128, num_units=4), - get_block(in_channel=128, depth=256, num_units=14), - get_block(in_channel=256, depth=512, num_units=3), - ] - elif num_layers == 100: - blocks = [ - get_block(in_channel=64, depth=64, num_units=3), - get_block(in_channel=64, depth=128, num_units=13), - get_block(in_channel=128, depth=256, num_units=30), - get_block(in_channel=256, depth=512, num_units=3), - ] - elif num_layers == 152: - blocks = [ - get_block(in_channel=64, depth=64, num_units=3), - get_block(in_channel=64, depth=128, num_units=8), - get_block(in_channel=128, depth=256, num_units=36), - get_block(in_channel=256, depth=512, num_units=3), - ] - return blocks - - -@BACKBONES.register_module() -class ResNet(Module): - def __init__(self, num_layers=50, drop_ratio=0.6, mode="ir", **kwargs): - """ - Implementation for ResNet 50, 101, 152 with/out SE module - """ - super(ResNet, self).__init__() - assert num_layers in [50, 100, 152], "num_layers should be 50,100, or 152" - assert mode in ["ir", "ir_se"], "mode should be ir or ir_se" - blocks = get_blocks(num_layers) - if mode == "ir": - unit_module = bottleneck_IR - elif mode == "ir_se": - unit_module = bottleneck_IR_SE - self.input_layer = Sequential( - Conv2d(3, 64, (3, 3), 1, 1, bias=False), BatchNorm2d(64), PReLU(64) - ) - self.output_layer = Sequential( - BatchNorm2d(512), - Dropout(drop_ratio), - Flatten(), - Linear(512 * 7 * 7, 512), - BatchNorm1d(512), - ) - modules = [] - for block in blocks: - for bottleneck in block: - modules.append( - unit_module( - bottleneck.in_channel, bottleneck.depth, bottleneck.stride - ) - ) - self.body = Sequential(*modules) - - def forward(self, x): - x = self.input_layer(x) - x = self.body(x) - x = self.output_layer(x) - x = l2_norm(x) - return x - - -@HEADS.register_module() -class SimpleClassificationHead(Module): - def __init__(self, drop_ratio=0.6, in_planes=512, **kwargs): - super(SimpleClassificationHead, self).__init__() - self.classification_head = Sequential( - Dropout(drop_ratio), - Linear(in_planes, 256), - BatchNorm1d(256), - Dropout(drop_ratio), - Linear(256, 128), - BatchNorm1d(128), - Dropout(drop_ratio), - Linear(128, 64), - BatchNorm1d(64), - Dropout(drop_ratio), - Linear(64, 32), - BatchNorm1d(32), - # Dropout(drop_ratio), - Linear(32, 1), - Sigmoid(), - ) - - def forward(self, x): - x = self.classification_head(x) - return x - - -@MODELS.register_module() -class SimpleClassificationDF(Module): - def __init__(self, cfg: dict, **kwargs): - super(SimpleClassificationDF, self).__init__() - assert "backbone" in cfg, "Config for Backbones is mandatory!" - assert "head" in cfg, "Config for Heads is mandatory!" - - self.backbone = BACKBONES.get(cfg.backbone.type)(**cfg.backbone) - self.head = HEADS.get(cfg.head.type)(**cfg.head) - self.model = Sequential(*[self.backbone, self.head]) - - def forward(self, x): - x = self.model(x) - return x - - -################################## MobileFaceNet ############################################################# - - -class Conv_block(Module): - def __init__( - self, in_c, out_c, kernel=(1, 1), stride=(1, 1), padding=(0, 0), groups=1 - ): - super(Conv_block, self).__init__() - self.conv = Conv2d( - in_c, - out_channels=out_c, - kernel_size=kernel, - groups=groups, - stride=stride, - padding=padding, - bias=False, - ) - self.bn = BatchNorm2d(out_c) - self.prelu = PReLU(out_c) - - def forward(self, x): - x = self.conv(x) - x = self.bn(x) - x = self.prelu(x) - return x - - -class Linear_block(Module): - def __init__( - self, in_c, out_c, kernel=(1, 1), stride=(1, 1), padding=(0, 0), groups=1 - ): - super(Linear_block, self).__init__() - self.conv = Conv2d( - in_c, - out_channels=out_c, - kernel_size=kernel, - groups=groups, - stride=stride, - padding=padding, - bias=False, - ) - self.bn = BatchNorm2d(out_c) - - def forward(self, x): - x = self.conv(x) - x = self.bn(x) - return x - - -class Depth_Wise(Module): - def __init__( - self, - in_c, - out_c, - residual=False, - kernel=(3, 3), - stride=(2, 2), - padding=(1, 1), - groups=1, - ): - super(Depth_Wise, self).__init__() - self.conv = Conv_block( - in_c, out_c=groups, kernel=(1, 1), padding=(0, 0), stride=(1, 1) - ) - self.conv_dw = Conv_block( - groups, groups, groups=groups, kernel=kernel, padding=padding, stride=stride - ) - self.project = Linear_block( - groups, out_c, kernel=(1, 1), padding=(0, 0), stride=(1, 1) - ) - self.residual = residual - - def forward(self, x): - if self.residual: - short_cut = x - x = self.conv(x) - x = self.conv_dw(x) - x = self.project(x) - if self.residual: - output = short_cut + x - else: - output = x - return output - - -class Residual(Module): - def __init__( - self, c, num_block, groups, kernel=(3, 3), stride=(1, 1), padding=(1, 1) - ): - super(Residual, self).__init__() - modules = [] - for _ in range(num_block): - modules.append( - Depth_Wise( - c, - c, - residual=True, - kernel=kernel, - padding=padding, - stride=stride, - groups=groups, - ) - ) - self.model = Sequential(*modules) - - def forward(self, x): - return self.model(x) - - -class MobileFaceNet(Module): - def __init__(self, embedding_size): - super(MobileFaceNet, self).__init__() - self.conv1 = Conv_block(3, 64, kernel=(3, 3), stride=(2, 2), padding=(1, 1)) - self.conv2_dw = Conv_block( - 64, 64, kernel=(3, 3), stride=(1, 1), padding=(1, 1), groups=64 - ) - self.conv_23 = Depth_Wise( - 64, 64, kernel=(3, 3), stride=(2, 2), padding=(1, 1), groups=128 - ) - self.conv_3 = Residual( - 64, num_block=4, groups=128, kernel=(3, 3), stride=(1, 1), padding=(1, 1) - ) - self.conv_34 = Depth_Wise( - 64, 128, kernel=(3, 3), stride=(2, 2), padding=(1, 1), groups=256 - ) - self.conv_4 = Residual( - 128, num_block=6, groups=256, kernel=(3, 3), stride=(1, 1), padding=(1, 1) - ) - self.conv_45 = Depth_Wise( - 128, 128, kernel=(3, 3), stride=(2, 2), padding=(1, 1), groups=512 - ) - self.conv_5 = Residual( - 128, num_block=2, groups=256, kernel=(3, 3), stride=(1, 1), padding=(1, 1) - ) - self.conv_6_sep = Conv_block( - 128, 512, kernel=(1, 1), stride=(1, 1), padding=(0, 0) - ) - self.conv_6_dw = Linear_block( - 512, 512, groups=512, kernel=(7, 7), stride=(1, 1), padding=(0, 0) - ) - self.conv_6_flatten = Flatten() - self.linear = Linear(512, embedding_size, bias=False) - self.bn = BatchNorm1d(embedding_size) - - def forward(self, x): - out = self.conv1(x) - out = self.conv2_dw(out) - out = self.conv_23(out) - out = self.conv_3(out) - out = self.conv_34(out) - out = self.conv_4(out) - out = self.conv_45(out) - out = self.conv_5(out) - out = self.conv_6_sep(out) - out = self.conv_6_dw(out) - out = self.conv_6_flatten(out) - out = self.linear(out) - out = self.bn(out) - - return l2_norm(out) - - -################################## Arcface head ############################################################# - - -class Arcface(Module): - # implementation of additive margin softmax loss in https://arxiv.org/abs/1801.05599 - def __init__(self, embedding_size=512, classnum=51332, s=64.0, m=0.5): - super(Arcface, self).__init__() - self.classnum = classnum - self.kernel = Parameter(torch.Tensor(embedding_size, classnum)) - # initial kernel - self.kernel.data.uniform_(-1, 1).renorm_(2, 1, 1e-5).mul_(1e5) - self.m = m # the margin value, default is 0.5 - self.s = s # scalar value default is 64, see normface https://arxiv.org/abs/1704.06369 - self.cos_m = math.cos(m) - self.sin_m = math.sin(m) - self.mm = self.sin_m * m # issue 1 - self.threshold = math.cos(math.pi - m) - - def forward(self, embbedings, label): - # weights norm - nB = len(embbedings) - kernel_norm = l2_norm(self.kernel, axis=0) - # cos(theta+m) - cos_theta = torch.mm(embbedings, kernel_norm) - # output = torch.mm(embbedings,kernel_norm) - cos_theta = cos_theta.clamp(-1, 1) # for numerical stability - cos_theta_2 = torch.pow(cos_theta, 2) - sin_theta_2 = 1 - cos_theta_2 - sin_theta = torch.sqrt(sin_theta_2) - cos_theta_m = cos_theta * self.cos_m - sin_theta * self.sin_m - # this condition controls the theta+m should in range [0, pi] - # 0<=theta+m<=pi - # -m<=theta<=pi-m - cond_v = cos_theta - self.threshold - cond_mask = cond_v <= 0 - keep_val = cos_theta - self.mm # when theta not in [0,pi], use cosface instead - cos_theta_m[cond_mask] = keep_val[cond_mask] - output = ( - cos_theta * 1.0 - ) # a little bit hacky way to prevent in_place operation on cos_theta - idx_ = torch.arange(0, nB, dtype=torch.long) - output[idx_, label] = cos_theta_m[idx_, label] - output *= ( - self.s - ) # scale up in order to make softmax work, first introduced in normface - return output - - -################################## Cosface head ############################################################# - - -class Am_softmax(Module): - # implementation of additive margin softmax loss in https://arxiv.org/abs/1801.05599 - def __init__(self, embedding_size=512, classnum=51332): - super(Am_softmax, self).__init__() - self.classnum = classnum - self.kernel = Parameter(torch.Tensor(embedding_size, classnum)) - # initial kernel - self.kernel.data.uniform_(-1, 1).renorm_(2, 1, 1e-5).mul_(1e5) - self.m = 0.35 # additive margin recommended by the paper - self.s = 30.0 # see normface https://arxiv.org/abs/1704.06369 - - def forward(self, embbedings, label): - kernel_norm = l2_norm(self.kernel, axis=0) - cos_theta = torch.mm(embbedings, kernel_norm) - cos_theta = cos_theta.clamp(-1, 1) # for numerical stability - phi = cos_theta - self.m - label = label.view(-1, 1) # size=(B,1) - index = cos_theta.data * 0.0 # size=(B,Classnum) - index.scatter_(1, label.data.view(-1, 1), 1) - index = index.byte() - output = cos_theta * 1.0 - output[index] = phi[index] # only change the correct predicted output - output *= ( - self.s - ) # scale up in order to make softmax work, first introduced in normface - return output - - -if __name__ == "__main__": - cfg = dict(num_layers=50, drop_ratio=0.6, mode="ir", type="Backbone") - backbone = MODELS.build(cfg) - print(backbone) diff --git a/video/fake-stormer/model_code/models/networks/backbones/base.py b/video/fake-stormer/model_code/models/networks/backbones/base.py deleted file mode 100644 index 1154ff8b3d6d1e9a51eac290ad8186115d0be3b3..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/backbones/base.py +++ /dev/null @@ -1,50 +0,0 @@ -# Copyright (c) OpenMMLab. All rights reserved. -import logging -from abc import ABCMeta, abstractmethod - -import torch.nn as nn -from models.utils import load_checkpoint - - -class BaseBackbone(nn.Module, metaclass=ABCMeta): - """Base backbone. - - This class defines the basic functions of a backbone. Any backbone that - inherits this class should at least define its own `forward` function. - """ - - def init_weights(self, pretrained=None, patch_padding="pad", part_features=None): - """Init backbone weights. - - Args: - pretrained (str | None): If pretrained is a string, then it - initializes backbone weights by loading the pretrained - checkpoint. If pretrained is None, then it follows default - initializer or customized initializer in subclasses. - """ - if isinstance(pretrained, str): - logger = logging.getLogger() - load_checkpoint( - self, - pretrained, - strict=False, - logger=logger, - patch_padding=patch_padding, - part_features=part_features, - ) - elif pretrained is None: - # use default initializer or customized initializer in subclasses - pass - else: - raise TypeError( - "pretrained must be a str or None." f" But received {type(pretrained)}." - ) - - @abstractmethod - def forward(self, x): - """Forward function. - - Args: - x (Tensor | tuple[Tensor]): x could be a torch.Tensor or a tuple of - torch.Tensor, containing input data for forward computation. - """ diff --git a/video/fake-stormer/model_code/models/networks/backbones/efficientNet.py b/video/fake-stormer/model_code/models/networks/backbones/efficientNet.py deleted file mode 100644 index f38e265d058dfa8ca82998fcdf26451a591c55b8..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/backbones/efficientNet.py +++ /dev/null @@ -1,592 +0,0 @@ -# -*- coding: utf-8 -*- -import collections -import math -import re -from functools import partial - -import torch -import torch.nn as nn -from torch.nn import functional as F -from torch.utils import model_zoo - -# Parameters for the entire model (stem, all blocks, and head) -GlobalParams = collections.namedtuple( - "GlobalParams", - [ - "width_coefficient", - "depth_coefficient", - "image_size", - "dropout_rate", - "num_classes", - "batch_norm_momentum", - "batch_norm_epsilon", - "drop_connect_rate", - "depth_divisor", - "min_depth", - "include_top", - "include_hm_decoder", - "head_conv", - "heads", - "num_layers", - "INIT_WEIGHTS", - "use_c2", - "use_c3", - "use_c4", - "use_c51", - "efpn", - "se_layer", - "tfpn", - "norm_c2", - ], -) - -# Parameters for an individual model block -BlockArgs = collections.namedtuple( - "BlockArgs", - [ - "num_repeat", - "kernel_size", - "stride", - "expand_ratio", - "input_filters", - "output_filters", - "se_ratio", - "id_skip", - ], -) - -# Set GlobalParams and BlockArgs's defaults -GlobalParams.__new__.__defaults__ = (None,) * len(GlobalParams._fields) -BlockArgs.__new__.__defaults__ = (None,) * len(BlockArgs._fields) - - -# Swish activation function -if hasattr(nn, "SiLU"): - Swish = nn.SiLU -else: - # For compatibility with old PyTorch versions - class Swish(nn.Module): - def forward(self, x): - return x * torch.sigmoid(x) - - -def round_filters(filters, global_params): - """Calculate and round number of filters based on width multiplier. - Use width_coefficient, depth_divisor and min_depth of global_params. - Args: - filters (int): Filters number to be calculated. - global_params (namedtuple): Global params of the model. - Returns: - new_filters: New filters number after calculating. - """ - multiplier = global_params.width_coefficient - if not multiplier: - return filters - # TODO: modify the params names. - # maybe the names (width_divisor,min_width) - # are more suitable than (depth_divisor,min_depth). - divisor = global_params.depth_divisor - min_depth = global_params.min_depth - filters *= multiplier - min_depth = min_depth or divisor # pay attention to this line when using min_depth - # follow the formula transferred from official TensorFlow implementation - new_filters = max(min_depth, int(filters + divisor / 2) // divisor * divisor) - if new_filters < 0.9 * filters: # prevent rounding by more than 10% - new_filters += divisor - return int(new_filters) - - -def round_repeats(repeats, global_params): - """Calculate module's repeat number of a block based on depth multiplier. - Use depth_coefficient of global_params. - Args: - repeats (int): num_repeat to be calculated. - global_params (namedtuple): Global params of the model. - Returns: - new repeat: New repeat number after calculating. - """ - multiplier = global_params.depth_coefficient - if not multiplier: - return repeats - # follow the formula transferred from official TensorFlow implementation - return int(math.ceil(multiplier * repeats)) - - -def drop_connect(inputs, p, training): - """Drop connect. - Args: - input (tensor: BCWH): Input of this structure. - p (float: 0.0~1.0): Probability of drop connection. - training (bool): The running mode. - Returns: - output: Output after drop connection. - """ - assert 0 <= p <= 1, "p must be in range of [0,1]" - - if not training: - return inputs - - batch_size = inputs.shape[0] - keep_prob = 1 - p - - # generate binary_tensor mask according to probability (p for 0, 1-p for 1) - random_tensor = keep_prob - random_tensor += torch.rand( - [batch_size, 1, 1, 1], dtype=inputs.dtype, device=inputs.device - ) - binary_tensor = torch.floor(random_tensor) - - output = inputs / keep_prob * binary_tensor - return output - - -def get_same_padding_conv2d(image_size=None): - """Chooses static padding if you have specified an image size, and dynamic padding otherwise. - Static padding is necessary for ONNX exporting of models. - Args: - image_size (int or tuple): Size of the image. - Returns: - Conv2dDynamicSamePadding or Conv2dStaticSamePadding. - """ - if image_size is None: - return Conv2dDynamicSamePadding - else: - return partial(Conv2dStaticSamePadding, image_size=image_size) - - -class Conv2dDynamicSamePadding(nn.Conv2d): - """2D Convolutions like TensorFlow, for a dynamic image size. - The padding is operated in forward function by calculating dynamically. - """ - - # Tips for 'SAME' mode padding. - # Given the following: - # i: width or height - # s: stride - # k: kernel size - # d: dilation - # p: padding - # Output after Conv2d: - # o = floor((i+p-((k-1)*d+1))/s+1) - # If o equals i, i = floor((i+p-((k-1)*d+1))/s+1), - # => p = (i-1)*s+((k-1)*d+1)-i - - def __init__( - self, - in_channels, - out_channels, - kernel_size, - stride=1, - dilation=1, - groups=1, - bias=True, - ): - super().__init__( - in_channels, out_channels, kernel_size, stride, 0, dilation, groups, bias - ) - self.stride = self.stride if len(self.stride) == 2 else [self.stride[0]] * 2 - - def forward(self, x): - ih, iw = x.size()[-2:] - kh, kw = self.weight.size()[-2:] - sh, sw = self.stride - oh, ow = math.ceil(ih / sh), math.ceil( - iw / sw - ) # change the output size according to stride ! ! ! - pad_h = max((oh - 1) * self.stride[0] + (kh - 1) * self.dilation[0] + 1 - ih, 0) - pad_w = max((ow - 1) * self.stride[1] + (kw - 1) * self.dilation[1] + 1 - iw, 0) - if pad_h > 0 or pad_w > 0: - x = F.pad( - x, [pad_w // 2, pad_w - pad_w // 2, pad_h // 2, pad_h - pad_h // 2] - ) - return F.conv2d( - x, - self.weight, - self.bias, - self.stride, - self.padding, - self.dilation, - self.groups, - ) - - -class Conv2dStaticSamePadding(nn.Conv2d): - """2D Convolutions like TensorFlow's 'SAME' mode, with the given input image size. - The padding mudule is calculated in construction function, then used in forward. - """ - - # With the same calculation as Conv2dDynamicSamePadding - - def __init__( - self, - in_channels, - out_channels, - kernel_size, - stride=1, - image_size=None, - **kwargs, - ): - super().__init__(in_channels, out_channels, kernel_size, stride, **kwargs) - self.stride = self.stride if len(self.stride) == 2 else [self.stride[0]] * 2 - - # Calculate padding based on image size and save it - assert image_size is not None - ih, iw = (image_size, image_size) if isinstance(image_size, int) else image_size - kh, kw = self.weight.size()[-2:] - sh, sw = self.stride - oh, ow = math.ceil(ih / sh), math.ceil(iw / sw) - pad_h = max((oh - 1) * self.stride[0] + (kh - 1) * self.dilation[0] + 1 - ih, 0) - pad_w = max((ow - 1) * self.stride[1] + (kw - 1) * self.dilation[1] + 1 - iw, 0) - if pad_h > 0 or pad_w > 0: - self.static_padding = nn.ZeroPad2d( - (pad_w // 2, pad_w - pad_w // 2, pad_h // 2, pad_h - pad_h // 2) - ) - else: - self.static_padding = nn.Identity() - - def forward(self, x): - x = self.static_padding(x) - x = F.conv2d( - x, - self.weight, - self.bias, - self.stride, - self.padding, - self.dilation, - self.groups, - ) - return x - - -def get_model_params(model_name, override_params): - """Get the block args and global params for a given model name. - Args: - model_name (str): Model's name. - override_params (dict): A dict to modify global_params. - Returns: - blocks_args, global_params - """ - if model_name.startswith("efficientnet"): - w, d, s, p = efficientnet_params(model_name) - # note: all models have drop connect rate = 0.2 - blocks_args, global_params = efficientnet( - width_coefficient=w, depth_coefficient=d, dropout_rate=p, image_size=s - ) - else: - raise NotImplementedError( - "model name is not pre-defined: {}".format(model_name) - ) - if override_params: - # ValueError will be raised here if override_params has fields not included in global_params. - global_params = global_params._replace(**override_params) - return blocks_args, global_params - - -def efficientnet_params(model_name): - """Map EfficientNet model name to parameter coefficients. - Args: - model_name (str): Model name to be queried. - Returns: - params_dict[model_name]: A (width,depth,res,dropout) tuple. - """ - params_dict = { - # Coefficients: width,depth,res,dropout - "efficientnet-b0": (1.0, 1.0, 224, 0.2), - "efficientnet-b1": (1.0, 1.1, 240, 0.2), - "efficientnet-b2": (1.1, 1.2, 260, 0.3), - "efficientnet-b3": (1.2, 1.4, 300, 0.3), - "efficientnet-b4": (1.4, 1.8, 380, 0.4), - "efficientnet-b5": (1.6, 2.2, 456, 0.4), - "efficientnet-b6": (1.8, 2.6, 528, 0.5), - "efficientnet-b7": (2.0, 3.1, 600, 0.5), - "efficientnet-b8": (2.2, 3.6, 672, 0.5), - "efficientnet-l2": (4.3, 5.3, 800, 0.5), - } - return params_dict[model_name] - - -def efficientnet( - width_coefficient=None, - depth_coefficient=None, - image_size=None, - dropout_rate=0.2, - drop_connect_rate=0.2, - num_classes=1000, - include_top=True, - include_hm_decoder=False, - head_conv=None, - heads=None, - use_c2=False, - use_c3=False, - use_c4=False, - use_c51=False, - num_layers=None, - INIT_WEIGHTS=None, - efpn=False, - se_layer=False, - tfpn=False, - norm_c2=False, -): - """Create BlockArgs and GlobalParams for efficientnet model. - Args: - width_coefficient (float) - depth_coefficient (float) - image_size (int) - dropout_rate (float) - drop_connect_rate (float) - num_classes (int) - Meaning as the name suggests. - Returns: - blocks_args, global_params. - """ - - # Blocks args for the whole model(efficientnet-b0 by default) - # It will be modified in the construction of EfficientNet Class according to model - blocks_args = [ - "r1_k3_s11_e1_i32_o16_se0.25", - "r2_k3_s22_e6_i16_o24_se0.25", - "r2_k5_s22_e6_i24_o40_se0.25", - "r3_k3_s22_e6_i40_o80_se0.25", - "r3_k5_s11_e6_i80_o112_se0.25", - "r4_k5_s22_e6_i112_o192_se0.25", - "r1_k3_s11_e6_i192_o320_se0.25", - ] - blocks_args = BlockDecoder.decode(blocks_args) - - global_params = GlobalParams( - width_coefficient=width_coefficient, - depth_coefficient=depth_coefficient, - image_size=image_size, - dropout_rate=dropout_rate, - num_classes=num_classes, - batch_norm_momentum=0.99, - batch_norm_epsilon=1e-3, - drop_connect_rate=drop_connect_rate, - depth_divisor=8, - min_depth=None, - include_top=include_top, - include_hm_decoder=include_hm_decoder, - head_conv=head_conv, - heads=heads, - use_c2=use_c2, - use_c3=use_c3, - use_c4=use_c4, - use_c51=use_c51, - efpn=efpn, - tfpn=tfpn, - se_layer=se_layer, - num_layers=num_layers, - norm_c2=norm_c2, - INIT_WEIGHTS=INIT_WEIGHTS, - ) - - return blocks_args, global_params - - -class BlockDecoder(object): - """Block Decoder for readability, - straight from the official TensorFlow repository. - """ - - @staticmethod - def _decode_block_string(block_string): - """Get a block through a string notation of arguments. - Args: - block_string (str): A string notation of arguments. - Examples: 'r1_k3_s11_e1_i32_o16_se0.25_noskip'. - Returns: - BlockArgs: The namedtuple defined at the top of this file. - """ - assert isinstance(block_string, str) - - ops = block_string.split("_") - options = {} - for op in ops: - splits = re.split(r"(\d.*)", op) - if len(splits) >= 2: - key, value = splits[:2] - options[key] = value - - # Check stride - assert ("s" in options and len(options["s"]) == 1) or ( - len(options["s"]) == 2 and options["s"][0] == options["s"][1] - ) - - return BlockArgs( - num_repeat=int(options["r"]), - kernel_size=int(options["k"]), - stride=[int(options["s"][0])], - expand_ratio=int(options["e"]), - input_filters=int(options["i"]), - output_filters=int(options["o"]), - se_ratio=float(options["se"]) if "se" in options else None, - id_skip=("noskip" not in block_string), - ) - - @staticmethod - def _encode_block_string(block): - """Encode a block to a string. - Args: - block (namedtuple): A BlockArgs type argument. - Returns: - block_string: A String form of BlockArgs. - """ - args = [ - "r%d" % block.num_repeat, - "k%d" % block.kernel_size, - "s%d%d" % (block.strides[0], block.strides[1]), - "e%s" % block.expand_ratio, - "i%d" % block.input_filters, - "o%d" % block.output_filters, - ] - if 0 < block.se_ratio <= 1: - args.append("se%s" % block.se_ratio) - if block.id_skip is False: - args.append("noskip") - return "_".join(args) - - @staticmethod - def decode(string_list): - """Decode a list of string notations to specify blocks inside the network. - Args: - string_list (list[str]): A list of strings, each string is a notation of block. - Returns: - blocks_args: A list of BlockArgs namedtuples of block args. - """ - assert isinstance(string_list, list) - blocks_args = [] - for block_string in string_list: - blocks_args.append(BlockDecoder._decode_block_string(block_string)) - return blocks_args - - @staticmethod - def encode(blocks_args): - """Encode a list of BlockArgs to a list of strings. - Args: - blocks_args (list[namedtuples]): A list of BlockArgs namedtuples of block args. - Returns: - block_strings: A list of strings, each string is a notation of block. - """ - block_strings = [] - for block in blocks_args: - block_strings.append(BlockDecoder._encode_block_string(block)) - return block_strings - - -class SwishImplementation(torch.autograd.Function): - @staticmethod - def forward(ctx, i): - result = i * torch.sigmoid(i) - ctx.save_for_backward(i) - return result - - @staticmethod - def backward(ctx, grad_output): - i = ctx.saved_tensors[0] - sigmoid_i = torch.sigmoid(i) - return grad_output * (sigmoid_i * (1 + i * (1 - sigmoid_i))) - - -def get_width_and_height_from_size(x): - """Obtain height and width from x. - Args: - x (int, tuple or list): Data size. - Returns: - size: A tuple or list (H,W). - """ - if isinstance(x, int): - return x, x - if isinstance(x, list) or isinstance(x, tuple): - return x - else: - raise TypeError() - - -def calculate_output_image_size(input_image_size, stride): - """Calculates the output image size when using Conv2dSamePadding with a stride. - Necessary for static padding. Thanks to mannatsingh for pointing this out. - Args: - input_image_size (int, tuple or list): Size of input image. - stride (int, tuple or list): Conv2d operation's stride. - Returns: - output_image_size: A list [H,W]. - """ - if input_image_size is None: - return None - image_height, image_width = get_width_and_height_from_size(input_image_size) - stride = stride if isinstance(stride, int) else stride[0] - image_height = int(math.ceil(image_height / stride)) - image_width = int(math.ceil(image_width / stride)) - return [image_height, image_width] - - -class MemoryEfficientSwish(nn.Module): - def forward(self, x): - return SwishImplementation.apply(x) - - -url_map_advprop = { - "efficientnet-b0": "https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b0-b64d5a18.pth", - "efficientnet-b1": "https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b1-0f3ce85a.pth", - "efficientnet-b2": "https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b2-6e9d97e5.pth", - "efficientnet-b3": "https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b3-cdd7c0f4.pth", - "efficientnet-b4": "https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b4-44fb3a87.pth", - "efficientnet-b5": "https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b5-86493f6b.pth", - "efficientnet-b6": "https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b6-ac80338e.pth", - "efficientnet-b7": "https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b7-4652b6dd.pth", - "efficientnet-b8": "https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b8-22a8fe65.pth", -} - - -url_map = { - "efficientnet-b0": "https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b0-355c32eb.pth", - "efficientnet-b1": "https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b1-f1951068.pth", - "efficientnet-b2": "https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b2-8bb594d6.pth", - "efficientnet-b3": "https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b3-5fb5a3c3.pth", - "efficientnet-b4": "https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b4-6ed6700e.pth", - "efficientnet-b5": "https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b5-b6417697.pth", - "efficientnet-b6": "https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b6-c76e70fd.pth", - "efficientnet-b7": "https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b7-dcc49843.pth", -} - - -def load_pretrained_weights( - model, model_name, weights_path=None, load_fc=True, advprop=False, verbose=True -): - """Loads pretrained weights from weights path or download using url. - Args: - model (Module): The whole model of efficientnet. - model_name (str): Model name of efficientnet. - weights_path (None or str): - str: path to pretrained weights file on the local disk. - None: use pretrained weights downloaded from the Internet. - load_fc (bool): Whether to load pretrained weights for fc layer at the end of the model. - advprop (bool): Whether to load pretrained weights - trained with advprop (valid when weights_path is None). - """ - if isinstance(weights_path, str): - state_dict = torch.load(weights_path, map_location=torch.device("cpu")) - else: - # AutoAugment or Advprop (different preprocessing) - url_map_ = url_map_advprop if advprop else url_map - state_dict = model_zoo.load_url(url_map_[model_name]) - - if load_fc: - ret = model.load_state_dict(state_dict, strict=False) - assert ( - not ret.missing_keys - ), "Missing keys when loading pretrained weights: {}".format(ret.missing_keys) - else: - state_dict.pop("_fc.weight") - state_dict.pop("_fc.bias") - ret = model.load_state_dict(state_dict, strict=False) - - # if len(ret.missing_keys): - # assert set(ret.missing_keys) == set( - # ['_fc.weight', '_fc.bias']), 'Missing keys when loading pretrained weights: {}'.format(ret.missing_keys) - assert ( - not ret.unexpected_keys - ), "Missing keys when loading pretrained weights: {}".format(ret.unexpected_keys) - - if verbose: - print("Loaded pretrained weights for {}".format(model_name)) diff --git a/video/fake-stormer/model_code/models/networks/backbones/resnet3d.py b/video/fake-stormer/model_code/models/networks/backbones/resnet3d.py deleted file mode 100644 index 7bb9055de832389eff045026729d1f0f152995e6..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/backbones/resnet3d.py +++ /dev/null @@ -1,296 +0,0 @@ -# -*- coding:utf-8 -*- -import os -import sys - -if not (os.getcwd()) in sys.path: - sys.path.append(os.getcwd()) -import math -from functools import partial - -import torch -import torch.nn as nn -import torch.nn.functional as F - -from ...builder import BACKBONES -from .base import BaseBackbone - - -def get_inplanes(): - return [64, 128, 256, 512] - - -def conv3x3x3(in_planes, out_planes, stride=1): - return nn.Conv3d( - in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=False - ) - - -def conv1x1x1(in_planes, out_planes, stride=1): - return nn.Conv3d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) - - -class BasicBlock(nn.Module): - expansion = 1 - - def __init__(self, in_planes, planes, stride=1, downsample=None): - super().__init__() - - self.conv1 = conv3x3x3(in_planes, planes, stride) - self.bn1 = nn.BatchNorm3d(planes) - self.relu = nn.ReLU(inplace=True) - self.conv2 = conv3x3x3(planes, planes) - self.bn2 = nn.BatchNorm3d(planes) - self.downsample = downsample - self.stride = stride - - def forward(self, x): - residual = x - - out = self.conv1(x) - out = self.bn1(out) - out = self.relu(out) - - out = self.conv2(out) - out = self.bn2(out) - - if self.downsample is not None: - residual = self.downsample(x) - - out += residual - out = self.relu(out) - - return out - - @staticmethod - def __repr__(): - return "BasicBlock" - - -class Bottleneck(nn.Module): - expansion = 4 - - def __init__(self, in_planes, planes, stride=1, downsample=None): - super().__init__() - - self.conv1 = conv1x1x1(in_planes, planes) - self.bn1 = nn.BatchNorm3d(planes) - self.conv2 = conv3x3x3(planes, planes, stride) - self.bn2 = nn.BatchNorm3d(planes) - self.conv3 = conv1x1x1(planes, planes * self.expansion) - self.bn3 = nn.BatchNorm3d(planes * self.expansion) - self.relu = nn.ReLU(inplace=True) - self.downsample = downsample - self.stride = stride - - def forward(self, x): - residual = x - - out = self.conv1(x) - out = self.bn1(out) - out = self.relu(out) - - out = self.conv2(out) - out = self.bn2(out) - out = self.relu(out) - - out = self.conv3(out) - out = self.bn3(out) - - if self.downsample is not None: - residual = self.downsample(x) - - out += residual - out = self.relu(out) - - return out - - @staticmethod - def __repr__(): - return "Bottleneck" - - -@BACKBONES.register_module() -class ResNet3D(BaseBackbone): - def __init__( - self, - block, - layers, - block_inplanes, - n_input_channels=3, - conv1_t_size=7, - conv1_t_stride=1, - no_max_pool=False, - shortcut_type="B", - widen_factor=1.0, - n_classes=400, - do_cls=False, - dropout_rate=0.25, - ): - super().__init__() - - # Convert Cls name into Cls Object - if isinstance(block, str): - for bl in [BasicBlock, Bottleneck]: - if block == bl.__repr__(): - block = bl - - block_inplanes = [int(x * widen_factor) for x in block_inplanes] - - self.in_planes = block_inplanes[0] - self.no_max_pool = no_max_pool - - self.conv1 = nn.Conv3d( - n_input_channels, - self.in_planes, - kernel_size=(conv1_t_size, 7, 7), - stride=(conv1_t_stride, 2, 2), - padding=(conv1_t_size // 2, 3, 3), - bias=False, - ) - self.bn1 = nn.BatchNorm3d(self.in_planes) - self.relu = nn.ReLU(inplace=True) - self.maxpool = nn.MaxPool3d(kernel_size=3, stride=2, padding=1) - self.layer1 = self._make_layer( - block, block_inplanes[0], layers[0], shortcut_type - ) - self.drop_layer1 = nn.Dropout(dropout_rate) - self.layer2 = self._make_layer( - block, block_inplanes[1], layers[1], shortcut_type, stride=2 - ) - self.drop_layer2 = nn.Dropout(dropout_rate) - self.layer3 = self._make_layer( - block, block_inplanes[2], layers[2], shortcut_type, stride=2 - ) - self.drop_layer3 = nn.Dropout(dropout_rate) - self.layer4 = self._make_layer( - block, block_inplanes[3], layers[3], shortcut_type, stride=2 - ) - self.drop_layer4 = nn.Dropout(dropout_rate) - - self.avgpool = nn.AdaptiveAvgPool3d((1, 1, 1)) - self.do_cls = do_cls - if self.do_cls: - self.fc = nn.Linear(block_inplanes[3] * block.expansion, n_classes) - - def _downsample_basic_block(self, x, planes, stride): - out = F.avg_pool3d(x, kernel_size=1, stride=stride) - zero_pads = torch.zeros( - out.size(0), planes - out.size(1), out.size(2), out.size(3), out.size(4) - ) - if isinstance(out.data, torch.cuda.FloatTensor): - zero_pads = zero_pads.cuda() - - out = torch.cat([out.data, zero_pads], dim=1) - - return out - - def _make_layer(self, block, planes, blocks, shortcut_type, stride=1): - downsample = None - if stride != 1 or self.in_planes != planes * block.expansion: - if shortcut_type == "A": - downsample = partial( - self._downsample_basic_block, - planes=planes * block.expansion, - stride=stride, - ) - else: - downsample = nn.Sequential( - conv1x1x1(self.in_planes, planes * block.expansion, stride), - nn.BatchNorm3d(planes * block.expansion), - ) - - layers = [] - layers.append( - block( - in_planes=self.in_planes, - planes=planes, - stride=stride, - downsample=downsample, - ) - ) - self.in_planes = planes * block.expansion - for i in range(1, blocks): - layers.append(block(self.in_planes, planes)) - - return nn.Sequential(*layers) - - def forward(self, x): - outputs = [] - x = self.conv1(x) - x = self.bn1(x) - x = self.relu(x) - if not self.no_max_pool: - x = self.maxpool(x) - - x1 = self.layer1(x) # 256x16x56x56 - x2 = self.layer2(x1) # 512x8x28x28 - x3 = self.layer3(x2) # 1024x4x14x14 - x4 = self.layer4(x3) # 2048x2x7x7 - - if self.do_cls: - x_avg = self.avgpool(x4) - x = x_avg.view(x_avg.size(0), -1).unsqueeze(1) - x = self.fc(x) - - res = {} - res["embed"] = x4 - - x1 = self.drop_layer1(x1) - outputs.append(x1) - x2 = self.drop_layer2(x2) - outputs.append(x2) - x3 = self.drop_layer3(x3) - outputs.append(x3) - outputs.append(x4) - res["outputs"] = outputs - - return res - - def init_weights(self, pretrained=None): - if pretrained is not None: - super().init_weights(pretrained=pretrained) - else: - for m in self.modules(): - if isinstance(m, nn.Conv3d): - nn.init.kaiming_normal_( - m.weight, mode="fan_out", nonlinearity="relu" - ) - elif isinstance(m, nn.BatchNorm3d): - nn.init.constant_(m.weight, 1) - nn.init.constant_(m.bias, 0) - - -def generate_model(model_depth, **kwargs): - assert model_depth in [10, 18, 34, 50, 101, 152, 200] - - if model_depth == 10: - model = ResNet3D(BasicBlock, [1, 1, 1, 1], get_inplanes(), **kwargs) - elif model_depth == 18: - model = ResNet3D(BasicBlock, [2, 2, 2, 2], get_inplanes(), **kwargs) - elif model_depth == 34: - model = ResNet3D(BasicBlock, [3, 4, 6, 3], get_inplanes(), **kwargs) - elif model_depth == 50: - model = ResNet3D(Bottleneck, [3, 4, 6, 3], get_inplanes(), **kwargs) - elif model_depth == 101: - model = ResNet3D(Bottleneck, [3, 4, 23, 3], get_inplanes(), **kwargs) - elif model_depth == 152: - model = ResNet3D(Bottleneck, [3, 8, 36, 3], get_inplanes(), **kwargs) - elif model_depth == 200: - model = ResNet3D(Bottleneck, [3, 24, 36, 3], get_inplanes(), **kwargs) - - return model - - -if __name__ == "__main__": - cfg = { - "type": "ResNet3D", - "block": Bottleneck, - "layers": [3, 4, 6, 3], - "block_inplanes": [64, 128, 256, 512], - } - net = BACKBONES.build(cfg=cfg, default_args=cfg) - input = torch.rand(1, 3, 32, 224, 224) - res = net(input) - print(res["embed"].shape) - for i in range(len(res["outputs"])): - print(f"Layer {i+1}", res["outputs"][i].shape) diff --git a/video/fake-stormer/model_code/models/networks/backbones/swin.py b/video/fake-stormer/model_code/models/networks/backbones/swin.py deleted file mode 100644 index 9f0d18cd6b593e99e3d39f684d74c9d83fb46ac9..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/backbones/swin.py +++ /dev/null @@ -1,1151 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) OpenMMLab. All rights reserved. -import math -import os -import sys -from collections import OrderedDict -from copy import deepcopy -from typing import Sequence - -if not os.getcwd() in sys.path: - sys.path.append(os.getcwd()) - -import torch -import torch.nn as nn -import torch.nn.functional as F -import torch.utils.checkpoint as cp -from einops import rearrange, reduce, repeat -from logs.logger import get_root_logger -from mmcv.cnn import ( - build_conv_layer, - build_norm_layer, - constant_init, - trunc_normal_init, -) -from mmcv.cnn.bricks.transformer import FFN, build_dropout -from mmcv.cnn.utils.weight_init import trunc_normal_ -from mmcv.runner import _load_checkpoint -from mmcv.runner.base_module import BaseModule -from mmcv.utils import to_2tuple -from models.builder import BACKBONES -from models.utils import swin_converter - -from .base import BaseBackbone - - -class AdaptivePadding(nn.Module): - """Applies padding to input (if needed) so that input can get fully covered - by filter you specified. It support two modes "same" and "corner". The - "same" mode is same with "SAME" padding mode in TensorFlow, pad zero around - input. The "corner" mode would pad zero to bottom right. - - Args: - kernel_size (int | tuple): Size of the kernel: - stride (int | tuple): Stride of the filter. Default: 1: - dilation (int | tuple): Spacing between kernel elements. - Default: 1 - padding (str): Support "same" and "corner", "corner" mode - would pad zero to bottom right, and "same" mode would - pad zero around input. Default: "corner". - Example: - >>> kernel_size = 16 - >>> stride = 16 - >>> dilation = 1 - >>> input = torch.rand(1, 1, 15, 17) - >>> adap_pad = AdaptivePadding( - >>> kernel_size=kernel_size, - >>> stride=stride, - >>> dilation=dilation, - >>> padding="corner") - >>> out = adap_pad(input) - >>> assert (out.shape[2], out.shape[3]) == (16, 32) - >>> input = torch.rand(1, 1, 16, 17) - >>> out = adap_pad(input) - >>> assert (out.shape[2], out.shape[3]) == (16, 32) - """ - - def __init__(self, kernel_size=1, stride=1, dilation=1, padding="corner"): - - super(AdaptivePadding, self).__init__() - - assert padding in ("same", "corner") - - kernel_size = to_2tuple(kernel_size) - stride = to_2tuple(stride) - padding = to_2tuple(padding) - dilation = to_2tuple(dilation) - - self.padding = padding - self.kernel_size = kernel_size - self.stride = stride - self.dilation = dilation - - def get_pad_shape(self, input_shape): - input_h, input_w = input_shape - kernel_h, kernel_w = self.kernel_size - stride_h, stride_w = self.stride - output_h = math.ceil(input_h / stride_h) - output_w = math.ceil(input_w / stride_w) - pad_h = max( - (output_h - 1) * stride_h + (kernel_h - 1) * self.dilation[0] + 1 - input_h, - 0, - ) - pad_w = max( - (output_w - 1) * stride_w + (kernel_w - 1) * self.dilation[1] + 1 - input_w, - 0, - ) - return pad_h, pad_w - - def forward(self, x): - pad_h, pad_w = self.get_pad_shape(x.size()[-2:]) - if pad_h > 0 or pad_w > 0: - if self.padding == "corner": - x = F.pad(x, [0, pad_w, 0, pad_h]) - elif self.padding == "same": - x = F.pad( - x, [pad_w // 2, pad_w - pad_w // 2, pad_h // 2, pad_h - pad_h // 2] - ) - return x - - -class PatchEmbed(BaseModule): - """Image to Patch Embedding. - - We use a conv layer to implement PatchEmbed. - - Args: - in_channels (int): The num of input channels. Default: 3 - embed_dims (int): The dimensions of embedding. Default: 768 - conv_type (str): The config dict for embedding - conv layer type selection. Default: "Conv2d. - kernel_size (int): The kernel_size of embedding conv. Default: 16. - stride (int): The slide stride of embedding conv. - Default: None (Would be set as `kernel_size`). - padding (int | tuple | string ): The padding length of - embedding conv. When it is a string, it means the mode - of adaptive padding, support "same" and "corner" now. - Default: "corner". - dilation (int): The dilation rate of embedding conv. Default: 1. - bias (bool): Bias of embed conv. Default: True. - norm_cfg (dict, optional): Config dict for normalization layer. - Default: None. - input_size (int | tuple | None): The size of input, which will be - used to calculate the out size. Only work when `dynamic_size` - is False. Default: None. - init_cfg (`mmcv.ConfigDict`, optional): The Config for initialization. - Default: None. - """ - - def __init__( - self, - in_channels=3, - embed_dims=768, - conv_type="Conv2d", - kernel_size=16, - stride=16, - padding="corner", - dilation=1, - bias=True, - norm_cfg=None, - input_size=None, - init_cfg=None, - ): - super(PatchEmbed, self).__init__(init_cfg=init_cfg) - - self.embed_dims = embed_dims - if stride is None: - stride = kernel_size - - kernel_size = to_2tuple(kernel_size) - stride = to_2tuple(stride) - dilation = to_2tuple(dilation) - - if isinstance(padding, str): - self.adap_padding = AdaptivePadding( - kernel_size=kernel_size, - stride=stride, - dilation=dilation, - padding=padding, - ) - # disable the padding of conv - padding = 0 - else: - self.adap_padding = None - padding = to_2tuple(padding) - - self.projection = build_conv_layer( - dict(type=conv_type), - in_channels=in_channels, - out_channels=embed_dims, - kernel_size=kernel_size, - stride=stride, - padding=padding, - dilation=dilation, - bias=bias, - ) - - if norm_cfg is not None: - self.norm = build_norm_layer(norm_cfg, embed_dims)[1] - else: - self.norm = None - - if input_size: - input_size = to_2tuple(input_size) - # `init_out_size` would be used outside to - # calculate the num_patches - # when `use_abs_pos_embed` outside - self.init_input_size = input_size - if self.adap_padding: - pad_h, pad_w = self.adap_padding.get_pad_shape(input_size) - input_h, input_w = input_size - input_h = input_h + pad_h - input_w = input_w + pad_w - input_size = (input_h, input_w) - - # https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html - h_out = ( - input_size[0] + 2 * padding[0] - dilation[0] * (kernel_size[0] - 1) - 1 - ) // stride[0] + 1 - w_out = ( - input_size[1] + 2 * padding[1] - dilation[1] * (kernel_size[1] - 1) - 1 - ) // stride[1] + 1 - self.init_out_size = (h_out, w_out) - else: - self.init_input_size = None - self.init_out_size = None - - def forward(self, x): - """ - Args: - x (Tensor): Has shape (B, C, H, W). In most case, C is 3. - - Returns: - tuple: Contains merged results and its spatial shape. - - - x (Tensor): Has shape (B, out_h * out_w, embed_dims) - - out_size (tuple[int]): Spatial shape of x, arrange as - (out_h, out_w). - """ - - if self.adap_padding: - x = self.adap_padding(x) - - x = self.projection(x) - out_size = (x.shape[2], x.shape[3]) - x = x.flatten(2).transpose(1, 2) - if self.norm is not None: - x = self.norm(x) - return x, out_size - - -class PatchMerging(BaseModule): - """Merge patch feature map. - - This layer groups feature map by kernel_size, and applies norm and linear - layers to the grouped feature map. Our implementation uses `nn.Unfold` to - merge patch, which is about 25% faster than original implementation. - Instead, we need to modify pretrained models for compatibility. - - Args: - in_channels (int): The num of input channels. - to gets fully covered by filter and stride you specified.. - Default: True. - out_channels (int): The num of output channels. - kernel_size (int | tuple, optional): the kernel size in the unfold - layer. Defaults to 2. - stride (int | tuple, optional): the stride of the sliding blocks in the - unfold layer. Default: None. (Would be set as `kernel_size`) - padding (int | tuple | string ): The padding length of - embedding conv. When it is a string, it means the mode - of adaptive padding, support "same" and "corner" now. - Default: "corner". - dilation (int | tuple, optional): dilation parameter in the unfold - layer. Default: 1. - bias (bool, optional): Whether to add bias in linear layer or not. - Defaults: False. - norm_cfg (dict, optional): Config dict for normalization layer. - Default: dict(type='LN'). - init_cfg (dict, optional): The extra config for initialization. - Default: None. - """ - - def __init__( - self, - in_channels, - out_channels, - kernel_size=2, - stride=None, - padding="corner", - dilation=1, - bias=False, - norm_cfg=dict(type="LN"), - init_cfg=None, - ): - super().__init__(init_cfg=init_cfg) - self.in_channels = in_channels - self.out_channels = out_channels - if stride: - stride = stride - else: - stride = kernel_size - - kernel_size = to_2tuple(kernel_size) - stride = to_2tuple(stride) - dilation = to_2tuple(dilation) - - if isinstance(padding, str): - self.adap_padding = AdaptivePadding( - kernel_size=kernel_size, - stride=stride, - dilation=dilation, - padding=padding, - ) - # disable the padding of unfold - padding = 0 - else: - self.adap_padding = None - - padding = to_2tuple(padding) - self.sampler = nn.Unfold( - kernel_size=kernel_size, dilation=dilation, padding=padding, stride=stride - ) - - sample_dim = kernel_size[0] * kernel_size[1] * in_channels - - if norm_cfg is not None: - self.norm = build_norm_layer(norm_cfg, sample_dim)[1] - else: - self.norm = None - - self.reduction = nn.Linear(sample_dim, out_channels, bias=bias) - - def forward(self, x, input_size): - """ - Args: - x (Tensor): Has shape (B, H*W, C_in). - input_size (tuple[int]): The spatial shape of x, arrange as (H, W). - Default: None. - - Returns: - tuple: Contains merged results and its spatial shape. - - - x (Tensor): Has shape (B, Merged_H * Merged_W, C_out) - - out_size (tuple[int]): Spatial shape of x, arrange as - (Merged_H, Merged_W). - """ - B, L, C = x.shape - assert isinstance(input_size, Sequence), ( - f"Expect " f"input_size is " f"`Sequence` " f"but get {input_size}" - ) - - H, W = input_size - assert L == H * W, "input feature has wrong size" - - x = x.view(B, H, W, C).permute([0, 3, 1, 2]) # B, C, H, W - # Use nn.Unfold to merge patch. About 25% faster than original method, - # but need to modify pretrained model for compatibility - - if self.adap_padding: - x = self.adap_padding(x) - H, W = x.shape[-2:] - - x = self.sampler(x) - # if kernel_size=2 and stride=2, x should has shape (B, 4*C, H/2*W/2) - - out_h = ( - H - + 2 * self.sampler.padding[0] - - self.sampler.dilation[0] * (self.sampler.kernel_size[0] - 1) - - 1 - ) // self.sampler.stride[0] + 1 - out_w = ( - W - + 2 * self.sampler.padding[1] - - self.sampler.dilation[1] * (self.sampler.kernel_size[1] - 1) - - 1 - ) // self.sampler.stride[1] + 1 - - output_size = (out_h, out_w) - x = x.transpose(1, 2) # B, H/2*W/2, 4*C - x = self.norm(x) if self.norm else x - x = self.reduction(x) - return x, output_size - - -class WindowMSA(nn.Module): - """Window based multi-head self-attention (W-MSA) module with relative - position bias. - - Args: - embed_dims (int): Number of input channels. - num_heads (int): Number of attention heads. - window_size (tuple[int]): The height and width of the window. - qkv_bias (bool, optional): If True, add a learnable bias to q, k, v. - Default: True. - qk_scale (float | None, optional): Override default qk scale of - head_dim ** -0.5 if set. Default: None. - attn_drop_rate (float, optional): Dropout ratio of attention weight. - Default: 0.0 - proj_drop_rate (float, optional): Dropout ratio of output. Default: 0. - """ - - def __init__( - self, - embed_dims, - num_heads, - window_size, - qkv_bias=True, - qk_scale=None, - attn_drop_rate=0.0, - proj_drop_rate=0.0, - ): - - super().__init__() - self.embed_dims = embed_dims - self.window_size = window_size # Wh, Ww - self.num_heads = num_heads - head_embed_dims = embed_dims // num_heads - self.scale = qk_scale or head_embed_dims**-0.5 - - # define a parameter table of relative position bias - self.relative_position_bias_table = nn.Parameter( - torch.zeros((2 * window_size[0] - 1) * (2 * window_size[1] - 1), num_heads) - ) # 2*Wh-1 * 2*Ww-1, nH - - # About 2x faster than original impl - Wh, Ww = self.window_size - rel_index_coords = self.double_step_seq(2 * Ww - 1, Wh, 1, Ww) - rel_position_index = rel_index_coords + rel_index_coords.T - rel_position_index = rel_position_index.flip(1).contiguous() - self.register_buffer("relative_position_index", rel_position_index) - - self.qkv = nn.Linear(embed_dims, embed_dims * 3, bias=qkv_bias) - self.attn_drop = nn.Dropout(attn_drop_rate) - self.proj = nn.Linear(embed_dims, embed_dims) - self.proj_drop = nn.Dropout(proj_drop_rate) - - self.softmax = nn.Softmax(dim=-1) - - def init_weights(self): - trunc_normal_(self.relative_position_bias_table, std=0.02) - - def forward(self, x, mask=None): - """ - Args: - - x (tensor): input features with shape of (num_windows*B, N, C) - mask (tensor | None, Optional): mask with shape of (num_windows, - Wh*Ww, Wh*Ww), value should be between (-inf, 0]. - """ - B, N, C = x.shape - qkv = ( - self.qkv(x) - .reshape(B, N, 3, self.num_heads, C // self.num_heads) - .permute(2, 0, 3, 1, 4) - ) - # make torchscript happy (cannot use tensor as tuple) - q, k, v = qkv[0], qkv[1], qkv[2] - - q = q * self.scale - attn = q @ k.transpose(-2, -1) - - relative_position_bias = self.relative_position_bias_table[ - self.relative_position_index.view(-1) - ].view( - self.window_size[0] * self.window_size[1], - self.window_size[0] * self.window_size[1], - -1, - ) # Wh*Ww,Wh*Ww,nH - relative_position_bias = relative_position_bias.permute( - 2, 0, 1 - ).contiguous() # nH, Wh*Ww, Wh*Ww - attn = attn + relative_position_bias.unsqueeze(0) - - if mask is not None: - nW = mask.shape[0] - attn = attn.view(B // nW, nW, self.num_heads, N, N) + mask.unsqueeze( - 1 - ).unsqueeze(0) - attn = attn.view(-1, self.num_heads, N, N) - attn = self.softmax(attn) - - attn = self.attn_drop(attn) - - x = (attn @ v).transpose(1, 2).reshape(B, N, C) - x = self.proj(x) - x = self.proj_drop(x) - return x - - @staticmethod - def double_step_seq(step1, len1, step2, len2): - seq1 = torch.arange(0, step1 * len1, step1) - seq2 = torch.arange(0, step2 * len2, step2) - return (seq1[:, None] + seq2[None, :]).reshape(1, -1) - - -class ShiftWindowMSA(nn.Module): - """Shifted Window Multihead Self-Attention Module. - - Args: - embed_dims (int): Number of input channels. - num_heads (int): Number of attention heads. - window_size (int): The height and width of the window. - shift_size (int, optional): The shift step of each window towards - right-bottom. If zero, act as regular window-msa. Defaults to 0. - qkv_bias (bool, optional): If True, add a learnable bias to q, k, v. - Default: True - qk_scale (float | None, optional): Override default qk scale of - head_dim ** -0.5 if set. Defaults: None. - attn_drop_rate (float, optional): Dropout ratio of attention weight. - Defaults: 0. - proj_drop_rate (float, optional): Dropout ratio of output. - Defaults: 0. - dropout_layer (dict, optional): The dropout_layer used before output. - Defaults: dict(type='DropPath', drop_prob=0.). - """ - - def __init__( - self, - embed_dims, - num_heads, - window_size, - shift_size=0, - qkv_bias=True, - qk_scale=None, - attn_drop_rate=0, - proj_drop_rate=0, - dropout_layer=dict(type="DropPath", drop_prob=0.0), - ): - super().__init__() - - self.window_size = window_size - self.shift_size = shift_size - assert 0 <= self.shift_size < self.window_size - - self.w_msa = WindowMSA( - embed_dims=embed_dims, - num_heads=num_heads, - window_size=to_2tuple(window_size), - qkv_bias=qkv_bias, - qk_scale=qk_scale, - attn_drop_rate=attn_drop_rate, - proj_drop_rate=proj_drop_rate, - ) - - self.drop = build_dropout(dropout_layer) - - def forward(self, query, hw_shape): - B, L, C = query.shape - H, W = hw_shape - assert L == H * W, "input feature has wrong size" - query = query.view(B, H, W, C) - - # pad feature maps to multiples of window size - pad_r = (self.window_size - W % self.window_size) % self.window_size - pad_b = (self.window_size - H % self.window_size) % self.window_size - query = F.pad(query, (0, 0, 0, pad_r, 0, pad_b)) - H_pad, W_pad = query.shape[1], query.shape[2] - - # cyclic shift - if self.shift_size > 0: - shifted_query = torch.roll( - query, shifts=(-self.shift_size, -self.shift_size), dims=(1, 2) - ) - - # calculate attention mask for SW-MSA - img_mask = torch.zeros((1, H_pad, W_pad, 1), device=query.device) - h_slices = ( - slice(0, -self.window_size), - slice(-self.window_size, -self.shift_size), - slice(-self.shift_size, None), - ) - w_slices = ( - slice(0, -self.window_size), - slice(-self.window_size, -self.shift_size), - slice(-self.shift_size, None), - ) - cnt = 0 - for h in h_slices: - for w in w_slices: - img_mask[:, h, w, :] = cnt - cnt += 1 - - # nW, window_size, window_size, 1 - mask_windows = self.window_partition(img_mask) - mask_windows = mask_windows.view(-1, self.window_size * self.window_size) - attn_mask = mask_windows.unsqueeze(1) - mask_windows.unsqueeze(2) - attn_mask = attn_mask.masked_fill( - attn_mask != 0, float(-100.0) - ).masked_fill(attn_mask == 0, float(0.0)) - else: - shifted_query = query - attn_mask = None - - # nW*B, window_size, window_size, C - query_windows = self.window_partition(shifted_query) - # nW*B, window_size*window_size, C - query_windows = query_windows.view(-1, self.window_size**2, C) - - # W-MSA/SW-MSA (nW*B, window_size*window_size, C) - attn_windows = self.w_msa(query_windows, mask=attn_mask) - - # merge windows - attn_windows = attn_windows.view(-1, self.window_size, self.window_size, C) - - # B H' W' C - shifted_x = self.window_reverse(attn_windows, H_pad, W_pad) - # reverse cyclic shift - if self.shift_size > 0: - x = torch.roll( - shifted_x, shifts=(self.shift_size, self.shift_size), dims=(1, 2) - ) - else: - x = shifted_x - - if pad_r > 0 or pad_b: - x = x[:, :H, :W, :].contiguous() - - x = x.view(B, H * W, C) - - x = self.drop(x) - return x - - def window_reverse(self, windows, H, W): - """ - Args: - windows: (num_windows*B, window_size, window_size, C) - H (int): Height of image - W (int): Width of image - Returns: - x: (B, H, W, C) - """ - window_size = self.window_size - B = int(windows.shape[0] / (H * W / window_size / window_size)) - x = windows.view( - B, H // window_size, W // window_size, window_size, window_size, -1 - ) - x = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(B, H, W, -1) - return x - - def window_partition(self, x): - """ - Args: - x: (B, H, W, C) - Returns: - windows: (num_windows*B, window_size, window_size, C) - """ - B, H, W, C = x.shape - window_size = self.window_size - x = x.view(B, H // window_size, window_size, W // window_size, window_size, C) - windows = x.permute(0, 1, 3, 2, 4, 5).contiguous() - windows = windows.view(-1, window_size, window_size, C) - return windows - - -class SwinBlock(nn.Module): - """ " - Args: - embed_dims (int): The feature dimension. - num_heads (int): Parallel attention heads. - feedforward_channels (int): The hidden dimension for FFNs. - window_size (int, optional): The local window scale. Default: 7. - shift (bool, optional): whether to shift window or not. Default False. - qkv_bias (bool, optional): enable bias for qkv if True. Default: True. - qk_scale (float | None, optional): Override default qk scale of - head_dim ** -0.5 if set. Default: None. - drop_rate (float, optional): Dropout rate. Default: 0. - attn_drop_rate (float, optional): Attention dropout rate. Default: 0. - drop_path_rate (float, optional): Stochastic depth rate. Default: 0. - act_cfg (dict, optional): The config dict of activation function. - Default: dict(type='GELU'). - norm_cfg (dict, optional): The config dict of normalization. - Default: dict(type='LN'). - with_cp (bool, optional): Use checkpoint or not. Using checkpoint - will save some memory while slowing down the training speed. - Default: False. - """ - - def __init__( - self, - embed_dims, - num_heads, - feedforward_channels, - window_size=7, - shift=False, - qkv_bias=True, - qk_scale=None, - drop_rate=0.0, - attn_drop_rate=0.0, - drop_path_rate=0.0, - act_cfg=dict(type="GELU"), - norm_cfg=dict(type="LN"), - with_cp=False, - ): - - super(SwinBlock, self).__init__() - - self.with_cp = with_cp - - self.norm1 = build_norm_layer(norm_cfg, embed_dims)[1] - self.attn = ShiftWindowMSA( - embed_dims=embed_dims, - num_heads=num_heads, - window_size=window_size, - shift_size=window_size // 2 if shift else 0, - qkv_bias=qkv_bias, - qk_scale=qk_scale, - attn_drop_rate=attn_drop_rate, - proj_drop_rate=drop_rate, - dropout_layer=dict(type="DropPath", drop_prob=drop_path_rate), - ) - - self.norm2 = build_norm_layer(norm_cfg, embed_dims)[1] - self.ffn = FFN( - embed_dims=embed_dims, - feedforward_channels=feedforward_channels, - num_fcs=2, - ffn_drop=drop_rate, - dropout_layer=dict(type="DropPath", drop_prob=drop_path_rate), - act_cfg=act_cfg, - add_identity=True, - init_cfg=None, - ) - - def forward(self, x, hw_shape): - - def _inner_forward(x): - identity = x - x = self.norm1(x) - x = self.attn(x, hw_shape) - - x = x + identity - - identity = x - x = self.norm2(x) - x = self.ffn(x, identity=identity) - - return x - - if self.with_cp and x.requires_grad: - x = cp.checkpoint(_inner_forward, x) - else: - x = _inner_forward(x) - - return x - - -class SwinBlockSequence(nn.Module): - """Implements one stage in Swin Transformer. - - Args: - embed_dims (int): The feature dimension. - num_heads (int): Parallel attention heads. - feedforward_channels (int): The hidden dimension for FFNs. - depth (int): The number of blocks in this stage. - window_size (int, optional): The local window scale. Default: 7. - qkv_bias (bool, optional): enable bias for qkv if True. Default: True. - qk_scale (float | None, optional): Override default qk scale of - head_dim ** -0.5 if set. Default: None. - drop_rate (float, optional): Dropout rate. Default: 0. - attn_drop_rate (float, optional): Attention dropout rate. Default: 0. - drop_path_rate (float | list[float], optional): Stochastic depth - rate. Default: 0. - downsample (nn.Module | None, optional): The downsample operation - module. Default: None. - act_cfg (dict, optional): The config dict of activation function. - Default: dict(type='GELU'). - norm_cfg (dict, optional): The config dict of normalization. - Default: dict(type='LN'). - with_cp (bool, optional): Use checkpoint or not. Using checkpoint - will save some memory while slowing down the training speed. - Default: False. - """ - - def __init__( - self, - embed_dims, - num_heads, - feedforward_channels, - depth, - window_size=7, - qkv_bias=True, - qk_scale=None, - drop_rate=0.0, - attn_drop_rate=0.0, - drop_path_rate=0.0, - downsample=None, - act_cfg=dict(type="GELU"), - norm_cfg=dict(type="LN"), - with_cp=False, - ): - super().__init__() - - if isinstance(drop_path_rate, list): - drop_path_rates = drop_path_rate - assert len(drop_path_rates) == depth - else: - drop_path_rates = [deepcopy(drop_path_rate) for _ in range(depth)] - - self.blocks = nn.ModuleList() - for i in range(depth): - block = SwinBlock( - embed_dims=embed_dims, - num_heads=num_heads, - feedforward_channels=feedforward_channels, - window_size=window_size, - shift=False if i % 2 == 0 else True, - qkv_bias=qkv_bias, - qk_scale=qk_scale, - drop_rate=drop_rate, - attn_drop_rate=attn_drop_rate, - drop_path_rate=drop_path_rates[i], - act_cfg=act_cfg, - norm_cfg=norm_cfg, - with_cp=with_cp, - ) - self.blocks.append(block) - - self.downsample = downsample - - def forward(self, x, hw_shape): - for block in self.blocks: - x = block(x, hw_shape) - - if self.downsample: - x_down, down_hw_shape = self.downsample(x, hw_shape) - return x_down, down_hw_shape, x, hw_shape - else: - return x, hw_shape, x, hw_shape - - -@BACKBONES.register_module() -class SwinTransformer(BaseBackbone): - """Swin Transformer - A PyTorch implement of : `Swin Transformer: - Hierarchical Vision Transformer using Shifted Windows` - - https://arxiv.org/abs/2103.14030 - - Inspiration from - https://github.com/microsoft/Swin-Transformer - - Args: - pretrain_img_size (int | tuple[int]): The size of input image when - pretrain. Defaults: 224. - in_channels (int): The num of input channels. - Defaults: 3. - embed_dims (int): The feature dimension. Default: 96. - patch_size (int | tuple[int]): Patch size. Default: 4. - window_size (int): Window size. Default: 7. - mlp_ratio (int): Ratio of mlp hidden dim to embedding dim. - Default: 4. - depths (tuple[int]): Depths of each Swin Transformer stage. - Default: (2, 2, 6, 2). - num_heads (tuple[int]): Parallel attention heads of each Swin - Transformer stage. Default: (3, 6, 12, 24). - strides (tuple[int]): The patch merging or patch embedding stride of - each Swin Transformer stage. (In swin, we set kernel size equal to - stride.) Default: (4, 2, 2, 2). - out_indices (tuple[int]): Output from which stages. - Default: (0, 1, 2, 3). - qkv_bias (bool, optional): If True, add a learnable bias to query, key, - value. Default: True - qk_scale (float | None, optional): Override default qk scale of - head_dim ** -0.5 if set. Default: None. - patch_norm (bool): If add a norm layer for patch embed and patch - merging. Default: True. - drop_rate (float): Dropout rate. Defaults: 0. - attn_drop_rate (float): Attention dropout rate. Default: 0. - drop_path_rate (float): Stochastic depth rate. Defaults: 0.1. - use_abs_pos_embed (bool): If True, add absolute position embedding to - the patch embedding. Defaults: False. - act_cfg (dict): Config dict for activation layer. - Default: dict(type='LN'). - norm_cfg (dict): Config dict for normalization layer at - output of backone. Defaults: dict(type='LN'). - with_cp (bool, optional): Use checkpoint or not. Using checkpoint - will save some memory while slowing down the training speed. - Default: False. - pretrained (str, optional): model pretrained path. Default: None. - convert_weights (bool): The flag indicates whether the - pre-trained model is from the original repo. We may need - to convert some keys to make it compatible. - Default: False. - frozen_stages (int): Stages to be frozen (stop grad and set eval mode). - Default: -1 (-1 means not freezing any parameters). - """ - - def __init__( - self, - pretrain_img_size=224, - in_channels=3, - embed_dims=96, - patch_size=4, - window_size=7, - mlp_ratio=4, - depths=(2, 2, 6, 2), - num_heads=(3, 6, 12, 24), - strides=(4, 2, 2, 2), - out_indices=(0, 1, 2, 3), - qkv_bias=True, - qk_scale=None, - patch_norm=True, - drop_rate=0.0, - attn_drop_rate=0.0, - drop_path_rate=0.1, - use_abs_pos_embed=False, - act_cfg=dict(type="GELU"), - norm_cfg=dict(type="LN"), - with_cp=False, - convert_weights=False, - frozen_stages=-1, - pretrained=None, - ): - self.convert_weights = convert_weights - self.pretrained = pretrained - self.frozen_stages = frozen_stages - if isinstance(pretrain_img_size, int): - pretrain_img_size = to_2tuple(pretrain_img_size) - elif isinstance(pretrain_img_size, tuple): - if len(pretrain_img_size) == 1: - pretrain_img_size = to_2tuple(pretrain_img_size[0]) - assert len(pretrain_img_size) == 2, ( - f"The size of image should have length 1 or 2, " - f"but got {len(pretrain_img_size)}" - ) - - super(SwinTransformer, self).__init__() - - num_layers = len(depths) - self.out_indices = out_indices - self.use_abs_pos_embed = use_abs_pos_embed - - assert strides[0] == patch_size, "Use non-overlapping patch embed." - - self.patch_embed = PatchEmbed( - in_channels=in_channels, - embed_dims=embed_dims, - conv_type="Conv2d", - kernel_size=patch_size, - stride=strides[0], - norm_cfg=norm_cfg if patch_norm else None, - init_cfg=None, - ) - - if self.use_abs_pos_embed: - patch_row = pretrain_img_size[0] // patch_size - patch_col = pretrain_img_size[1] // patch_size - num_patches = patch_row * patch_col - self.absolute_pos_embed = nn.Parameter( - torch.zeros((1, num_patches, embed_dims)) - ) - - self.drop_after_pos = nn.Dropout(p=drop_rate) - - # set stochastic depth decay rule - total_depth = sum(depths) - dpr = [x.item() for x in torch.linspace(0, drop_path_rate, total_depth)] - - self.stages = nn.ModuleList() - in_channels = embed_dims - for i in range(num_layers): - if i < num_layers - 1: - downsample = PatchMerging( - in_channels=in_channels, - out_channels=2 * in_channels, - stride=strides[i + 1], - norm_cfg=norm_cfg if patch_norm else None, - init_cfg=None, - ) - else: - downsample = None - - stage = SwinBlockSequence( - embed_dims=in_channels, - num_heads=num_heads[i], - feedforward_channels=mlp_ratio * in_channels, - depth=depths[i], - window_size=window_size, - qkv_bias=qkv_bias, - qk_scale=qk_scale, - drop_rate=drop_rate, - attn_drop_rate=attn_drop_rate, - drop_path_rate=dpr[sum(depths[:i]) : sum(depths[: i + 1])], - downsample=downsample, - act_cfg=act_cfg, - norm_cfg=norm_cfg, - with_cp=with_cp, - ) - self.stages.append(stage) - if downsample: - in_channels = downsample.out_channels - - self.num_features = [int(embed_dims * 2**i) for i in range(num_layers)] - # Add a norm layer for each output - for i in out_indices: - layer = build_norm_layer(norm_cfg, self.num_features[i])[1] - layer_name = f"norm{i}" - self.add_module(layer_name, layer) - - def train(self, mode=True): - """Convert the model into training mode while keep layers freezed.""" - super(SwinTransformer, self).train(mode) - self._freeze_stages() - - def _freeze_stages(self): - if self.frozen_stages >= 0: - self.patch_embed.eval() - for param in self.patch_embed.parameters(): - param.requires_grad = False - if self.use_abs_pos_embed: - self.absolute_pos_embed.requires_grad = False - self.drop_after_pos.eval() - - for i in range(1, self.frozen_stages + 1): - - if (i - 1) in self.out_indices: - norm_layer = getattr(self, f"norm{i-1}") - norm_layer.eval() - for param in norm_layer.parameters(): - param.requires_grad = False - - m = self.stages[i - 1] - m.eval() - for param in m.parameters(): - param.requires_grad = False - - def init_weights(self, pretrained=None): - """Initialize the weights in backbone. - - Args: - pretrained (str, optional): Path to pre-trained weights. - Defaults to None. - """ - if isinstance(pretrained, str): - logger = get_root_logger() - ckpt = _load_checkpoint(pretrained, logger=None, map_location="cpu") - if "state_dict" in ckpt: - _state_dict = ckpt["state_dict"] - elif "model" in ckpt: - _state_dict = ckpt["model"] - else: - _state_dict = ckpt - if self.convert_weights: - # supported loading weight from original repo, - _state_dict = swin_converter(_state_dict) - - state_dict = OrderedDict() - for k, v in _state_dict.items(): - if k.startswith("backbone."): - state_dict[k[9:]] = v - - # strip prefix of state_dict - if list(state_dict.keys())[0].startswith("module."): - state_dict = {k[7:]: v for k, v in state_dict.items()} - - # reshape absolute position embedding - if state_dict.get("absolute_pos_embed") is not None: - absolute_pos_embed = state_dict["absolute_pos_embed"] - N1, L, C1 = absolute_pos_embed.size() - N2, C2, H, W = self.absolute_pos_embed.size() - if N1 != N2 or C1 != C2 or L != H * W: - logger.warning("Error in loading absolute_pos_embed, pass") - else: - state_dict["absolute_pos_embed"] = ( - absolute_pos_embed.view(N2, H, W, C2) - .permute(0, 3, 1, 2) - .contiguous() - ) - - # interpolate position bias table if needed - relative_position_bias_table_keys = [ - k for k in state_dict.keys() if "relative_position_bias_table" in k - ] - for table_key in relative_position_bias_table_keys: - table_pretrained = state_dict[table_key] - table_current = self.state_dict()[table_key] - L1, nH1 = table_pretrained.size() - L2, nH2 = table_current.size() - if nH1 != nH2: - logger.warning(f"Error in loading {table_key}, pass") - elif L1 != L2: - S1 = int(L1**0.5) - S2 = int(L2**0.5) - table_pretrained_resized = F.interpolate( - table_pretrained.permute(1, 0).reshape(1, nH1, S1, S1), - size=(S2, S2), - mode="bicubic", - ) - state_dict[table_key] = ( - table_pretrained_resized.view(nH2, L2) - .permute(1, 0) - .contiguous() - ) - - # load state_dict - self.load_state_dict(state_dict, False) - elif pretrained is None: - if self.use_abs_pos_embed: - trunc_normal_(self.absolute_pos_embed, std=0.02) - for m in self.modules(): - if isinstance(m, nn.Linear): - trunc_normal_init(m, std=0.02, bias=0.0) - elif isinstance(m, nn.LayerNorm): - constant_init(m, 1.0) - else: - raise TypeError("pretrained must be a str or None") - - def forward(self, x): - x, hw_shape = self.patch_embed(x) - - if self.use_abs_pos_embed: - x = x + self.absolute_pos_embed - x = self.drop_after_pos(x) - - outs = [] - for i, stage in enumerate(self.stages): - x, hw_shape, out, out_hw_shape = stage(x, hw_shape) - if i in self.out_indices: - norm_layer = getattr(self, f"norm{i}") - out = norm_layer(out) - out = ( - out.view(-1, *out_hw_shape, self.num_features[i]) - .permute(0, 3, 1, 2) - .contiguous() - ) - outs.append(out) - - res = {} - B, C, Hp, Wp = outs[3].shape - res["cls"] = torch.mean( - rearrange(outs[3], "b c h w -> b c (h w)", h=Hp, w=Wp), -1, False - ) - res["embed"] = outs[3] - - return res - - -if __name__ == "__main__": - model = SwinTransformer( - embed_dims=128, - depths=[2, 2, 18, 2], - num_heads=[4, 8, 16, 32], - window_size=7, - mlp_ratio=4, - qkv_bias=True, - qk_scale=None, - drop_rate=0.0, - attn_drop_rate=0.0, - drop_path_rate=0.3, - patch_norm=True, - out_indices=(0, 1, 2, 3), - with_cp=False, - convert_weights=True, - ) - inputs = torch.randn(1, 3, 224, 224) - outputs = model(inputs) - pretrained_weights = "pretrained/swin_base_patch4_window7_224_22k.pth" - print(f"Loading pretrained from --- {pretrained_weights}") - model.init_weights(pretrained=pretrained_weights) - - for i in range(len(outputs)): - print(f"Output length --- {len(outputs)}, Output shape --- {outputs[i].shape}") diff --git a/video/fake-stormer/model_code/models/networks/backbones/swin3d.py b/video/fake-stormer/model_code/models/networks/backbones/swin3d.py deleted file mode 100644 index 70b56e2171f0955c4869dc718184b41a569355bb..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/backbones/swin3d.py +++ /dev/null @@ -1,877 +0,0 @@ -# -*- coding:utf-8 -*- -import os -import sys - -if not os.getcwd() in sys.path: - sys.path.append(os.getcwd()) -from functools import lru_cache, reduce -from operator import mul - -import numpy as np -import torch -import torch.nn as nn -import torch.nn.functional as F -import torch.utils.checkpoint as checkpoint -from einops import rearrange -from logs.logger import get_root_logger -from mmcv.cnn import build_norm_layer -from mmcv.runner import _load_checkpoint as load_checkpoint -from timm.models.layers import DropPath, trunc_normal_ - -from ...builder import BACKBONES -from .base import BaseBackbone - - -class Mlp(nn.Module): - """Multilayer perceptron.""" - - def __init__( - self, - in_features, - hidden_features=None, - out_features=None, - act_layer=nn.GELU, - drop=0.0, - ): - super().__init__() - out_features = out_features or in_features - hidden_features = hidden_features or in_features - self.fc1 = nn.Linear(in_features, hidden_features) - self.act = act_layer() - self.fc2 = nn.Linear(hidden_features, out_features) - self.drop = nn.Dropout(drop) - - def forward(self, x): - x = self.fc1(x) - x = self.act(x) - x = self.drop(x) - x = self.fc2(x) - x = self.drop(x) - return x - - -def window_partition(x, window_size): - """ - Args: - x: (B, D, H, W, C) - window_size (tuple[int]): window size - - Returns: - windows: (B*num_windows, window_size*window_size, C) - """ - B, D, H, W, C = x.shape - x = x.view( - B, - D // window_size[0], - window_size[0], - H // window_size[1], - window_size[1], - W // window_size[2], - window_size[2], - C, - ) - windows = ( - x.permute(0, 1, 3, 5, 2, 4, 6, 7) - .contiguous() - .view(-1, reduce(mul, window_size), C) - ) - return windows - - -def window_reverse(windows, window_size, B, D, H, W): - """ - Args: - windows: (B*num_windows, window_size, window_size, C) - window_size (tuple[int]): Window size - H (int): Height of image - W (int): Width of image - - Returns: - x: (B, D, H, W, C) - """ - x = windows.view( - B, - D // window_size[0], - H // window_size[1], - W // window_size[2], - window_size[0], - window_size[1], - window_size[2], - -1, - ) - x = x.permute(0, 1, 4, 2, 5, 3, 6, 7).contiguous().view(B, D, H, W, -1) - return x - - -def get_window_size(x_size, window_size, shift_size=None): - use_window_size = list(window_size) - if shift_size is not None: - use_shift_size = list(shift_size) - for i in range(len(x_size)): - if x_size[i] <= window_size[i]: - use_window_size[i] = x_size[i] - if shift_size is not None: - use_shift_size[i] = 0 - - if shift_size is None: - return tuple(use_window_size) - else: - return tuple(use_window_size), tuple(use_shift_size) - - -class WindowAttention3D(nn.Module): - """Window based multi-head self attention (W-MSA) module with relative position bias. - It supports both of shifted and non-shifted window. - Args: - dim (int): Number of input channels. - window_size (tuple[int]): The temporal length, height and width of the window. - num_heads (int): Number of attention heads. - qkv_bias (bool, optional): If True, add a learnable bias to query, key, value. Default: True - qk_scale (float | None, optional): Override default qk scale of head_dim ** -0.5 if set - attn_drop (float, optional): Dropout ratio of attention weight. Default: 0.0 - proj_drop (float, optional): Dropout ratio of output. Default: 0.0 - """ - - def __init__( - self, - dim, - window_size, - num_heads, - qkv_bias=False, - qk_scale=None, - attn_drop=0.0, - proj_drop=0.0, - ): - - super().__init__() - self.dim = dim - self.window_size = window_size # Wd, Wh, Ww - self.num_heads = num_heads - head_dim = dim // num_heads - self.scale = qk_scale or head_dim**-0.5 - - # define a parameter table of relative position bias - self.relative_position_bias_table = nn.Parameter( - torch.zeros( - (2 * window_size[0] - 1) - * (2 * window_size[1] - 1) - * (2 * window_size[2] - 1), - num_heads, - ) - ) # 2*Wd-1 * 2*Wh-1 * 2*Ww-1, nH - - # get pair-wise relative position index for each token inside the window - coords_d = torch.arange(self.window_size[0]) - coords_h = torch.arange(self.window_size[1]) - coords_w = torch.arange(self.window_size[2]) - coords = torch.stack( - torch.meshgrid(coords_d, coords_h, coords_w) - ) # 3, Wd, Wh, Ww - coords_flatten = torch.flatten(coords, 1) # 3, Wd*Wh*Ww - relative_coords = ( - coords_flatten[:, :, None] - coords_flatten[:, None, :] - ) # 3, Wd*Wh*Ww, Wd*Wh*Ww - relative_coords = relative_coords.permute( - 1, 2, 0 - ).contiguous() # Wd*Wh*Ww, Wd*Wh*Ww, 3 - relative_coords[:, :, 0] += self.window_size[0] - 1 # shift to start from 0 - relative_coords[:, :, 1] += self.window_size[1] - 1 - relative_coords[:, :, 2] += self.window_size[2] - 1 - - relative_coords[:, :, 0] *= (2 * self.window_size[1] - 1) * ( - 2 * self.window_size[2] - 1 - ) - relative_coords[:, :, 1] *= 2 * self.window_size[2] - 1 - relative_position_index = relative_coords.sum(-1) # Wd*Wh*Ww, Wd*Wh*Ww - self.register_buffer("relative_position_index", relative_position_index) - - self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias) - self.attn_drop = nn.Dropout(attn_drop) - self.proj = nn.Linear(dim, dim) - self.proj_drop = nn.Dropout(proj_drop) - - trunc_normal_(self.relative_position_bias_table, std=0.02) - self.softmax = nn.Softmax(dim=-1) - - def forward(self, x, mask=None): - """Forward function. - Args: - x: input features with shape of (num_windows*B, N, C) - mask: (0/-inf) mask with shape of (num_windows, N, N) or None - """ - B_, N, C = x.shape - qkv = ( - self.qkv(x) - .reshape(B_, N, 3, self.num_heads, C // self.num_heads) - .permute(2, 0, 3, 1, 4) - ) - q, k, v = qkv[0], qkv[1], qkv[2] # B_, nH, N, C - - q = q * self.scale - attn = q @ k.transpose(-2, -1) - - relative_position_bias = self.relative_position_bias_table[ - self.relative_position_index[:N, :N].reshape(-1) - ].reshape( - N, N, -1 - ) # Wd*Wh*Ww,Wd*Wh*Ww,nH - relative_position_bias = relative_position_bias.permute( - 2, 0, 1 - ).contiguous() # nH, Wd*Wh*Ww, Wd*Wh*Ww - attn = attn + relative_position_bias.unsqueeze(0) # B_, nH, N, N - - if mask is not None: - nW = mask.shape[0] - attn = attn.view(B_ // nW, nW, self.num_heads, N, N) + mask.unsqueeze( - 1 - ).unsqueeze(0) - attn = attn.view(-1, self.num_heads, N, N) - attn = self.softmax(attn) - else: - attn = self.softmax(attn) - - attn = self.attn_drop(attn) - - x = (attn @ v).transpose(1, 2).reshape(B_, N, C) - x = self.proj(x) - x = self.proj_drop(x) - return x - - -class SwinTransformerBlock3D(nn.Module): - """Swin Transformer Block. - - Args: - dim (int): Number of input channels. - num_heads (int): Number of attention heads. - window_size (tuple[int]): Window size. - shift_size (tuple[int]): Shift size for SW-MSA. - mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. - qkv_bias (bool, optional): If True, add a learnable bias to query, key, value. Default: True - qk_scale (float | None, optional): Override default qk scale of head_dim ** -0.5 if set. - drop (float, optional): Dropout rate. Default: 0.0 - attn_drop (float, optional): Attention dropout rate. Default: 0.0 - drop_path (float, optional): Stochastic depth rate. Default: 0.0 - act_layer (nn.Module, optional): Activation layer. Default: nn.GELU - norm_layer (nn.Module, optional): Normalization layer. Default: nn.LayerNorm - """ - - def __init__( - self, - dim, - num_heads, - window_size=(2, 7, 7), - shift_size=(0, 0, 0), - mlp_ratio=4.0, - qkv_bias=True, - qk_scale=None, - drop=0.0, - attn_drop=0.0, - drop_path=0.0, - act_layer=nn.GELU, - norm_layer=nn.LayerNorm, - use_checkpoint=False, - ): - super().__init__() - self.dim = dim - self.num_heads = num_heads - self.window_size = window_size - self.shift_size = shift_size - self.mlp_ratio = mlp_ratio - self.use_checkpoint = use_checkpoint - - assert ( - 0 <= self.shift_size[0] < self.window_size[0] - ), "shift_size must in 0-window_size" - assert ( - 0 <= self.shift_size[1] < self.window_size[1] - ), "shift_size must in 0-window_size" - assert ( - 0 <= self.shift_size[2] < self.window_size[2] - ), "shift_size must in 0-window_size" - - self.norm1 = norm_layer(dim) - self.attn = WindowAttention3D( - dim, - window_size=self.window_size, - num_heads=num_heads, - qkv_bias=qkv_bias, - qk_scale=qk_scale, - attn_drop=attn_drop, - proj_drop=drop, - ) - - self.drop_path = DropPath(drop_path) if drop_path > 0.0 else nn.Identity() - self.norm2 = norm_layer(dim) - mlp_hidden_dim = int(dim * mlp_ratio) - self.mlp = Mlp( - in_features=dim, - hidden_features=mlp_hidden_dim, - act_layer=act_layer, - drop=drop, - ) - - def forward_part1(self, x, mask_matrix): - B, D, H, W, C = x.shape - window_size, shift_size = get_window_size( - (D, H, W), self.window_size, self.shift_size - ) - - x = self.norm1(x) - # pad feature maps to multiples of window size - pad_l = pad_t = pad_d0 = 0 - pad_d1 = (window_size[0] - D % window_size[0]) % window_size[0] - pad_b = (window_size[1] - H % window_size[1]) % window_size[1] - pad_r = (window_size[2] - W % window_size[2]) % window_size[2] - x = F.pad(x, (0, 0, pad_l, pad_r, pad_t, pad_b, pad_d0, pad_d1)) - _, Dp, Hp, Wp, _ = x.shape - # cyclic shift - if any(i > 0 for i in shift_size): - shifted_x = torch.roll( - x, - shifts=(-shift_size[0], -shift_size[1], -shift_size[2]), - dims=(1, 2, 3), - ) - attn_mask = mask_matrix - else: - shifted_x = x - attn_mask = None - # partition windows - x_windows = window_partition(shifted_x, window_size) # B*nW, Wd*Wh*Ww, C - # W-MSA/SW-MSA - attn_windows = self.attn(x_windows, mask=attn_mask) # B*nW, Wd*Wh*Ww, C - # merge windows - attn_windows = attn_windows.view(-1, *(window_size + (C,))) - shifted_x = window_reverse( - attn_windows, window_size, B, Dp, Hp, Wp - ) # B D' H' W' C - # reverse cyclic shift - if any(i > 0 for i in shift_size): - x = torch.roll( - shifted_x, - shifts=(shift_size[0], shift_size[1], shift_size[2]), - dims=(1, 2, 3), - ) - else: - x = shifted_x - - if pad_d1 > 0 or pad_r > 0 or pad_b > 0: - x = x[:, :D, :H, :W, :].contiguous() - return x - - def forward_part2(self, x): - return self.drop_path(self.mlp(self.norm2(x))) - - def forward(self, x, mask_matrix): - """Forward function. - - Args: - x: Input feature, tensor size (B, D, H, W, C). - mask_matrix: Attention mask for cyclic shift. - """ - - shortcut = x - if self.use_checkpoint: - x = checkpoint.checkpoint(self.forward_part1, x, mask_matrix) - else: - x = self.forward_part1(x, mask_matrix) - x = shortcut + self.drop_path(x) - - if self.use_checkpoint: - x = x + checkpoint.checkpoint(self.forward_part2, x) - else: - x = x + self.forward_part2(x) - - return x - - -class PatchMerging(nn.Module): - """Patch Merging Layer - - Args: - dim (int): Number of input channels. - norm_layer (nn.Module, optional): Normalization layer. Default: nn.LayerNorm - """ - - def __init__(self, dim, norm_layer=nn.LayerNorm): - super().__init__() - self.dim = dim - self.reduction = nn.Linear(4 * dim, 2 * dim, bias=False) - self.norm = norm_layer(4 * dim) - - def forward(self, x): - """Forward function. - - Args: - x: Input feature, tensor size (B, D, H, W, C). - """ - B, D, H, W, C = x.shape - - # padding - pad_input = (H % 2 == 1) or (W % 2 == 1) - if pad_input: - x = F.pad(x, (0, 0, 0, W % 2, 0, H % 2)) - - x0 = x[:, :, 0::2, 0::2, :] # B D H/2 W/2 C - x1 = x[:, :, 1::2, 0::2, :] # B D H/2 W/2 C - x2 = x[:, :, 0::2, 1::2, :] # B D H/2 W/2 C - x3 = x[:, :, 1::2, 1::2, :] # B D H/2 W/2 C - x = torch.cat([x0, x1, x2, x3], -1) # B D H/2 W/2 4*C - - x = self.norm(x) - x = self.reduction(x) - - return x - - -# cache each stage results -@lru_cache() -def compute_mask(D, H, W, window_size, shift_size, device): - img_mask = torch.zeros((1, D, H, W, 1), device=device) # 1 Dp Hp Wp 1 - cnt = 0 - for d in ( - slice(-window_size[0]), - slice(-window_size[0], -shift_size[0]), - slice(-shift_size[0], None), - ): - for h in ( - slice(-window_size[1]), - slice(-window_size[1], -shift_size[1]), - slice(-shift_size[1], None), - ): - for w in ( - slice(-window_size[2]), - slice(-window_size[2], -shift_size[2]), - slice(-shift_size[2], None), - ): - img_mask[:, d, h, w, :] = cnt - cnt += 1 - mask_windows = window_partition(img_mask, window_size) # nW, ws[0]*ws[1]*ws[2], 1 - mask_windows = mask_windows.squeeze(-1) # nW, ws[0]*ws[1]*ws[2] - attn_mask = mask_windows.unsqueeze(1) - mask_windows.unsqueeze(2) - attn_mask = attn_mask.masked_fill(attn_mask != 0, float(-100.0)).masked_fill( - attn_mask == 0, float(0.0) - ) - return attn_mask - - -class BasicLayer(nn.Module): - """A basic Swin Transformer layer for one stage. - - Args: - dim (int): Number of feature channels - depth (int): Depths of this stage. - num_heads (int): Number of attention head. - window_size (tuple[int]): Local window size. Default: (1,7,7). - mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. Default: 4. - qkv_bias (bool, optional): If True, add a learnable bias to query, key, value. Default: True - qk_scale (float | None, optional): Override default qk scale of head_dim ** -0.5 if set. - drop (float, optional): Dropout rate. Default: 0.0 - attn_drop (float, optional): Attention dropout rate. Default: 0.0 - drop_path (float | tuple[float], optional): Stochastic depth rate. Default: 0.0 - norm_layer (nn.Module, optional): Normalization layer. Default: nn.LayerNorm - downsample (nn.Module | None, optional): Downsample layer at the end of the layer. Default: None - """ - - def __init__( - self, - dim, - depth, - num_heads, - window_size=(1, 7, 7), - mlp_ratio=4.0, - qkv_bias=False, - qk_scale=None, - drop=0.0, - attn_drop=0.0, - drop_path=0.0, - norm_layer=nn.LayerNorm, - downsample=None, - use_checkpoint=False, - ): - super().__init__() - self.window_size = window_size - self.shift_size = tuple(i // 2 for i in window_size) - self.depth = depth - self.use_checkpoint = use_checkpoint - - # build blocks - self.blocks = nn.ModuleList( - [ - SwinTransformerBlock3D( - dim=dim, - num_heads=num_heads, - window_size=window_size, - shift_size=(0, 0, 0) if (i % 2 == 0) else self.shift_size, - mlp_ratio=mlp_ratio, - qkv_bias=qkv_bias, - qk_scale=qk_scale, - drop=drop, - attn_drop=attn_drop, - drop_path=( - drop_path[i] if isinstance(drop_path, list) else drop_path - ), - norm_layer=norm_layer, - use_checkpoint=use_checkpoint, - ) - for i in range(depth) - ] - ) - - self.downsample = downsample - if self.downsample is not None: - self.downsample = downsample(dim=dim, norm_layer=norm_layer) - - def forward(self, x): - """Forward function. - - Args: - x: Input feature, tensor size (B, C, D, H, W). - """ - # calculate attention mask for SW-MSA - B, C, D, H, W = x.shape - window_size, shift_size = get_window_size( - (D, H, W), self.window_size, self.shift_size - ) - x = rearrange(x, "b c d h w -> b d h w c") - Dp = int(np.ceil(D / window_size[0])) * window_size[0] - Hp = int(np.ceil(H / window_size[1])) * window_size[1] - Wp = int(np.ceil(W / window_size[2])) * window_size[2] - attn_mask = compute_mask(Dp, Hp, Wp, window_size, shift_size, x.device) - for blk in self.blocks: - x = blk(x, attn_mask) - x = x.view(B, D, H, W, -1) - - if self.downsample is not None: - x = self.downsample(x) - x = rearrange(x, "b d h w c -> b c d h w") - return x - - -class PatchEmbed3D(nn.Module): - """Video to Patch Embedding. - - Args: - patch_size (int): Patch token size. Default: (2,4,4). - in_chans (int): Number of input video channels. Default: 3. - embed_dim (int): Number of linear projection output channels. Default: 96. - norm_layer (nn.Module, optional): Normalization layer. Default: None - """ - - def __init__(self, patch_size=(2, 4, 4), in_chans=3, embed_dim=96, norm_layer=None): - super().__init__() - self.patch_size = patch_size - - self.in_chans = in_chans - self.embed_dim = embed_dim - - self.proj = nn.Conv3d( - in_chans, embed_dim, kernel_size=patch_size, stride=patch_size - ) - if norm_layer is not None: - self.norm = norm_layer(embed_dim) - else: - self.norm = None - - def forward(self, x): - """Forward function.""" - # padding - _, _, D, H, W = x.size() - if W % self.patch_size[2] != 0: - x = F.pad(x, (0, self.patch_size[2] - W % self.patch_size[2])) - if H % self.patch_size[1] != 0: - x = F.pad(x, (0, 0, 0, self.patch_size[1] - H % self.patch_size[1])) - if D % self.patch_size[0] != 0: - x = F.pad(x, (0, 0, 0, 0, 0, self.patch_size[0] - D % self.patch_size[0])) - - x = self.proj(x) # B C D Wh Ww - if self.norm is not None: - D, Wh, Ww = x.size(2), x.size(3), x.size(4) - x = x.flatten(2).transpose(1, 2) - x = self.norm(x) - x = x.transpose(1, 2).view(-1, self.embed_dim, D, Wh, Ww) - - return x - - -@BACKBONES.register_module() -class SwinTransformer3D(BaseBackbone): - """Swin Transformer backbone. - A PyTorch impl of : `Swin Transformer: Hierarchical Vision Transformer using Shifted Windows` - - https://arxiv.org/pdf/2103.14030 - - Args: - patch_size (int | tuple(int)): Patch size. Default: (4,4,4). - in_chans (int): Number of input image channels. Default: 3. - embed_dim (int): Number of linear projection output channels. Default: 96. - depths (tuple[int]): Depths of each Swin Transformer stage. - num_heads (tuple[int]): Number of attention head of each stage. - window_size (int): Window size. Default: 7. - mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. Default: 4. - qkv_bias (bool): If True, add a learnable bias to query, key, value. Default: Truee - qk_scale (float): Override default qk scale of head_dim ** -0.5 if set. - drop_rate (float): Dropout rate. - attn_drop_rate (float): Attention dropout rate. Default: 0. - drop_path_rate (float): Stochastic depth rate. Default: 0.2. - norm_layer: Normalization layer. Default: nn.LayerNorm. - patch_norm (bool): If True, add normalization after patch embedding. Default: False. - frozen_stages (int): Stages to be frozen (stop grad and set eval mode). - -1 means not freezing any parameters. - """ - - def __init__( - self, - pretrained=None, - pretrained2d=True, - patch_size=(4, 4, 4), - in_chans=3, - embed_dim=96, - depths=[2, 2, 6, 2], - num_heads=[3, 6, 12, 24], - window_size=(2, 7, 7), - out_indices=(0, 1, 2, 3), - mlp_ratio=4.0, - qkv_bias=True, - qk_scale=None, - drop_rate=0.0, - attn_drop_rate=0.0, - drop_path_rate=0.2, - norm_layer=nn.LayerNorm, - norm_cfg=dict(type="LN"), - patch_norm=False, - frozen_stages=-1, - use_checkpoint=False, - ): - super(SwinTransformer3D, self).__init__() - - self.pretrained = pretrained - self.pretrained2d = pretrained2d - self.num_layers = len(depths) - self.embed_dim = embed_dim - self.patch_norm = patch_norm - self.frozen_stages = frozen_stages - self.window_size = window_size - self.patch_size = patch_size - - # split image into non-overlapping patches - self.patch_embed = PatchEmbed3D( - patch_size=patch_size, - in_chans=in_chans, - embed_dim=embed_dim, - norm_layer=norm_layer if self.patch_norm else None, - ) - - self.pos_drop = nn.Dropout(p=drop_rate) - - # stochastic depth - dpr = [ - x.item() for x in torch.linspace(0, drop_path_rate, sum(depths)) - ] # stochastic depth decay rule - - # build layers - self.layers = nn.ModuleList() - for i_layer in range(self.num_layers): - layer = BasicLayer( - dim=int(embed_dim * 2**i_layer), - depth=depths[i_layer], - num_heads=num_heads[i_layer], - window_size=window_size, - mlp_ratio=mlp_ratio, - qkv_bias=qkv_bias, - qk_scale=qk_scale, - drop=drop_rate, - attn_drop=attn_drop_rate, - drop_path=dpr[sum(depths[:i_layer]) : sum(depths[: i_layer + 1])], - norm_layer=norm_layer, - downsample=PatchMerging if i_layer < self.num_layers - 1 else None, - use_checkpoint=use_checkpoint, - ) - self.layers.append(layer) - - self.num_features = [int(embed_dim * 2**i) for i in range(self.num_layers)] - - # Add a norm layer for each output - for i in out_indices: - layer = build_norm_layer(norm_cfg, self.num_features[i])[1] - layer_name = f"norm{i}" - self.add_module(layer_name, layer) - - def _freeze_stages(self): - if self.frozen_stages >= 0: - self.patch_embed.eval() - for param in self.patch_embed.parameters(): - param.requires_grad = False - - if self.frozen_stages >= 1: - self.pos_drop.eval() - for i in range(0, self.frozen_stages): - m = self.layers[i] - m.eval() - for param in m.parameters(): - param.requires_grad = False - - def inflate_weights(self, logger): - """Inflate the swin2d parameters to swin3d. - - The differences between swin3d and swin2d mainly lie in an extra - axis. To utilize the pretrained parameters in 2d model, - the weight of swin2d models should be inflated to fit in the shapes of - the 3d counterpart. - - Args: - logger (logging.Logger): The logger used to print - debugging infomation. - """ - checkpoint = torch.load(self.pretrained, map_location="cpu") - state_dict = checkpoint["model"] - - # delete relative_position_index since we always re-init it - relative_position_index_keys = [ - k for k in state_dict.keys() if "relative_position_index" in k - ] - for k in relative_position_index_keys: - del state_dict[k] - - # delete attn_mask since we always re-init it - attn_mask_keys = [k for k in state_dict.keys() if "attn_mask" in k] - for k in attn_mask_keys: - del state_dict[k] - - state_dict["patch_embed.proj.weight"] = ( - state_dict["patch_embed.proj.weight"] - .unsqueeze(2) - .repeat(1, 1, self.patch_size[0], 1, 1) - / self.patch_size[0] - ) - - # bicubic interpolate relative_position_bias_table if not match - relative_position_bias_table_keys = [ - k for k in state_dict.keys() if "relative_position_bias_table" in k - ] - for k in relative_position_bias_table_keys: - relative_position_bias_table_pretrained = state_dict[k] - relative_position_bias_table_current = self.state_dict()[k] - L1, nH1 = relative_position_bias_table_pretrained.size() - L2, nH2 = relative_position_bias_table_current.size() - L2 = (2 * self.window_size[1] - 1) * (2 * self.window_size[2] - 1) - wd = self.window_size[0] - if nH1 != nH2: - logger.warning(f"Error in loading {k}, passing") - else: - if L1 != L2: - S1 = int(L1**0.5) - relative_position_bias_table_pretrained_resized = ( - torch.nn.functional.interpolate( - relative_position_bias_table_pretrained.permute(1, 0).view( - 1, nH1, S1, S1 - ), - size=( - 2 * self.window_size[1] - 1, - 2 * self.window_size[2] - 1, - ), - mode="bicubic", - ) - ) - relative_position_bias_table_pretrained = ( - relative_position_bias_table_pretrained_resized.view( - nH2, L2 - ).permute(1, 0) - ) - state_dict[k] = relative_position_bias_table_pretrained.repeat( - 2 * wd - 1, 1 - ) - - msg = self.load_state_dict(state_dict, strict=False) - logger.info(msg) - logger.info(f"=> loaded successfully '{self.pretrained}'") - del checkpoint - torch.cuda.empty_cache() - - def init_weights(self, pretrained=None): - """Initialize the weights in backbone. - - Args: - pretrained (str, optional): Path to pre-trained weights. - Defaults to None. - """ - - def _init_weights(m): - if isinstance(m, nn.Linear): - trunc_normal_(m.weight, std=0.02) - if isinstance(m, nn.Linear) and m.bias is not None: - nn.init.constant_(m.bias, 0) - elif isinstance(m, nn.LayerNorm): - nn.init.constant_(m.bias, 0) - nn.init.constant_(m.weight, 1.0) - - if pretrained: - self.pretrained = pretrained - if isinstance(self.pretrained, str): - self.apply(_init_weights) - logger = get_root_logger() - logger.info(f"load model from: {self.pretrained}") - - if self.pretrained2d: - # Inflate 2D model into 3D model. - self.inflate_weights(logger) - else: - # Directly load 3D model. - load_checkpoint(self, self.pretrained, strict=False, logger=logger) - elif self.pretrained is None: - self.apply(_init_weights) - else: - raise TypeError("pretrained must be a str or None") - - def forward(self, x): - """Forward function.""" - x = self.patch_embed(x) - - x = self.pos_drop(x) - - outputs = [] - for i, layer in enumerate(self.layers): - x = layer(x.contiguous()) - x = rearrange(x, "n c d h w -> n d h w c") - if i == len(self.layers) - 1: - norm_layer = getattr(self, f"norm{i}") - else: - norm_layer = getattr(self, f"norm{i+1}") - x = norm_layer(x) - x = rearrange(x, "n d h w c -> n c d h w") - outputs.append(x) - - res = {} - res["embed"] = x - res["outputs"] = outputs - - return res - - def train(self, mode=True): - """Convert the model into training mode while keep layers freezed.""" - super(SwinTransformer3D, self).train(mode) - self._freeze_stages() - - -if __name__ == "__main__": - model = SwinTransformer3D( - embed_dim=128, - patch_size=(4, 4, 4), - depths=[2, 2, 18, 2], - num_heads=[4, 8, 16, 32], - window_size=(8, 7, 7), - mlp_ratio=4, - qkv_bias=True, - qk_scale=None, - drop_rate=0.0, - attn_drop_rate=0.0, - drop_path_rate=0.2, - patch_norm=True, - ) - inputs = torch.randn(1, 3, 32, 224, 224) - outputs = model(inputs) - pretrained_weights = "pretrained/swin_base_patch4_window7_224_22k.pth" - print(f"Loading pretrained from --- {pretrained_weights}") - model.init_weights(pretrained=pretrained_weights) - - for k, v in outputs.items(): - print(f"Output length --- {len(outputs)}, Output shape --- {outputs[k].shape}") diff --git a/video/fake-stormer/model_code/models/networks/backbones/vit.py b/video/fake-stormer/model_code/models/networks/backbones/vit.py deleted file mode 100644 index 40fa725b365eb93d5abf26143a722b2c051c831c..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/backbones/vit.py +++ /dev/null @@ -1,1271 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) OpenMMLab. All rights reserved. -import math -from functools import partial -from typing import Dict, Union - -import torch -import torch.nn as nn -import torch.nn.functional as F -import torch.utils.checkpoint as checkpoint -from einops import rearrange, reduce, repeat -from models.builder import BACKBONES -from timm.models.layers import drop_path, to_2tuple, trunc_normal_ - -from ..common import BN3D_MOMENTUM -from ..pose_efficientNet import EfficientNet -from .base import BaseBackbone -from .efficientNet import get_model_params - - -def get_abs_pos(abs_pos, h, w, ori_h, ori_w, has_cls_token=True): - """ - Calculate absolute positional embeddings. If needed, resize embeddings and remove cls_token - dimension for the original embeddings. - Args: - abs_pos (Tensor): absolute positional embeddings with (1, num_position, C). - has_cls_token (bool): If true, has 1 embedding in abs_pos for cls token. - hw (Tuple): size of input image tokens. - - Returns: - Absolute positional embeddings after processing with shape (1, H, W, C) - """ - cls_token = None - B, L, C = abs_pos.shape - if has_cls_token: - cls_token = abs_pos[:, 0:1] - abs_pos = abs_pos[:, 1:] - - if ori_h != h or ori_w != w: - new_abs_pos = ( - F.interpolate( - abs_pos.reshape(1, ori_h, ori_w, -1).permute(0, 3, 1, 2), - size=(h, w), - mode="bicubic", - align_corners=False, - ) - .permute(0, 2, 3, 1) - .reshape(B, -1, C) - ) - - else: - new_abs_pos = abs_pos - - if cls_token is not None: - new_abs_pos = torch.cat([cls_token, new_abs_pos], dim=1) - return new_abs_pos - - -class DropPath(nn.Module): - """Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).""" - - def __init__(self, drop_prob=None): - super(DropPath, self).__init__() - self.drop_prob = drop_prob - - def forward(self, x): - return drop_path(x, self.drop_prob, self.training) - - def extra_repr(self): - return "p={}".format(self.drop_prob) - - -class Mlp(nn.Module): - def __init__( - self, - in_features, - hidden_features=None, - out_features=None, - act_layer=nn.GELU, - drop=0.0, - ): - super().__init__() - out_features = out_features or in_features - hidden_features = hidden_features or in_features - self.fc1 = nn.Linear(in_features, hidden_features) - self.act = act_layer() - self.fc2 = nn.Linear(hidden_features, out_features) - self.drop = nn.Dropout(drop) - - def forward(self, x): - x = self.fc1(x) - x = self.act(x) - x = self.fc2(x) - x = self.drop(x) - return x - - -class Attention(nn.Module): - def __init__( - self, - dim, - num_heads=8, - qkv_bias=False, - qk_scale=None, - attn_drop=0.0, - proj_drop=0.0, - attn_head_dim=None, - att_dimension=None, - ): - super().__init__() - self.num_heads = num_heads - head_dim = dim // num_heads - self.dim = dim - - if attn_head_dim is not None: - head_dim = attn_head_dim - all_head_dim = head_dim * self.num_heads - - self.scale = qk_scale or head_dim**-0.5 - - self.qkv = nn.Linear(dim, all_head_dim * 3, bias=qkv_bias) - - self.attn_drop = nn.Dropout(attn_drop) - self.proj = nn.Linear(all_head_dim, dim) - self.proj_drop = nn.Dropout(proj_drop) - - self.attn_cam = None - self.attn = None - self.v = None - self.v_cam = None - self.attn_gradients = None - - def get_attn(self): - return self.attn - - def save_attn(self, attn): - self.attn = attn - - def save_attn_cam(self, cam): - self.attn_cam = cam - - def get_attn_cam(self): - return self.attn_cam - - def get_v(self): - return self.v - - def save_v(self, v): - self.v = v - - def save_v_cam(self, cam): - self.v_cam = cam - - def get_v_cam(self): - return self.v_cam - - def save_attn_gradients(self, attn_gradients): - self.attn_gradients = attn_gradients - - def get_attn_gradients(self): - return self.attn_gradients - - def forward(self, x, b_size, **kwargs): - B, N, C = x.shape - # mask = None - - # if 'maskout_pes' in kwargs.keys(): - # mask = kwargs['maskout_pes'] - # T = mask.shape[1] - # num_tokens = mask.shape[2]*mask.shape[3] - - # if num_tokens == (N-1): - # mask = rearrange(mask, 'b t h w -> (b t) (h w)', b=b_size, t=T, h=mask.shape[2], w= mask.shape[3]).unsqueeze(1) - # mask = mask.unsqueeze(3) - # mask = mask.repeat(1, self.num_heads, 1, num_tokens+1) - # mask = torch.cat((torch.ones((b_size*T, self.num_heads, 1, num_tokens+1)).cuda(), mask), 2) - # else: - # mask = rearrange(mask, 'b t h w -> (b h w) t', b=b_size, t=T, h=mask.shape[2], w= mask.shape[3]).unsqueeze(1) - # mask = mask.unsqueeze(3) - # mask = mask.repeat(1, self.num_heads, 1, T+1) - # mask = torch.cat((torch.ones((b_size*num_tokens, self.num_heads, 1, T+1)).cuda(), mask), 2) - - qkv = self.qkv(x) - qkv = qkv.reshape(B, N, 3, self.num_heads, -1).permute( - 2, 0, 3, 1, 4 - ) # 3, B (BxT or BxN), H, N, C - q, k, v = ( - qkv[0], - qkv[1], - qkv[2], - ) # make torchscript happy (cannot use tensor as tuple) - - # self.save_v(v) - - q = q * self.scale - attn = q @ k.transpose(-2, -1) - - # if mask is not None: - # attn = attn.masked_fill(mask == 0, float("-1e20")) - - attn = attn.softmax(dim=-1) - attn = self.attn_drop(attn) - - # self.save_attn(attn) - # attn.register_hook(self.save_attn_gradients) - - x = (attn @ v).transpose(1, 2).reshape(B, N, -1) - x = self.proj(x) - x = self.proj_drop(x) - - return x - - -class CrossAttention(nn.Module): - def __init__( - self, - dim, - num_heads=8, - qkv_bias=False, - qk_scale=None, - attn_drop=0.0, - proj_drop=0.0, - attn_head_dim=None, - att_dimension="spatial", - ): - """ - Implementation for cross attention through dimension - """ - super().__init__() - self.num_heads = num_heads - head_dim = dim // num_heads - self.dim = dim - - if attn_head_dim is not None: - head_dim = attn_head_dim - all_head_dim = head_dim * self.num_heads - - self.scale = qk_scale or head_dim**-0.5 - - self.qkv = nn.Linear(dim, all_head_dim * 3, bias=qkv_bias) - - self.attn_drop = nn.Dropout(attn_drop) - self.proj = nn.Linear(all_head_dim, dim) - self.proj_drop = nn.Dropout(proj_drop) - - assert att_dimension in ["spatial", "temporal"] - self.att_dimension = att_dimension - - def forward(self, x, b_size): - B, N, C = ( - x.shape - ) # N can be T or HW // P**2, B can be previous reshaped from self.batch_size * T|B - T = B // b_size - - qkv = self.qkv(x) - qkv = qkv.reshape(b_size, T, N, 3, self.num_heads, -1).permute(3, 0, 4, 1, 2, 5) - q, k, v = ( - qkv[0], - qkv[1], - qkv[2], - ) # make torchscript happy (cannot use tensor as tuple) - - # Define the window - window = torch.tensor([-2, -1, 0, 1, 2]).cuda() - - # Start computing locally cross self-attention - q_scale = q * self.scale - - # Initialize attn weights - attn = torch.zeros((b_size, self.num_heads, T, N, N), dtype=torch.float).cuda() - - if self.att_dimension == "spatial": - sqrt_N = int(math.sqrt(N)) - for w in window: - i_indices = torch.arange(1, T).cuda() - j_indices = torch.arange(0, N).cuda() - - i_valid = (i_indices + w >= 0) & (i_indices + w < T) - j_valid = (j_indices + sqrt_N * w >= 0) & (j_indices + sqrt_N * w < N) - - i_indices = i_indices[i_valid] - j_indices = j_indices[j_valid] - - attn[ - :, :, torch.cat((torch.zeros(1, dtype=int).cuda(), i_indices + w)) - ][:, :, :, j_indices][..., j_indices + sqrt_N * w] = q_scale[ - :, :, torch.cat((torch.zeros(1, dtype=int).cuda(), i_indices)) - ][ - :, :, :, j_indices - ] @ k[ - :, :, torch.cat((torch.zeros(1, dtype=int).cuda(), i_indices + w)) - ][ - :, :, :, j_indices + sqrt_N * w - ].transpose( - -2, -1 - ) - else: - sqrt_T = int(math.sqrt(T)) - - for w in window: - i_indices = torch.arange(0, T).cuda() - j_indices = torch.arange(1, N).cuda() - - i_valid = (i_indices + sqrt_T * w >= 0) & (i_indices + sqrt_T * w < T) - j_valid = (j_indices + w >= 1) & (j_indices + w < N) - - i_indices = i_indices[i_valid] - j_indices = j_indices[j_valid] - - attn[:, :, i_indices + sqrt_T * w][ - :, :, :, torch.cat((torch.zeros(1, dtype=int).cuda(), j_indices)) - ][ - ..., torch.cat((torch.zeros(1, dtype=int).cuda(), j_indices + w)) - ] = q_scale[ - :, :, i_indices - ][ - :, :, :, torch.cat((torch.zeros(1, dtype=int).cuda(), j_indices)) - ] @ k[ - :, :, i_indices + sqrt_T * w - ][ - :, - :, - :, - torch.cat((torch.zeros(1, dtype=int).cuda(), j_indices + w)), - ].transpose( - -2, -1 - ) - - attn = attn.softmax(dim=-1) - attn = self.attn_drop(attn) - - x = (attn @ v).transpose(1, 2).reshape(B, N, -1) - x = self.proj(x) - x = self.proj_drop(x) - - return x - - -class Block(nn.Module): - def __init__( - self, - dim, - num_heads, - mlp_ratio=4.0, - qkv_bias=False, - qk_scale=None, - drop=0.0, - attn_drop=0.0, - drop_path=0.0, - act_layer=nn.GELU, - norm_layer=nn.LayerNorm, - attn_head_dim=None, - ): - super().__init__() - - self.norm1 = norm_layer(dim) - self.attn = Attention( - dim, - num_heads=num_heads, - qkv_bias=qkv_bias, - qk_scale=qk_scale, - attn_drop=attn_drop, - proj_drop=drop, - attn_head_dim=attn_head_dim, - ) - - # NOTE: drop path for stochastic depth, we shall see if this is better than dropout here - self.drop_path = DropPath(drop_path) if drop_path > 0.0 else nn.Identity() - self.norm2 = norm_layer(dim) - mlp_hidden_dim = int(dim * mlp_ratio) - self.mlp = Mlp( - in_features=dim, - hidden_features=mlp_hidden_dim, - act_layer=act_layer, - drop=drop, - ) - - def forward(self, x, b_size, **kwargs): - x = x + self.drop_path(self.attn(self.norm1(x), b_size)) - x = x + self.drop_path(self.mlp(self.norm2(x))) - return x - - -class Block2D(nn.Module): - def __init__( - self, - dim, - num_heads, - mlp_ratio=4.0, - qkv_bias=False, - qk_scale=None, - drop=0.0, - attn_drop=0.0, - drop_path=0.1, - act_layer=nn.GELU, - norm_layer=nn.LayerNorm, - attention_type="divided_space_time", - **kwargs, - ): - super().__init__() - self.attention_type = attention_type - assert attention_type in [ - "divided_space_time", - "space_only", - "joint_space_time", - ] - self.register_token = kwargs.get("register_token") - self.temp_token = kwargs.get("temp_token") - self.return_s_cls_token = kwargs.get("return_s_cls_token") or False - - self.norm1 = norm_layer(dim) - self.attn = Attention( - dim, - num_heads=num_heads, - qkv_bias=qkv_bias, - qk_scale=qk_scale, - attn_drop=attn_drop, - proj_drop=drop, - ) - - ## Temporal Attention Parameters - if self.attention_type == "divided_space_time": - self.temporal_norm1 = norm_layer(dim) - self.temporal_attn = Attention( - dim, - num_heads=num_heads, - qkv_bias=qkv_bias, - qk_scale=qk_scale, - attn_drop=attn_drop, - proj_drop=drop, - att_dimension="temporal", - ) - self.temporal_fc = nn.Linear(dim, dim) - - ## drop path - self.drop_path = DropPath(drop_path) if drop_path > 0.0 else nn.Identity() - self.norm2 = norm_layer(dim) - # self.norm3 = norm_layer(dim) - # self.norm4 = norm_layer(dim) - mlp_hidden_dim = int(dim * mlp_ratio) - self.mlp = Mlp( - in_features=dim, - hidden_features=mlp_hidden_dim, - act_layer=act_layer, - drop=drop, - ) - - def forward(self, x, B, T, W, **kwargs): - if self.temp_token: - num_spatial_tokens = (x.size(1) - 2) // T - else: - num_spatial_tokens = (x.size(1) - 1) // T - H = num_spatial_tokens // W - - if self.attention_type in ["space_only", "joint_space_time"]: - x = x + self.drop_path(self.attn(self.norm1(x))) - x = x + self.drop_path(self.mlp(self.norm2(x))) - return x, None - elif self.attention_type == "divided_space_time": - # init class token - init_cls_token = x[:, 0, :].unsqueeze(1) - if self.temp_token: - init_temp_token = x[:, -1, :].unsqueeze(1) - # init_register_token = x[:, -1, :].unsqueeze(1) - - ## Temporal - if self.temp_token: - t_cls_token = init_temp_token.repeat(1, num_spatial_tokens, 1) - else: - t_cls_token = init_cls_token.repeat(1, num_spatial_tokens, 1) - t_cls_token = rearrange( - t_cls_token, "b (h w) m -> (b h w) m", b=B, h=H, w=W - ).unsqueeze(1) - - if self.temp_token: - xt = x[:, 1:-1, :] - else: - xt = x[:, 1:, :] - - xt = rearrange(xt, "b (h w t) m -> (b h w) t m", b=B, h=H, w=W, t=T) - xt = torch.cat((xt, t_cls_token), 1) - - res_temporal = self.drop_path( - self.temporal_attn(self.temporal_norm1(xt), b_size=B, **kwargs) - ) # Processing temporal att. - res_temporal = self.temporal_fc(res_temporal) - res_temporal, t_cls_token = res_temporal[:, :-1, :], res_temporal[:, -1, :] - res_temporal = rearrange( - res_temporal, "(b h w) t m -> b (h w t) m", b=B, h=H, w=W, t=T - ) - t_cls_token = rearrange( - t_cls_token, "(b h w) m -> b (h w) m", b=B, h=H, w=W - ) - # t_cls_token_avg = torch.mean(t_cls_token, 1, True) ## average for every temporal patch - xt = x[:, 1:-1, :] + res_temporal - - ## Spatial - cls_token = init_cls_token.repeat(1, T, 1) - cls_token = rearrange(cls_token, "b t m -> (b t) m", b=B, t=T).unsqueeze(1) - # register_token = init_register_token.repeat(1, T, 1) - # register_token = rearrange(register_token, 'b t m -> (b t) m', b=B, t=T).unsqueeze(1) - xs = xt - xs = rearrange(xs, "b (h w t) m -> (b t) (h w) m", b=B, h=H, w=W, t=T) - xs = torch.cat((cls_token, xs), 1) - # xs = torch.cat((xs, register_token), 1) - res_spatial = self.drop_path(self.attn(self.norm1(xs), b_size=B, **kwargs)) - - ### Taking care of TEMP token - t_cls_token_avg = torch.mean( - t_cls_token, 1, True - ) ## average for every temporal patch - - ### Taking care of CLS token - cls_token = res_spatial[:, 0, :] - cls_token = rearrange(cls_token, "(b t) m -> b t m", b=B, t=T) - cls_token_avg = torch.mean(cls_token, 1, True) ## averaging for every frame - # register_token = res_spatial[:, -1, :] - # register_token = rearrange(register_token, '(b t) m -> b t m', b=B, t=T) - # register_token_avg = torch.mean(register_token, 1, True) ## averaging for every frame - - res_spatial = res_spatial[:, 1:, :] - res_spatial = rearrange( - res_spatial, "(b t) (h w) m -> b (h w t) m", b=B, h=H, w=W, t=T - ) - res = res_spatial - x = xt - - ## Mlp - # x = torch.cat((t_cls_token_avg, x), 1) + torch.cat((cls_token_avg, res), 1) - xt_ = torch.cat((init_cls_token, x), 1) - if self.temp_token: - xt_ = torch.cat((xt_, t_cls_token_avg), 1) - xs_ = torch.cat((cls_token_avg, res), 1) - if self.temp_token: - xs_ = torch.cat((xs_, init_temp_token), 1) - x = xt_ + xs_ - x = x + self.drop_path(self.mlp(self.norm2(x))) - - # Adding MLP for spatial_cls_token, ttemp_cls_token - # t_cls_token = self.drop_path(self.mlp(self.norm3(t_cls_token))) - # s_cls_token = self.drop_path(self.mlp(self.norm4(cls_token))) - - if self.return_s_cls_token: - return x, cls_token, None - else: - return x, None, None - - -class PatchEmbed(nn.Module): - """Image to Patch Embedding""" - - def __init__(self, img_size=224, patch_size=16, in_chans=3, embed_dim=768, ratio=1): - super().__init__() - img_size = to_2tuple(img_size) - patch_size = to_2tuple(patch_size) - num_patches = ( - (img_size[1] // patch_size[1]) * (img_size[0] // patch_size[0]) * (ratio**2) - ) - self.patch_shape = ( - int(img_size[0] // patch_size[0] * ratio), - int(img_size[1] // patch_size[1] * ratio), - ) - self.origin_patch_shape = ( - int(img_size[0] // patch_size[0]), - int(img_size[1] // patch_size[1]), - ) - self.img_size = img_size - self.patch_size = patch_size - self.num_patches = num_patches - - self.proj = nn.Conv2d( - in_chans, - embed_dim, - kernel_size=patch_size, - stride=(patch_size[0] // ratio), - padding=4 + 2 * (ratio // 2 - 1), - ) - - def forward(self, x, **kwargs): - B, C, H, W = x.shape - x = self.proj(x) - Hp, Wp = x.shape[2], x.shape[3] - - x = x.flatten(2).transpose(1, 2) - return x, (Hp, Wp) - - -class PatchEmbed3D(nn.Module): - """Images to Patch Embedding""" - - def __init__( - self, - img_size=224, - patch_size=16, - in_chans=3, - embed_dim=768, - ratio=1, - low_level=False, - **override_params, - ): - super().__init__() - img_size = to_2tuple(img_size) - patch_size = to_2tuple(patch_size) - num_patches = ( - (img_size[1] // patch_size[1]) * (img_size[0] // patch_size[0]) * (ratio**2) - ) - self.patch_shape = ( - int(img_size[0] // patch_size[0] * ratio), - int(img_size[1] // patch_size[1] * ratio), - ) - self.origin_patch_shape = ( - int(img_size[0] // patch_size[0]), - int(img_size[1] // patch_size[1]), - ) - self.img_size = img_size - self.patch_size = patch_size - self.num_patches = num_patches - self.low_level = low_level - - if not self.low_level: - self.proj = nn.Conv2d( - in_chans, embed_dim, kernel_size=patch_size, stride=patch_size - ) - else: - model_name = "efficientnet-b4" - self.proj = EfficientNet.from_pretrained( - model_name, advprop=True, **override_params - ) - self.fc = nn.Linear(160, embed_dim) - - def forward(self, x): - B, C, T, H, W = x.shape - x = rearrange(x, "b c t h w -> (b t) c h w") - - if not self.low_level: - x = self.proj(x) - else: - endpoints = self.proj.extract_endpoints(x) - x1 = endpoints["reduction_6"] - x2 = endpoints["reduction_5"] - x3 = endpoints["reduction_4"] - x4 = endpoints["reduction_3"] - x5 = endpoints["reduction_2"] - x = x3 - x = x.permute(0, 2, 3, 1) - x = self.fc(x) - x = x.permute(0, 3, 1, 2) - - Hp, Wp = x.shape[2], x.shape[3] - x = x.flatten(2).transpose(1, 2) - return x, T, (Hp, Wp) - - -class HybridEmbed(nn.Module): - """CNN Feature Map Embedding - Extract feature map from CNN, flatten, project to embedding dim. - """ - - def __init__( - self, backbone, img_size=224, feature_size=None, in_chans=3, embed_dim=768 - ): - super().__init__() - assert isinstance(backbone, nn.Module) - img_size = to_2tuple(img_size) - self.img_size = img_size - self.backbone = backbone - if feature_size is None: - with torch.no_grad(): - training = backbone.training - if training: - backbone.eval() - o = self.backbone(torch.zeros(1, in_chans, img_size[0], img_size[1]))[ - -1 - ] - feature_size = o.shape[-2:] - feature_dim = o.shape[1] - backbone.train(training) - else: - feature_size = to_2tuple(feature_size) - feature_dim = self.backbone.feature_info.channels()[-1] - self.num_patches = feature_size[0] * feature_size[1] - self.proj = nn.Linear(feature_dim, embed_dim) - - def forward(self, x): - x = self.backbone(x)[-1] - x = x.flatten(2).transpose(1, 2) - x = self.proj(x) - return x - - -@BACKBONES.register_module() -class ViT(BaseBackbone): - def __init__( - self, - img_size=224, - patch_size=16, - in_chans=3, - num_classes=80, - embed_dim=768, - depth=12, - num_heads=12, - mlp_ratio=4.0, - qkv_bias=False, - qk_scale=None, - drop_rate=0.0, - attn_drop_rate=0.0, - drop_path_rate=0.0, - hybrid_backbone=None, - norm_layer=None, - use_checkpoint=False, - frozen_stages=-1, - ratio=1, - last_norm=True, - class_token=True, - attention_type="space", - patch_padding="pad", - freeze_attn=False, - freeze_ffn=False, - **kwargs, - ): - # Protect mutable default arguments - super(ViT, self).__init__() - norm_layer = norm_layer or partial(nn.LayerNorm, eps=1e-6) - self.num_classes = num_classes - self.num_features = self.embed_dim = ( - embed_dim # num_features for consistency with other models - ) - self.frozen_stages = frozen_stages - self.use_checkpoint = use_checkpoint - self.patch_padding = patch_padding - self.freeze_attn = freeze_attn - self.freeze_ffn = freeze_ffn - self.depth = depth - self.attention_type = attention_type - - if hybrid_backbone is not None: - self.patch_embed = HybridEmbed( - hybrid_backbone, - img_size=img_size, - in_chans=in_chans, - embed_dim=embed_dim, - ) - else: - self.patch_embed = PatchEmbed( - img_size=img_size, - patch_size=patch_size, - in_chans=in_chans, - embed_dim=embed_dim, - ratio=ratio, - ) - num_patches = self.patch_embed.num_patches - - self.cls_token = ( - nn.Parameter(torch.zeros(1, 1, embed_dim)) if class_token else None - ) - - # since the pretraining model has class token - self.pos_embed = nn.Parameter(torch.zeros(1, num_patches + 1, embed_dim)) - - dpr = [ - x.item() for x in torch.linspace(0, drop_path_rate, depth) - ] # stochastic depth decay rule - - self.blocks = nn.ModuleList( - [ - Block( - dim=embed_dim, - num_heads=num_heads, - mlp_ratio=mlp_ratio, - qkv_bias=qkv_bias, - qk_scale=qk_scale, - drop=drop_rate, - attn_drop=attn_drop_rate, - drop_path=dpr[i], - norm_layer=norm_layer, - ) - for i in range(depth) - ] - ) - - self.norm = norm_layer(embed_dim) if last_norm else nn.Identity() - - if self.pos_embed is not None: - trunc_normal_(self.pos_embed, std=0.02) - - self._freeze_stages() - - def _freeze_stages(self): - """Freeze parameters.""" - if self.frozen_stages >= 0: - self.patch_embed.eval() - for param in self.patch_embed.parameters(): - param.requires_grad = False - - for i in range(1, self.frozen_stages + 1): - m = self.blocks[i] - m.eval() - for param in m.parameters(): - param.requires_grad = False - - if self.freeze_attn: - for i in range(0, self.depth): - m = self.blocks[i] - m.attn.eval() - m.norm1.eval() - for param in m.attn.parameters(): - param.requires_grad = False - for param in m.norm1.parameters(): - param.requires_grad = False - - if self.freeze_ffn: - self.pos_embed.requires_grad = False - self.patch_embed.eval() - for param in self.patch_embed.parameters(): - param.requires_grad = False - for i in range(0, self.depth): - m = self.blocks[i] - m.mlp.eval() - m.norm2.eval() - for param in m.mlp.parameters(): - param.requires_grad = False - for param in m.norm2.parameters(): - param.requires_grad = False - - def init_weights(self, pretrained=None): - """Initialize the weights in backbone. - Args: - pretrained (str, optional): Path to pre-trained weights. - Defaults to None. - """ - super().init_weights(pretrained, patch_padding=self.patch_padding) - - if pretrained is None: - - def _init_weights(m): - if isinstance(m, nn.Linear): - trunc_normal_(m.weight, std=0.02) - if isinstance(m, nn.Linear) and m.bias is not None: - nn.init.constant_(m.bias, 0) - elif isinstance(m, nn.LayerNorm): - nn.init.constant_(m.bias, 0) - nn.init.constant_(m.weight, 1.0) - - if self.cls_token is not None: - nn.init.normal_(self.cls_token, std=1e-6) - - self.apply(_init_weights) - - def get_num_layers(self): - return len(self.blocks) - - @torch.jit.ignore - def no_weight_decay(self): - return {"pos_embed", "cls_token"} - - def forward_features(self, x, **kwargs): - B, C, H, W = x.shape - x, (Hp, Wp) = self.patch_embed(x) - - if self.cls_token is not None: - cls_token = self.cls_token.expand(x.shape[0], -1, -1) - x = torch.cat((cls_token, x), dim=1) - - if self.pos_embed is not None: - # fit for multiple GPU training - # since the first element for pos embed (sin-cos manner) is zero, it will cause no difference - # x = x + self.pos_embed[:, 1:] + self.pos_embed[:, :1] - x = x + self.pos_embed - - for blk in self.blocks: - if self.use_checkpoint: - x = checkpoint.checkpoint(blk, x) - else: - x = blk(x, B) - - x = self.norm(x) - res = {} - - if self.cls_token is not None: - x_cls = x[:, :1] - else: - x_cls = torch.mean(x[:, 1:], 1, False) - res["cls"] = x_cls - - xp = x[:, 1:] - xp = xp.permute(0, 2, 1).reshape(B, -1, Hp, Wp).contiguous() - res["embed"] = xp - - return res - - def forward(self, x, **kwargs) -> Union[torch.tensor, Dict[str, torch.tensor]]: - x = self.forward_features(x, **kwargs) - return x - - def train(self, mode=True): - """Convert the model into training mode.""" - super().train(mode) - self._freeze_stages() - - -@BACKBONES.register_module() -class TimeViT(ViT): - def __init__( - self, - img_size=224, - patch_size=16, - in_chans=3, - num_classes=80, - embed_dim=768, - depth=12, - num_heads=12, - mlp_ratio=4, - qkv_bias=False, - qk_scale=None, - drop_rate=0, - attn_drop_rate=0, - drop_path_rate=0, - hybrid_backbone=None, - norm_layer=None, - use_checkpoint=False, - frozen_stages=-1, - ratio=1, - last_norm=True, - class_token=True, - attention_type="space_only", - patch_padding="pad", - freeze_attn=False, - freeze_ffn=False, - num_frames=4, - **kwargs, - ): - super().__init__( - img_size, - patch_size, - in_chans, - num_classes, - embed_dim, - depth, - num_heads, - mlp_ratio, - qkv_bias, - qk_scale, - drop_rate, - attn_drop_rate, - drop_path_rate, - hybrid_backbone, - norm_layer, - use_checkpoint, - frozen_stages, - ratio, - last_norm, - class_token, - attention_type, - patch_padding, - freeze_attn, - freeze_ffn, - **kwargs, - ) - - norm_layer = norm_layer or partial(nn.LayerNorm, eps=1e-6) - register_token = kwargs.get("register_token") or False - temp_token = kwargs.get("temp_token") or False - self.low_level_enhanced = kwargs.get("low_level_enhanced") or False - self.patch_size = patch_size - - # Temporary - # self.patch_embed = PatchEmbed3D( - # img_size=img_size, patch_size=patch_size, in_chans=in_chans, embed_dim=embed_dim, ratio=ratio, - # low_level=True, include_top=False, include_hm_decoder=False) - self.patch_embed = PatchEmbed3D( - img_size=img_size, - patch_size=patch_size, - in_chans=in_chans, - embed_dim=embed_dim, - ratio=ratio, - ) - - self.register_token = ( - nn.Parameter(torch.zeros(1, 1, embed_dim)) if register_token else None - ) - self.temp_token = ( - nn.Parameter(torch.zeros(1, 1, embed_dim)) if temp_token else None - ) - - if self.attention_type != "space_only": - if temp_token: - self.time_embed = nn.Parameter( - torch.zeros(1, num_frames + 1, embed_dim) - ) - else: - self.time_embed = nn.Parameter(torch.zeros(1, num_frames, embed_dim)) - self.time_drop = nn.Dropout(p=drop_rate) - - self.norm_s_cls = norm_layer(embed_dim) - self.norm_t_cls = norm_layer(embed_dim) - - dpr = [ - x.item() for x in torch.linspace(0, drop_path_rate, depth) - ] # stochastic depth decay rule - self.blocks = nn.ModuleList( - [ - Block2D( - dim=embed_dim, - num_heads=num_heads, - mlp_ratio=mlp_ratio, - qkv_bias=qkv_bias, - qk_scale=qk_scale, - drop=drop_rate, - attn_drop=attn_drop_rate, - drop_path=dpr[i], - norm_layer=norm_layer, - attention_type=self.attention_type, - temp_token=temp_token, - register_token=register_token, - return_s_cls_token=True, - ) - for i in range(depth) - ] - ) - - if self.low_level_enhanced: - self.lowconv3d_0 = nn.Conv3d( - 3, - embed_dim // 16, - kernel_size=(3, 4, 4), - stride=(1, 4, 4), - padding=(1, 0, 0), - bias=False, - ) # B x 48 x 4 x 56 x 56 - self.bn_low0 = nn.BatchNorm3d(embed_dim // 16, momentum=BN3D_MOMENTUM) - self.act_low0 = nn.GELU() - self.lowconv3d_01 = nn.Conv3d( - embed_dim // 16, - embed_dim // 4, - kernel_size=(3, 4, 4), - stride=(1, 4, 4), - padding=(1, 0, 0), - bias=False, - ) # B x 48 x 4 x 14 x 14 - self.bn_low01 = nn.BatchNorm3d(embed_dim // 4, momentum=BN3D_MOMENTUM) - self.act_low01 = nn.GELU() - # self.lowmaxpool3d_0 = nn.MaxPool3d(kernel_size=(1, 4, 4), stride=(1, 4, 4), padding=0) # B x 48 x 4 x 14 x 14 - self.lowfc_0 = nn.Linear(embed_dim // 4, embed_dim) - - self.lowconv3d_1 = nn.Conv3d( - embed_dim // 16, - embed_dim // 4, - kernel_size=(3, 2, 2), - stride=(1, 2, 2), - padding=(1, 0, 0), - bias=False, - ) # B x 192 x 4 x 28 x 28 - self.bn_low1 = nn.BatchNorm3d(embed_dim // 4, momentum=BN3D_MOMENTUM) - self.act_low1 = nn.GELU() - self.lowconv3d_11 = nn.Conv3d( - embed_dim // 4, - embed_dim, - kernel_size=(3, 2, 2), - stride=(1, 2, 2), - padding=(1, 0, 0), - bias=False, - ) # B x 192 x 4 x 14 x 14 - self.bn_low11 = nn.BatchNorm3d(embed_dim, momentum=BN3D_MOMENTUM) - self.act_low11 = nn.GELU() - # self.lowmaxpool3d_1 = nn.MaxPool3d(kernel_size=(1,2,2), stride=(1,2,2), padding=0) - self.lowfc_1 = nn.Linear(embed_dim, embed_dim) - - self.lowconv3d_2 = nn.Conv3d( - embed_dim // 4, - embed_dim, - kernel_size=(3, 2, 2), - stride=(1, 2, 2), - padding=(1, 0, 0), - bias=False, - ) # B x 768 x 4 x 14 x 14 - self.bn_low2 = nn.BatchNorm3d(embed_dim, momentum=BN3D_MOMENTUM) - self.act_low2 = nn.GELU() - self.lowconv3d_21 = nn.Conv3d( - embed_dim, - embed_dim, - kernel_size=(3, 3, 3), - stride=(1, 1, 1), - padding=(1, 1, 1), - bias=False, - ) # B x 768 x 4 x 14 x 14 - self.bn_low21 = nn.BatchNorm3d(embed_dim, momentum=BN3D_MOMENTUM) - self.act_low21 = nn.GELU() - # self.lowmaxpool3d_2 = nn.MaxPool3d(kernel_size=(1,1,1), stride=(1,1,1), padding=0) - self.lowfc_2 = nn.Linear(embed_dim, embed_dim) - - self.lowconv3d_3 = nn.Conv3d( - embed_dim, - embed_dim, - kernel_size=(3, 1, 1), - stride=(1, 1, 1), - padding=(1, 0, 0), - bias=False, - ) # B x 768 x 4 x 14 x 14 - self.bn_low3 = nn.BatchNorm3d(embed_dim, momentum=BN3D_MOMENTUM) - self.act_low3 = nn.GELU() - self.lowconv3d_31 = nn.Conv3d( - embed_dim, - embed_dim, - kernel_size=(3, 1, 1), - stride=(1, 1, 1), - padding=(1, 0, 0), - bias=False, - ) # B x 768 x 4 x 14 x 14 - self.bn_low31 = nn.BatchNorm3d(embed_dim, momentum=BN3D_MOMENTUM) - self.act_low31 = nn.GELU() - # self.lowmaxpool3d_3 = nn.MaxPool3d(kernel_size=(1,1,1), stride=(1,1,1), padding=0) - self.lowfc_3 = nn.Linear(embed_dim, embed_dim) - - def init_weights(self, pretrained=None): - super().init_weights(pretrained) - - ## initialization of temporal attention weights - if self.attention_type == "divided_space_time": - print("Initializing weights for temporal FC...") - i = 0 - for m in self.blocks.modules(): - m_str = str(m) - if "Block" in m_str: - if i > 0: - nn.init.constant_(m.temporal_fc.weight, 0) - nn.init.constant_(m.temporal_fc.bias, 0) - i += 1 - - if self.temp_token is not None: - nn.init.normal_(self.temp_token, std=1e-6) - - @torch.jit.ignore - def no_weight_decay(self): - return {"pos_embed", "cls_token", "time_embed"} - - def forward_features(self, x, **kwargs): - B, C, T, H, W = x.shape - - if self.low_level_enhanced: - x_low0 = self.lowconv3d_0(x) - x_low0 = self.bn_low0(x_low0) - x_low0 = self.act_low0(x_low0) - # x_low0_ = self.lowmaxpool3d_0(x_low0) - x_low0_ = self.act_low01(self.bn_low01(self.lowconv3d_01(x_low0))) - x_low0_ = x_low0_.flatten(2).transpose(1, 2) - x_low0_ = self.lowfc_0(x_low0_) - x_low0_ = rearrange( - x_low0_, - "b (t h w) m -> (b t) (h w) m", - b=B, - t=T, - h=H // self.patch_size, - w=W // self.patch_size, - ) - x_low0_ = x_low0_.sigmoid() - x_prev = x_low0 - - x, T, (Hp, Wp) = self.patch_embed(x) - - if self.low_level_enhanced: - x = x_low0_ * x - - if self.cls_token is not None: - cls_token = self.cls_token.expand(x.shape[0], -1, -1) - x = torch.cat((cls_token, x), dim=1) - - # if self.register_token is not None: - # register_token = self.register_token.expand(x.shape[0], -1, -1) - # x = torch.cat((x, register_token), dim=1) - - if self.pos_embed is not None: - # fit for multiple GPU training - # since the first element for pos embed (sin-cos manner) is zero, it will cause no difference - # x = x + self.pos_embed[:, 1:] + self.pos_embed[:, :1] - if x.size(1) != self.pos_embed.size(1): - # Resizing the pos embeds in case they do not match the input at inference - pos_embed = self.pos_embed - cls_pos_embed = pos_embed[0, 0, :].unsqueeze(0).unsqueeze(1) - other_pos_embed = pos_embed[0, 1:, :].unsqueeze(0).transpose(1, 2) - P = int(other_pos_embed.size(2) ** 0.5) - H = x.size(1) // W - other_pos_embed = other_pos_embed.reshape(1, x.size(2), P, P) - new_pos_embed = F.interpolate( - other_pos_embed, size=(H, W), mode="nearest" - ) - new_pos_embed = new_pos_embed.flatten(2) - new_pos_embed = new_pos_embed.transpose(1, 2) - new_pos_embed = torch.cat((cls_pos_embed, new_pos_embed), 1) - x = x + new_pos_embed - else: - x = x + self.pos_embed - - ## Time Embeddings - if self.attention_type != "space_only": - cls_tokens = x[:B, 0, :].unsqueeze(1) - x = x[:, 1:] - x = rearrange(x, "(b t) n m -> (b n) t m", b=B, t=T) - - if self.temp_token is not None: - temp_token = self.temp_token.expand(x.shape[0], -1, -1) - x = torch.cat((x, temp_token), dim=1) - - ## Resizing time embeddings in case they don't match - if T != self.time_embed.size(1) and self.temp_token is None: - time_embed = self.time_embed.transpose(1, 2) - new_time_embed = F.interpolate(time_embed, size=(T), mode="nearest") - new_time_embed = new_time_embed.transpose(1, 2) - x = x + new_time_embed - else: - x = x + self.time_embed - x = self.time_drop(x) - - temp_tokens = x[:B, 0, :].unsqueeze(1) - x = x[:, :-1] - x = rearrange(x, "(b n) t m -> b (n t) m", b=B, t=T) - x = torch.cat((cls_tokens, x), dim=1) - x = torch.cat((x, temp_tokens), dim=1) - - for idx, blk in enumerate(self.blocks): - if self.use_checkpoint: - x = checkpoint.checkpoint(blk, x) - else: - x, s_cls_token, t_cls_token = blk(x, B, T, Wp, **kwargs) - if self.low_level_enhanced: - if (idx + 1) % 4 == 0: - x_low = self.__getattr__(f"lowconv3d_{(idx+1)//4}")(x_prev) - # x_low_ = self.__getattr__(f'lowmaxpool3d_{(idx+1)//4}')(x_low) - x_low = self.__getattr__(f"bn_low{(idx+1)//4}")(x_low) - x_low = self.__getattr__(f"act_low{(idx+1)//4}")(x_low) - x_low_ = self.__getattr__(f"lowconv3d_{(idx+1)//4}1")(x_low) - x_low_ = self.__getattr__(f"bn_low{(idx+1)//4}1")(x_low_) - x_low_ = self.__getattr__(f"act_low{(idx+1)//4}1")(x_low_) - - x_low_ = x_low_.flatten(2).transpose(1, 2) - x_low_ = self.__getattr__(f"lowfc_{(idx+1)//4}")(x_low_) - x_low_ = x_low_.sigmoid() - x[:, 1:-1, :] = x[:, 1:-1, :].clone() * x_low_ - x_prev = x_low - - ### Predictions for space-only baseline - if self.attention_type == "space_only": - x = rearrange(x, "(b t) n m -> b t n m", b=B, t=T) - x = torch.mean(x, 1) # averaging predictions for every frame - - x = self.norm(x) - res = {} - - if self.temp_token is not None: - x_cls = x[:, -1:] - elif self.cls_token is not None: - x_cls = x[:, :1] - else: - x_cls = torch.mean(x[:, 1:-1], 1, False) - res["cls"] = x_cls - - xp = x[:, 1:-1] - xp = xp.permute(0, 2, 1).reshape(B, -1, Hp, Wp).contiguous() - - if self.attention_type != "space_only": - xp = rearrange(xp, "b (m t) h w -> b m t h w", b=B, t=T, h=Hp, w=Wp) - res["embed"] = xp - - if s_cls_token is not None: - s_cls_token = self.norm_s_cls(s_cls_token) - res["s_cls_token"] = s_cls_token - - if t_cls_token is not None: - t_cls_token = self.norm_t_cls(t_cls_token) - res["t_cls_token"] = t_cls_token - - return res diff --git a/video/fake-stormer/model_code/models/networks/backbones/xception.py b/video/fake-stormer/model_code/models/networks/backbones/xception.py deleted file mode 100644 index aeb8e5fa5aae9c3f7cd18ca69c9e6db8139412ab..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/backbones/xception.py +++ /dev/null @@ -1,253 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Creates an Xception Model as defined in: - -Francois Chollet -Xception: Deep Learning with Depthwise Separable Convolutions -https://arxiv.org/pdf/1610.02357.pdf - -This weights ported from the Keras implementation. Achieves the following performance on the validation set: - -Loss:0.9173 Prec@1:78.892 Prec@5:94.292 - -REMEMBER to set your image size to 3x299x299 for both test and validation - -normalize = transforms.Normalize(mean=[0.5, 0.5, 0.5], - std=[0.5, 0.5, 0.5]) - -The resize parameter of the validation transform should be 333, and make sure to center crop at 299x299 -""" - -import os -import sys - -if not (os.getcwd()) in sys.path: - sys.path.append(os.getcwd()) -import math - -import torch -import torch.nn as nn -import torch.nn.functional as F -import torch.utils.model_zoo as model_zoo -from torch.nn import init - -from ...builder import MODELS -from ..common import BN_MOMENTUM, conv_block - -model_urls = { - "xception": "https://www.dropbox.com/s/1hplpzet9d7dv29/xception-c0a72b38.pth.tar?dl=1" -} - - -class SeparableConv2d(nn.Module): - def __init__( - self, - in_channels, - out_channels, - kernel_size=1, - stride=1, - padding=0, - dilation=1, - bias=False, - ): - super(SeparableConv2d, self).__init__() - - self.conv1 = nn.Conv2d( - in_channels, - in_channels, - kernel_size, - stride, - padding, - dilation, - groups=in_channels, - bias=bias, - ) - self.pointwise = nn.Conv2d(in_channels, out_channels, 1, 1, 0, 1, 1, bias=bias) - - def forward(self, x): - x = self.conv1(x) - x = self.pointwise(x) - return x - - -class Block(nn.Module): - def __init__( - self, - in_filters, - out_filters, - reps, - strides=1, - start_with_relu=True, - grow_first=True, - ): - super(Block, self).__init__() - - if out_filters != in_filters or strides != 1: - self.skip = nn.Conv2d( - in_filters, out_filters, 1, stride=strides, bias=False - ) - self.skipbn = nn.BatchNorm2d(out_filters) - else: - self.skip = None - - self.relu = nn.ReLU(inplace=True) - rep = [] - - filters = in_filters - if grow_first: - rep.append(self.relu) - rep.append( - SeparableConv2d( - in_filters, out_filters, 3, stride=1, padding=1, bias=False - ) - ) - rep.append(nn.BatchNorm2d(out_filters)) - filters = out_filters - - for i in range(reps - 1): - rep.append(self.relu) - rep.append( - SeparableConv2d(filters, filters, 3, stride=1, padding=1, bias=False) - ) - rep.append(nn.BatchNorm2d(filters)) - - if not grow_first: - rep.append(self.relu) - rep.append( - SeparableConv2d( - in_filters, out_filters, 3, stride=1, padding=1, bias=False - ) - ) - rep.append(nn.BatchNorm2d(out_filters)) - - if not start_with_relu: - rep = rep[1:] - else: - rep[0] = nn.ReLU(inplace=False) - - if strides != 1: - rep.append(nn.MaxPool2d(3, strides, 1)) - self.rep = nn.Sequential(*rep) - - def forward(self, inp): - x = self.rep(inp) - - if self.skip is not None: - skip = self.skip(inp) - skip = self.skipbn(skip) - else: - skip = inp - - x += skip - return x - - -@MODELS.register_module() -class Xception(nn.Module): - """ - Xception optimized for the ImageNet dataset, as specified in - https://arxiv.org/pdf/1610.02357.pdf - """ - - def __init__(self, num_classes=1000, **kwargs): - """Constructor - Args: - num_classes: number of classes - """ - super(Xception, self).__init__() - - self.num_classes = num_classes - - self.conv1 = nn.Conv2d(3, 32, 3, 2, 0, bias=False) - self.bn1 = nn.BatchNorm2d(32) - self.relu = nn.ReLU(inplace=True) - - self.conv2 = nn.Conv2d(32, 64, 3, bias=False) - self.bn2 = nn.BatchNorm2d(64) - # do relu here - - self.block1 = Block(64, 128, 2, 2, start_with_relu=False, grow_first=True) - self.block2 = Block(128, 256, 2, 2, start_with_relu=True, grow_first=True) - self.block3 = Block(256, 728, 2, 2, start_with_relu=True, grow_first=True) - - self.block4 = Block(728, 728, 3, 1, start_with_relu=True, grow_first=True) - self.block5 = Block(728, 728, 3, 1, start_with_relu=True, grow_first=True) - self.block6 = Block(728, 728, 3, 1, start_with_relu=True, grow_first=True) - self.block7 = Block(728, 728, 3, 1, start_with_relu=True, grow_first=True) - - self.block8 = Block(728, 728, 3, 1, start_with_relu=True, grow_first=True) - self.block9 = Block(728, 728, 3, 1, start_with_relu=True, grow_first=True) - self.block10 = Block(728, 728, 3, 1, start_with_relu=True, grow_first=True) - self.block11 = Block(728, 728, 3, 1, start_with_relu=True, grow_first=True) - - self.block12 = Block(728, 1024, 2, 2, start_with_relu=True, grow_first=False) - - self.conv3 = SeparableConv2d(1024, 1536, 3, 1, 1) - self.bn3 = nn.BatchNorm2d(1536) - - # do relu here - self.conv4 = SeparableConv2d(1536, 2048, 3, 1, 1) - self.bn4 = nn.BatchNorm2d(2048) - - # self.fc = nn.Linear(2048, num_classes) - - def forward(self, x): - x = self.conv1(x) - x = self.bn1(x) - x = self.relu(x) - - x = self.conv2(x) - x = self.bn2(x) - x = self.relu(x) - - x = self.block1(x) - x = self.block2(x) - x = self.block3(x) - x = self.block4(x) - x = self.block5(x) - x = self.block6(x) - x = self.block7(x) - x = self.block8(x) - x = self.block9(x) - x = self.block10(x) - x = self.block11(x) - x = self.block12(x) - - x = self.conv3(x) - x = self.bn3(x) - x = self.relu(x) - - x = self.conv4(x) - x = self.bn4(x) - x = self.relu(x) - - x = F.adaptive_avg_pool2d(x, (1, 1)) - x = x.view(x.size(0), -1) - # x = self.fc(x) - - res = {} - res["cls"] = x - - return res - - def init_weights(self, pretrained=False): - if not pretrained: - for m in self.modules(): - if isinstance(m, nn.Conv2d): - n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels - m.weight.data.normal_(0, math.sqrt(2.0 / n)) - elif isinstance(m, nn.BatchNorm2d): - m.weight.data.fill_(1) - m.bias.data.zero_() - else: - state_dict = model_zoo.load_url(model_urls["xception"]) - state_dict.pop("fc.weight") - state_dict.pop("fc.bias") - self.load_state_dict(state_dict, strict=False) - - -if __name__ == "__main__": - net = Xception() - input = torch.rand((1, 3, 224, 224)) - out = net(input) - print(out["cls"].shape) diff --git a/video/fake-stormer/model_code/models/networks/common.py b/video/fake-stormer/model_code/models/networks/common.py deleted file mode 100644 index 4c694fc6bf6459d4e4211eeae68eb9cabb99858f..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/common.py +++ /dev/null @@ -1,286 +0,0 @@ -# -*- coding: utf-8 -*- -import warnings - -import torch -import torch.nn as nn -import torch.nn.functional as F -from mmcv.cnn import build_upsample_layer - -BN_MOMENTUM = 0.1 -BN3D_MOMENTUM = 0.05 # small for small batch size - - -def point_wise_block(inplanes, outplanes): - return nn.Sequential( - nn.Conv2d( - in_channels=inplanes, - out_channels=outplanes, - kernel_size=1, - padding=0, - stride=1, - bias=False, - ), - nn.BatchNorm2d(outplanes, momentum=BN_MOMENTUM), - nn.ReLU(inplace=True), - ) - - -def conv_block(inplanes, outplanes, kernel_size, stride=1, padding=0): - return nn.Sequential( - nn.Conv2d( - in_channels=inplanes, - out_channels=outplanes, - kernel_size=kernel_size, - padding=padding, - stride=stride, - bias=False, - ), - nn.BatchNorm2d(outplanes, momentum=BN_MOMENTUM), - nn.ReLU(inplace=True), - ) - - -def conv3x3(in_planes, out_planes, stride=1): - """3x3 convolution with padding""" - return nn.Conv2d( - in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=False - ) - - -def conv3d_block( - inplanes, - outplanes, - kernel_size=(3, 1, 1), - stride=(1, 1, 1), - padding=0, - bias=False, - inplace=False, - act=nn.GELU, -): - """ - General conv3d block for handling 3d feature maps - """ - return nn.Sequential( - nn.Conv3d( - inplanes, - outplanes, - kernel_size=kernel_size, - stride=stride, - padding=padding, - bias=bias, - ), - nn.BatchNorm3d(outplanes, momentum=BN3D_MOMENTUM), - act(), - ) - - -def deconv3d_block( - inplanes, - outplanes, - kernel_size=(2, 4, 4), - stride=(2, 2, 2), - padding=(0, 1, 1), - bias=False, - inplace=False, - out_padding=(0, 1, 1), - act=None, -): - """ - General Transpose 3D Convolution for handling 3D feature maps - """ - layers = [] - layers.append( - build_upsample_layer( - dict(type="deconv3d"), - in_channels=inplanes, - out_channels=outplanes, - kernel_size=kernel_size, - stride=stride, - padding=padding, - output_padding=out_padding, - bias=bias, - ) - ) - layers.append(nn.BatchNorm3d(outplanes)) - - if act is not None: - layers.append(act()) - - return nn.Sequential(*layers) - - -def resize( - input, - size=None, - scale_factor=None, - mode="nearest", - align_corners=None, - warning=True, -): - if warning: - if size is not None and align_corners: - input_h, input_w = tuple(int(x) for x in input.shape[2:]) - output_h, output_w = tuple(int(x) for x in size) - if output_h > input_h or output_w > output_h: - if ( - (output_h > 1 and output_w > 1 and input_h > 1 and input_w > 1) - and (output_h - 1) % (input_h - 1) - and (output_w - 1) % (input_w - 1) - ): - warnings.warn( - f"When align_corners={align_corners}, " - "the output would more aligned if " - f"input size {(input_h, input_w)} is `x+1` and " - f"out size {(output_h, output_w)} is `nx+1`" - ) - if isinstance(size, torch.Size): - size = tuple(int(x) for x in size) - return F.interpolate(input, size, scale_factor, mode, align_corners) - - -class InceptionBlock(nn.Module): - def __init__(self, inplanes, outplanes, stride=1, pool_size=3): - self.inplanes = inplanes - self.outplanes = outplanes - self.stride = stride - self.pool_size = pool_size - super(InceptionBlock, self).__init__() - - self.pw_block = point_wise_block(self.inplanes, self.outplanes // 4) - self.mp_layer = nn.MaxPool2d( - kernel_size=self.pool_size, stride=stride, padding=1 - ) - self.conv3_block = conv_block( - self.outplanes // 4, self.outplanes // 4, kernel_size=3, stride=1, padding=1 - ) - self.conv5_block = conv_block( - self.outplanes // 4, self.outplanes // 4, kernel_size=5, stride=1, padding=2 - ) - - def forward(self, x): - x1 = self.pw_block(x) - - x2 = self.pw_block(x) - x2 = self.conv3_block(x2) - - x3 = self.pw_block(x) - x3 = self.conv5_block(x3) - - x4 = self.mp_layer(x) - x4 = self.pw_block(x4) - - x = torch.cat((x1, x2, x3, x4), dim=1) - return x - - -class InceptionBlock3D(nn.Module): - def __init__(self, inplanes, outplanes, stride=1, pool_size=3): - self.inplanes = inplanes - self.outplanes = outplanes - self.stride = stride - self.pool_size = pool_size - super(InceptionBlock3D, self).__init__() - - self.pw_block = conv3d_block( - self.inplanes, - self.outplanes // 4, - kernel_size=(1, 1, 1), - stride=(1, 1, 1), - act=nn.ReLU, - ) - self.mp_layer = nn.MaxPool3d( - kernel_size=(self.pool_size, 1, 1), stride=stride, padding=(1, 0, 0) - ) - self.conv3_block = conv3d_block( - self.outplanes // 4, - self.outplanes // 4, - kernel_size=(3, 1, 1), - stride=1, - padding=(1, 0, 0), - act=nn.ReLU, - ) - self.conv5_block = conv3d_block( - self.outplanes // 4, - self.outplanes // 4, - kernel_size=(5, 1, 1), - stride=1, - padding=(2, 0, 0), - act=nn.ReLU, - ) - - def forward(self, x): - x1 = self.pw_block(x) - - x2 = self.pw_block(x) - x2 = self.conv3_block(x2) - - x3 = self.pw_block(x) - x3 = self.conv5_block(x3) - - x4 = self.mp_layer(x) - x4 = self.pw_block(x4) - - x = torch.cat((x1, x2, x3, x4), dim=1) - return x - - -class SELayer(nn.Module): - def __init__(self, channel, reduction=16): - super(SELayer, self).__init__() - self.avg_pool = nn.AdaptiveAvgPool2d(1) - self.fc = nn.Sequential( - nn.Linear(channel, channel // reduction, bias=False), - nn.ReLU(inplace=True), - nn.Linear(channel // reduction, channel, bias=False), - nn.Sigmoid(), - ) - - def forward(self, x): - b, c, _, _ = x.size() - y = self.avg_pool(x).view(b, c) - y = self.fc(y).view(b, c, 1, 1) - return x * y.expand_as(x) - - -class Texture_Enhance(nn.Module): - def __init__(self, num_features): - super().__init__() - # self.output_features=num_features - self.output_features = num_features * 4 - self.output_features_d = num_features - self.conv0 = nn.Conv2d(num_features, num_features, 1) - self.conv1 = nn.Conv2d(num_features, num_features, 3, padding=1) - self.bn1 = nn.BatchNorm2d(num_features) - self.conv2 = nn.Conv2d(num_features * 2, num_features, 3, padding=1) - self.bn2 = nn.BatchNorm2d(2 * num_features) - self.conv3 = nn.Conv2d(num_features * 3, num_features, 3, padding=1) - self.bn3 = nn.BatchNorm2d(3 * num_features) - self.conv_last = nn.Conv2d(num_features * 4, num_features * 4, 1) - self.bn4 = nn.BatchNorm2d(4 * num_features) - self.bn_last = nn.BatchNorm2d(num_features * 4) - - def forward(self, feature_maps, attention_maps=(1, 1)): - B, N, H, W = feature_maps.shape - - if type(attention_maps) == tuple: - attention_size = (int(H * attention_maps[0]), int(W * attention_maps[1])) - else: - attention_size = (attention_maps.shape[2], attention_maps.shape[3]) - - feature_maps_d = F.adaptive_avg_pool2d(feature_maps, attention_size) - feature_maps = feature_maps - F.interpolate( - feature_maps_d, - (feature_maps.shape[2], feature_maps.shape[3]), - mode="nearest", - ) - feature_maps0 = self.conv0(feature_maps) - feature_maps1 = self.conv1(F.relu(self.bn1(feature_maps0), inplace=True)) - feature_maps1_ = torch.cat([feature_maps0, feature_maps1], dim=1) - feature_maps2 = self.conv2(F.relu(self.bn2(feature_maps1_), inplace=True)) - feature_maps2_ = torch.cat([feature_maps1_, feature_maps2], dim=1) - feature_maps3 = self.conv3(F.relu(self.bn3(feature_maps2_), inplace=True)) - feature_maps3_ = torch.cat([feature_maps2_, feature_maps3], dim=1) - feature_maps = self.bn_last( - self.conv_last(F.relu(self.bn4(feature_maps3_), inplace=True)) - ) - return feature_maps diff --git a/video/fake-stormer/model_code/models/networks/detectors/__init__.py b/video/fake-stormer/model_code/models/networks/detectors/__init__.py deleted file mode 100644 index b4ae7526c86df36e6ffc0adb335e13975e53def0..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/detectors/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# -*- coding:utf-8 -*- -from .base import BaseDetector -from .topdown import TopDownDetector - -__all__ = ["BaseDetector", "TopDownDetector"] diff --git a/video/fake-stormer/model_code/models/networks/detectors/base.py b/video/fake-stormer/model_code/models/networks/detectors/base.py deleted file mode 100644 index b22c4cb88eb959bf0c3b81811e9561b1a1b85a58..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/detectors/base.py +++ /dev/null @@ -1,145 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) OpenMMLab. All rights reserved. -import os -import sys - -if not os.getcwd() in sys.path: - sys.path.append(os.getcwd()) -from abc import ABCMeta, abstractmethod -from collections import OrderedDict -from typing import Tuple, Union - -import torch -import torch.distributed as dist -import torch.nn as nn -from models.builder import DETECTORS - - -@DETECTORS.register_module() -class BaseDetector(nn.Module, metaclass=ABCMeta): - """Base class for pose detectors. - - All recognizers should subclass it. - All subclass should overwrite: - Methods:`forward_train`, supporting to forward when training. - Methods:`forward_test`, supporting to forward when testing. - - Args: - backbone (dict): Backbone modules to extract feature. - head (dict): Head modules to give output. - train_cfg (dict): Config for training. Default: None. - test_cfg (dict): Config for testing. Default: None. - """ - - @abstractmethod - def forward_train(self, img, img_metas, **kwargs): - """Defines the computation performed at training.""" - - @abstractmethod - def forward_test(self, img, img_metas, **kwargs): - """Defines the computation performed at testing.""" - - @abstractmethod - def forward(self, img, img_metas, return_loss=True, **kwargs): - """Forward function.""" - - @staticmethod - def _parse_losses(losses): - """Parse the raw outputs (losses) of the network. - - Args: - losses (dict): Raw output of the network, which usually contain - losses and other necessary information. - - Returns: - tuple[Tensor, dict]: (loss, log_vars), loss is the loss tensor \ - which may be a weighted sum of all losses, log_vars \ - contains all the variables to be sent to the logger. - """ - log_vars = OrderedDict() - for loss_name, loss_value in losses.items(): - if isinstance(loss_value, torch.Tensor): - log_vars[loss_name] = loss_value.mean() - elif isinstance(loss_value, float): - log_vars[loss_name] = loss_value - elif isinstance(loss_value, list): - log_vars[loss_name] = sum(_loss.mean() for _loss in loss_value) - else: - raise TypeError( - f"{loss_name} is not a tensor or list of tensors or float" - ) - - loss = sum(_value for _key, _value in log_vars.items() if "loss" in _key) - - log_vars["loss"] = loss - for loss_name, loss_value in log_vars.items(): - # reduce loss when distributed training - if not isinstance(loss_value, float): - if dist.is_available() and dist.is_initialized(): - loss_value = loss_value.data.clone() - dist.all_reduce(loss_value.div_(dist.get_world_size())) - log_vars[loss_name] = loss_value.item() - else: - log_vars[loss_name] = loss_value - - return loss, log_vars - - def train_step(self, data_batch, optimizer, **kwargs): - """The iteration step during training. - - This method defines an iteration step during training, except for the - back propagation and optimizer updating, which are done in an optimizer - hook. Note that in some complicated cases or models, the whole process - including back propagation and optimizer updating is also defined in - this method, such as GAN. - - Args: - data_batch (dict): The output of dataloader. - optimizer (:obj:`torch.optim.Optimizer` | dict): The optimizer of - runner is passed to ``train_step()``. This argument is unused - and reserved. - - Returns: - dict: It should contain at least 3 keys: ``loss``, ``log_vars``, - ``num_samples``. - ``loss`` is a tensor for back propagation, which can be a - weighted sum of multiple losses. - ``log_vars`` contains all the variables to be sent to the - logger. - ``num_samples`` indicates the batch size (when the model is - DDP, it means the batch size on each GPU), which is used for - averaging the logs. - """ - losses = self.forward(**data_batch) - - loss, log_vars = self._parse_losses(losses) - - outputs = dict( - loss=loss, - log_vars=log_vars, - num_samples=len(next(iter(data_batch.values()))), - ) - - return outputs - - def val_step(self, data_batch, optimizer, **kwargs): - """The iteration step during validation. - - This method shares the same signature as :func:`train_step`, but used - during val epochs. Note that the evaluation after training epochs is - not implemented with this method, but an evaluation hook. - """ - results = self.forward(return_loss=False, **data_batch) - - outputs = dict(results=results) - - return outputs - - # @abstractmethod - # def show_result(self, **kwargs): - # """Visualize the results.""" - # raise NotImplementedError - - -if __name__ == "__main__": - print(BaseDetector._version) diff --git a/video/fake-stormer/model_code/models/networks/detectors/topdown.py b/video/fake-stormer/model_code/models/networks/detectors/topdown.py deleted file mode 100644 index 74f523d8c1b22d626d3f8909dc4ddd8a48fc50be..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/detectors/topdown.py +++ /dev/null @@ -1,174 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) OpenMMLab. All rights reserved. -import warnings - -import mmcv -import numpy as np - -try: - from mmcv.runner import auto_fp16 -except: - raise ValueError("Please try to install mmcv==1.3.9") - -from ...builder import BACKBONES, DETECTORS, HEADS, NECKS -from .base import BaseDetector - - -@DETECTORS.register_module() -class TopDownDetector(BaseDetector): - """Top-down pose detectors. - - Args: - backbone (dict): Backbone modules to extract feature. - keypoint_head (dict): Keypoint head to process feature. - train_cfg (dict): Config for training. Default: None. - test_cfg (dict): Config for testing. Default: None. - pretrained (str): Path to the pretrained models. - loss_pose (None): Deprecated arguments. Please use - `loss_keypoint` for heads instead. - """ - - def __init__( - self, - backbone, - neck=None, - keypoint_head=None, - train_cfg=None, - test_cfg=None, - loss_pose=None, - **kwargs, - ): - super().__init__() - self.fp16_enabled = False - - self.backbone = BACKBONES.build(backbone) - - self.train_cfg = train_cfg - self.test_cfg = test_cfg - - if neck is not None: - self.neck = NECKS.build(neck) - - if keypoint_head is not None: - keypoint_head["train_cfg"] = train_cfg - keypoint_head["test_cfg"] = test_cfg - - if "loss_keypoint" not in keypoint_head and loss_pose is not None: - warnings.warn( - "`loss_pose` for TopDown is deprecated, " - "use `loss_keypoint` for heads instead. See " - "https://github.com/open-mmlab/mmpose/pull/382" - " for more information.", - DeprecationWarning, - ) - keypoint_head["loss_keypoint"] = loss_pose - - self.keypoint_head = HEADS.build(keypoint_head) - - @property - def with_neck(self): - """Check if has neck.""" - return hasattr(self, "neck") - - @property - def with_keypoint(self): - """Check if has keypoint_head.""" - return hasattr(self, "keypoint_head") - - def init_weights(self, pretrained=None): - """Weight initialization for model.""" - self.backbone.init_weights(pretrained=pretrained) - if self.with_neck: - self.neck.init_weights() - if self.with_keypoint: - self.keypoint_head.init_weights() - - def forward(self, img, **kwargs): - output = self.backbone(img, **kwargs) - - if self.with_neck: - output = self.neck(output, **kwargs) - - if self.with_keypoint: - output = self.keypoint_head(output, **kwargs) - - return output - - def forward_train(self, img, target, target_weight, img_metas, **kwargs): - """Defines the computation performed at every call when training.""" - output = self.backbone(img) - if self.with_neck: - output = self.neck(output) - if self.with_keypoint: - output = self.keypoint_head(output) - - # if return loss - losses = dict() - if self.with_keypoint: - keypoint_losses = self.keypoint_head.get_loss(output, target, target_weight) - losses.update(keypoint_losses) - keypoint_accuracy = self.keypoint_head.get_accuracy( - output, target, target_weight - ) - losses.update(keypoint_accuracy) - - return losses - - def forward_test(self, img, img_metas, return_heatmap=False, **kwargs): - """Defines the computation performed at every call when testing.""" - assert img.size(0) == len(img_metas) - batch_size, _, img_height, img_width = img.shape - if batch_size > 1: - assert "bbox_id" in img_metas[0] - - result = {} - - features = self.backbone(img) - if self.with_neck: - features = self.neck(features) - if self.with_keypoint: - output_heatmap = self.keypoint_head.inference_model( - features, flip_pairs=None - ) - - if self.test_cfg.get("flip_test", True): - img_flipped = img.flip(3) - features_flipped = self.backbone(img_flipped) - if self.with_neck: - features_flipped = self.neck(features_flipped) - if self.with_keypoint: - output_flipped_heatmap = self.keypoint_head.inference_model( - features_flipped, img_metas[0]["flip_pairs"] - ) - output_heatmap = (output_heatmap + output_flipped_heatmap) * 0.5 - - if self.with_keypoint: - keypoint_result = self.keypoint_head.decode( - img_metas, output_heatmap, img_size=[img_width, img_height] - ) - result.update(keypoint_result) - - if not return_heatmap: - output_heatmap = None - - result["output_heatmap"] = output_heatmap - - return result - - def forward_dummy(self, img): - """Used for computing network FLOPs. - - See ``tools/get_flops.py``. - - Args: - img (torch.Tensor): Input image. - - Returns: - Tensor: Output heatmaps. - """ - output = self.backbone(img) - if self.with_neck: - output = self.neck(output) - if self.with_keypoint: - output = self.keypoint_head(output) - return output diff --git a/video/fake-stormer/model_code/models/networks/heads/__init__.py b/video/fake-stormer/model_code/models/networks/heads/__init__.py deleted file mode 100644 index d75583dbcccfdb02545e8181f9bc39cf7b71f34f..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/heads/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# -*- coding: utf-8 -*- -from .hm_base_head import TopdownHeatmapBaseHead -from .hm_simple_head import TopdownHeatmapSimpleHead - -__all__ = ["TopdownHeatmapBaseHead", "TopdownHeatmapSimpleHead"] diff --git a/video/fake-stormer/model_code/models/networks/heads/head_design.py b/video/fake-stormer/model_code/models/networks/heads/head_design.py deleted file mode 100644 index 2553470a89638b864507cdfac72271148a2ec06e..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/heads/head_design.py +++ /dev/null @@ -1,225 +0,0 @@ -# -*- coding: utf-8 -*- -from typing import List, Optional, Tuple, Union - -import torch -import torch.nn as nn - -from ..common import conv3d_block, conv_block - - -class ClassificationHead(nn.Module): - def __init__( - self, - in_planes, - out_planes, - stages: Optional[List] = [], - return_prob: bool = False, - last_act: str = "sigmoid", - drop: float = 0.0, - **kwargs, - ): - """ - General classification head - - Args: - stages: indicate a list of outputs of hidden layers between in_planes and out_planes - """ - super().__init__() - self.return_prob = return_prob - self.drop = drop - self.in_planes = in_planes - self.global_avg = kwargs.get("avg_pool") or False - - if self.global_avg: - if kwargs.get("features") == "3D": - self.avg_pool = nn.AdaptiveAvgPool3d((1, 1, 1)) - else: - self.avg_pool = nn.AdaptiveAvgPool3d((1, 1)) - - # Initialize layers - layers = [] - for stage_plane in stages: - layers.append(nn.Linear(in_planes, stage_plane)) - layers.append(nn.GELU()) - layers.append(nn.Dropout(self.drop)) - in_planes = stage_plane - - self.fc1 = nn.Sequential(*layers) if len(layers) else nn.Identity() - self.fc_out = nn.Linear(self.in_planes, out_planes) - - if last_act == "sigmoid": - self.act = nn.Sigmoid() - else: - self.act = nn.Softmax(dim=-1) - - def forward(self, x) -> torch.tensor: - B = x.shape[0] - - if self.global_avg: - num_channels = x.shape[1] - x = self.avg_pool(x).view(B, -1, num_channels) - - assert self.in_planes == x.shape[-1] - x = self.fc1(x) - - if x.ndim == 3: - x = x.reshape((B, -1)) - - x = self.fc_out(x) - - if self.return_prob: - results = self.act(x) - else: - results = x - - return results - - -class RegressionHead(nn.Module): - def __init__( - self, - input_shape, - out_planes, - kernel_size, - padding, - conv_2direction=False, - extra=None, - **kwargs, - ): - """ - General regression head for dense predictions like keypoints regression, etc - - Args: - input_shape: [C, H, W] - conv_2direction: Specially design to compute derivative tx, ty from temporal tokens in video input. i.e. FakeSTormer - """ - super().__init__() - self.conv_2direction = conv_2direction - - conv_channels = input_shape[0] - - layers = [] - if extra is not None: - num_conv_layers = extra.get("num_conv_layers", 0) - num_conv_kernels = extra.get("num_conv_kernels", [1] * num_conv_layers) - - for i in range(num_conv_layers): - layers.append( - conv_block( - inplanes=conv_channels, - outplanes=conv_channels, - kernel_size=kernel_size, - padding=padding, - ) - ) - self.before_proj = nn.Sequential(*layers) if len(layers) else nn.Identity() - - if not conv_2direction: - self.proj = nn.Conv2d( - in_channels=input_shape[0], - out_channels=out_planes, - kernel_size=kernel_size, - padding=padding, - ) - else: - self.d_tx = conv_block( - inplanes=input_shape[1], - outplanes=input_shape[1], - kernel_size=kernel_size, - padding=padding, - ) - - self.d_ty = conv_block( - inplanes=input_shape[2], - outplanes=input_shape[2], - kernel_size=kernel_size, - padding=padding, - ) - - self.proj = nn.Conv2d( - in_channels=int(input_shape[0] * 2), - out_channels=out_planes, - kernel_size=kernel_size, - padding=padding, - ) - - def forward(self, x): - assert x.ndim == 4 - B, C, H, W = x.shape - x = self.before_proj(x) - - if self.conv_2direction: - x_tx = self.d_tx(x.transpose(1, 2)).transpose(2, 1) - x_ty = self.d_ty(x.transpose(1, 3)).transpose(3, 1) - x = torch.cat((x_tx, x_ty), 1) - x = self.proj(x) - - return x - - -class TemporalRegressionHead(nn.Module): - def __init__( - self, - inplanes: int, - outplanes: int, - kernel_size: Union[int, Tuple] = (3, 1, 1), - stride: Union[int, Tuple] = (1, 1, 1), - padding: Union[int, Tuple] = (1, 0, 0), - extra: Optional[dict] = None, - act: nn.Module = nn.GELU, - **kwargs, - ): - super().__init__(**kwargs) - """ - General head design for 3D feature maps - args: - inplanes: number of in channels - outplanes: number of out channels - extra: doing extra operation before predicting final outputs - """ - layers = [] - if extra is not None: - num_conv_layers = extra.get("num_conv_layers", 0) - num_conv_kernels = extra.get("num_conv_kernels", [1] * num_conv_layers) - - for i in range(num_conv_layers): - layers.append( - conv3d_block( - inplanes=inplanes, - outplanes=inplanes, - kernel_size=kernel_size, - stride=stride, - padding=padding, - bias=True, - inplace=True, - act=act, - ) - ) - self.before_proj = nn.Sequential(*layers) if len(layers) else nn.Identity() - self.proj = nn.Sequential( - conv3d_block( - inplanes=inplanes, - outplanes=inplanes // 4, - stride=stride, - kernel_size=kernel_size, - padding=padding, - bias=True, - inplace=True, - act=act, - ), - nn.Conv3d( - inplanes // 4, - outplanes, - kernel_size=kernel_size, - stride=stride, - padding=padding, - bias=True, - ), - ) - - def forward(self, x): - assert x.ndim == 5 - - x = self.before_proj(x) - out = self.proj(x) - return out diff --git a/video/fake-stormer/model_code/models/networks/heads/hm_base_head.py b/video/fake-stormer/model_code/models/networks/heads/hm_base_head.py deleted file mode 100644 index 6489d4f32097042ea0746403ddf48c938a1647fe..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/heads/hm_base_head.py +++ /dev/null @@ -1,54 +0,0 @@ -# Copyright (c) OpenMMLab. All rights reserved. -# -*- coding: utf-8 -*- -from abc import ABCMeta, abstractmethod - -import numpy as np -import torch.nn as nn - - -class TopdownHeatmapBaseHead(nn.Module): - """Base class for top-down heatmap heads. - - All top-down heatmap heads should subclass it. - All subclass should overwrite: - - Methods:`loss`, supporting to calculate loss. - Methods:`accuracy`, supporting to calculate accuracy. - Methods:`forward`, supporting to forward model. - Methods:`predict`, supporting to inference model. - """ - - __metaclass__ = ABCMeta - - @abstractmethod - def loss(self, **kwargs): - """Gets the loss.""" - - @abstractmethod - def accuracy(self, **kwargs): - """Gets the accuracy.""" - - @abstractmethod - def forward(self, **kwargs): - """Forward function.""" - - @abstractmethod - def predict(self, **kwargs): - """Inference function.""" - - @staticmethod - def _get_deconv_cfg(deconv_kernel): - """Get configurations for deconv layers.""" - if deconv_kernel == 4: - padding = 1 - output_padding = 0 - elif deconv_kernel == 3: - padding = 1 - output_padding = 1 - elif deconv_kernel == 2: - padding = 0 - output_padding = 0 - else: - raise ValueError(f"Not supported num_kernels ({deconv_kernel}).") - - return deconv_kernel, padding, output_padding diff --git a/video/fake-stormer/model_code/models/networks/heads/hm_simple_head.py b/video/fake-stormer/model_code/models/networks/heads/hm_simple_head.py deleted file mode 100644 index c27c331e9e13a12d19e15561aebe50a45f90a4e7..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/heads/hm_simple_head.py +++ /dev/null @@ -1,378 +0,0 @@ -# Copyright (c) OpenMMLab. All rights reserved. -# -*- coding: utf-8 -*- -import os -import sys -from typing import Dict, Union - -if not os.getcwd() in sys.path: - sys.path.append(os.getcwd()) - -import torch -import torch.nn as nn -import torch.nn.functional as F -from einops import rearrange, reduce, repeat -from losses import LOSSES, build_losses -from mmcv.cnn import ( - build_conv_layer, - build_norm_layer, - build_upsample_layer, - constant_init, - normal_init, -) -from models.builder import HEADS - -from ..common import BN_MOMENTUM, conv_block, resize -from .head_design import ClassificationHead, RegressionHead, TemporalRegressionHead -from .hm_base_head import TopdownHeatmapBaseHead - - -@HEADS.register_module() -class TopdownHeatmapSimpleHead(TopdownHeatmapBaseHead): - """Top-down heatmap simple head. paper ref: Bin Xiao et al. ``Simple - Baselines for Human Pose Estimation and Tracking``. - - TopdownHeatmapSimpleHead is consisted of (>=0) number of deconv layers - and a simple conv2d layer. - - Args: - in_channels (int): Number of input channels - out_channels (int): Number of output channels - num_deconv_layers (int): Number of deconv layers. - num_deconv_layers should >= 0. Note that 0 means - no deconv layers. - num_deconv_filters (list|tuple): Number of filters. - If num_deconv_layers > 0, the length of - num_deconv_kernels (list|tuple): Kernel sizes. - in_index (int|Sequence[int]): Input feature index. Default: 0 - input_transform (str|None): Transformation type of input features. - Options: 'resize_concat', 'multiple_select', None. - Default: None. - - - 'resize_concat': Multiple feature maps will be resized to the - same size as the first one and then concat together. - Usually used in FCN head of HRNet. - - 'multiple_select': Multiple feature maps will be bundle into - a list and passed into decode head. - - None: Only one select feature map is allowed. - align_corners (bool): align_corners argument of F.interpolate. - Default: False. - loss_keypoint (dict): Config for keypoint loss. Default: None. - """ - - def __init__( - self, - in_channels, - heads, - extra=None, - hm_size=[14, 14], - in_index=0, - input_transform=None, - align_corners=False, - loss_keypoint=None, - train_cfg=None, - test_cfg=None, - upsample=0, - conv_2direction=False, - use_temp_token=False, - features="2D", - act="GELU", - **kwargs, - ): - super().__init__() - - self.in_channels = in_channels - self.loss = build_losses(loss_keypoint, LOSSES) - self.upsample = upsample - self.use_temp_token = use_temp_token - - self.train_cfg = {} if train_cfg is None else train_cfg - self.test_cfg = {} if test_cfg is None else test_cfg - self.target_type = self.test_cfg.get("target_type", "GaussianHeatmap") - - self._init_inputs(in_channels, in_index, input_transform) - self.in_index = in_index - self.align_corners = align_corners - - assert ( - isinstance(heads, dict) and heads is not None - ), "Head config can not be None!" - self.heads = heads - - if extra is not None and not isinstance(extra, dict): - raise TypeError("extra should be dict or None.") - - identity_final_layer = False - if extra is not None and "final_conv_kernel" in extra: - assert extra["final_conv_kernel"] in [0, 1, 3] - if extra["final_conv_kernel"] == 3: - padding = 1 - elif extra["final_conv_kernel"] == 1: - padding = 0 - else: - # 0 for Identity mapping. - identity_final_layer = True - kernel_size = extra["final_conv_kernel"] - else: - kernel_size = 1 - padding = 0 - - final_layer = {} - if not identity_final_layer: - for head, out_channel in self.heads.items(): - if head == "hm" or head == "cstency": - if features == "2D": - layer = RegressionHead( - input_shape=(self.in_channels, hm_size[0], hm_size[1]), - out_planes=out_channel, - kernel_size=kernel_size, - padding=padding, - extra=extra, - conv_2direction=conv_2direction, - ) - elif features == "3D": - act_func = nn.GELU if act == "GELU" else nn.ReLU - layer = TemporalRegressionHead( - inplanes=self.in_channels, - outplanes=out_channel, - extra=extra, - act=act_func, - ) - else: - raise ValueError( - "Only support 2D or 3D features, please check your feature dimension!" - ) - final_layer[head] = layer - elif head == "cls": - layer = ClassificationHead( - in_planes=self.in_channels, - out_planes=out_channel, - return_prob=False, - last_act="sigmoid", - drop=0.2, - features=features, - avg_pool=kwargs.get("avg_pool"), - ) - final_layer[head] = layer - elif head == "temp_loc": - layer = ClassificationHead( - in_planes=self.in_channels, - out_planes=out_channel, - stages=[self.in_channels // out_channel], - return_prob=False, - last_act="sigmoid", - drop=0.2, - ) - final_layer[head] = layer - else: - final_layer["cls"] = nn.Identity() - - for k, l in final_layer.items(): - self.__setattr__(k, l) - - def _init_inputs(self, in_channels, in_index, input_transform): - """Check and initialize input transforms. - - The in_channels, in_index and input_transform must match. - Specifically, when input_transform is None, only single feature map - will be selected. So in_channels and in_index must be of type int. - When input_transform is not None, in_channels and in_index must be - list or tuple, with the same length. - - Args: - in_channels (int|Sequence[int]): Input channels. - in_index (int|Sequence[int]): Input feature index. - input_transform (str|None): Transformation type of input features. - Options: 'resize_concat', 'multiple_select', None. - - - 'resize_concat': Multiple feature maps will be resize to the - same size as first one and than concat together. - Usually used in FCN head of HRNet. - - 'multiple_select': Multiple feature maps will be bundle into - a list and passed into decode head. - - None: Only one select feature map is allowed. - """ - - if input_transform is not None: - assert input_transform in ["resize_concat", "multiple_select"] - self.input_transform = input_transform - self.in_index = in_index - if input_transform is not None: - assert isinstance(in_channels, (list, tuple)) - assert isinstance(in_index, (list, tuple)) - assert len(in_channels) == len(in_index) - if input_transform == "resize_concat": - self.in_channels = sum(in_channels) - else: - self.in_channels = in_channels - else: - assert isinstance(in_channels, int) - assert isinstance(in_index, int) - self.in_channels = in_channels - - def _transform_inputs(self, inputs: Union[torch.tensor, Dict[str, torch.tensor]]): - """Transform inputs for decoder. - - Args: - inputs (list[Tensor] | Tensor): multi-level img features. - - Returns: - Tensor: The transformed inputs - """ - additional_inputs = {} - - if isinstance(inputs, dict): - # assert 'embed' in inputs.keys(), "Embed token must be present in the input dict key" - for k in inputs.keys(): - if k != "embed": - additional_inputs[k] = inputs[k] - inputs = inputs["embed"] if "embed" in inputs.keys() else None - - if not isinstance(inputs, list): - if not isinstance(inputs, list): - if self.upsample > 0: - inputs = resize( - input=F.relu(inputs), - scale_factor=self.upsample, - mode="bilinear", - align_corners=self.align_corners, - ) - return inputs, additional_inputs - - if self.input_transform == "resize_concat": - inputs = [inputs[i] for i in self.in_index] - upsampled_inputs = [ - resize( - input=x, - size=inputs[0].shape[2:], - mode="bilinear", - align_corners=self.align_corners, - ) - for x in inputs - ] - inputs = torch.cat(upsampled_inputs, dim=1) - elif self.input_transform == "multiple_select": - inputs = [inputs[i] for i in self.in_index] - else: - inputs = inputs[self.in_index] - - return inputs, additional_inputs - - def _make_deconv_layer(self, num_layers, num_filters, num_kernels): - """Make deconv layers.""" - if num_layers != len(num_filters): - error_msg = ( - f"num_layers({num_layers}) " - f"!= length of num_filters({len(num_filters)})" - ) - raise ValueError(error_msg) - if num_layers != len(num_kernels): - error_msg = ( - f"num_layers({num_layers}) " - f"!= length of num_kernels({len(num_kernels)})" - ) - raise ValueError(error_msg) - - layers = [] - for i in range(num_layers): - kernel, padding, output_padding = self._get_deconv_cfg(num_kernels[i]) - - planes = num_filters[i] - layers.append( - build_upsample_layer( - dict(type="deconv"), - in_channels=self.in_channels, - out_channels=planes, - kernel_size=kernel, - stride=2, - padding=padding, - output_padding=output_padding, - bias=False, - ) - ) - layers.append(nn.BatchNorm2d(planes)) - layers.append(nn.ReLU(inplace=True)) - self.in_channels = planes - - return nn.Sequential(*layers) - - def init_weights(self): - """Initialize model weights.""" - for head in self.heads.keys(): - for m in self.__getattr__(head).modules(): - if isinstance(m, nn.Conv2d): - normal_init(m, std=0.001, bias=0) - elif isinstance(m, nn.BatchNorm2d): - constant_init(m, 1) - - def forward(self, x, **kwargs): - """Forward function. - The input is multiscale feature maps and the output is the heatmap without post processing - """ - x_embed, additional_inputs = self._transform_inputs(x) - if "temp_loc" in self.heads.keys(): - if not self.use_temp_token: - B, L, T, H, W = x_embed.shape - x_temp_loc = x_embed.reshape(B, T, L, -1) - x_temp_loc = torch.max(x_temp_loc, dim=3, keepdim=False)[0] - else: - x_temp_loc = additional_inputs["s_cls_token"] - - x_outs = {} - # for head in self.heads.keys(): - if "cls" in self.heads.keys(): - assert hasattr( - self, "cls" - ), "There must be a Classification Head, please check the head design!" - if bool(additional_inputs) and "cls" in additional_inputs.keys(): - x_outs["cls"] = self.__getattr__("cls")(additional_inputs["cls"]) - else: - x_outs["cls"] = self.__getattr__("cls")(x_embed) - - # for head in self.heads.keys(): - if "temp_loc" in self.heads.keys(): - assert hasattr( - self, "temp_loc" - ), "There must be a head for temporal localization, please check the head design!" - x_outs["temp_loc"] = self.__getattr__("temp_loc")(x_temp_loc) - - if "hm" in self.heads.keys(): - assert hasattr( - self, "hm" - ), "There must always be a Heatmap Head in the head!" - x_outs["hm"] = self.__getattr__("hm")(x_embed) - - if "cstency" in self.heads.keys(): - assert hasattr( - self, "cstency" - ), "There must always be a Consistency Head in the head!" - x_outs["cstency"] = self.__getattr__("cstency")(x_embed) - - return [x_outs] - - def get_loss(self, output, target, target_weight): - """Calculate top-down keypoint loss. - - Note: - - batch_size: N - - num_keypoints: K - - heatmaps height: H - - heatmaps weight: W - - Args: - output (torch.Tensor[N,K,H,W]): Output heatmaps. - target (torch.Tensor[N,K,H,W]): Target heatmaps. - target_weight (torch.Tensor[N,K,1]): - Weights across different joint types. - """ - - losses = dict() - - assert not isinstance(self.loss, nn.Sequential) - assert target.dim() == 4 and target_weight.dim() == 3 - losses["heatmap_loss"] = self.loss(output, target, target_weight) - - return losses - - -if __name__ == "__main__": - cfg = {} diff --git a/video/fake-stormer/model_code/models/networks/mrsa_resnet.py b/video/fake-stormer/model_code/models/networks/mrsa_resnet.py deleted file mode 100644 index 38172a90c9faf9be5a10bc1d2adee9cc65a5c4af..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/mrsa_resnet.py +++ /dev/null @@ -1,490 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, division, print_function - -import math -import os - -import torch -import torch.nn as nn -import torch.utils.model_zoo as model_zoo -from torch.nn.modules.activation import ReLU -from torch.nn.modules.batchnorm import BatchNorm2d -from torch.nn.modules.pooling import MaxPool2d - -from ..builder import MODELS, build_model -from .common import ( - BN_MOMENTUM, - InceptionBlock, - conv_block, - point_wise_block, -) - -model_urls = { - "resnet18": "https://download.pytorch.org/models/resnet18-5c106cde.pth", - "resnet34": "https://download.pytorch.org/models/resnet34-333f7ec4.pth", - "resnet50": "https://download.pytorch.org/models/resnet50-19c8e357.pth", - "resnet101": "https://download.pytorch.org/models/resnet101-5d3b4d8f.pth", - "resnet152": "https://download.pytorch.org/models/resnet152-b121ed2d.pth", -} - - -def conv3x3(in_planes, out_planes, stride=1): - """3x3 convolution with padding""" - return nn.Conv2d( - in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=False - ) - - -class BasicBlock(nn.Module): - expansion = 1 - - def __init__(self, inplanes, planes, stride=1, downsample=None): - super(BasicBlock, self).__init__() - self.conv1 = conv3x3(inplanes, planes, stride) - self.bn1 = nn.BatchNorm2d(planes, momentum=BN_MOMENTUM) - self.relu = nn.ReLU(inplace=True) - self.conv2 = conv3x3(planes, planes) - self.bn2 = nn.BatchNorm2d(planes, momentum=BN_MOMENTUM) - self.downsample = downsample - self.stride = stride - - def forward(self, x): - residual = x - - out = self.conv1(x) - out = self.bn1(out) - out = self.relu(out) - - out = self.conv2(out) - out = self.bn2(out) - - if self.downsample is not None: - residual = self.downsample(x) - - out += residual - out = self.relu(out) - - return out - - @staticmethod - def __repr__(): - return "BasicBlock" - - -class Bottleneck(nn.Module): - expansion = 4 - - def __init__(self, inplanes, planes, stride=1, downsample=None): - super(Bottleneck, self).__init__() - self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, bias=False) - self.bn1 = nn.BatchNorm2d(planes, momentum=BN_MOMENTUM) - self.conv2 = nn.Conv2d( - planes, planes, kernel_size=3, stride=stride, padding=1, bias=False - ) - self.bn2 = nn.BatchNorm2d(planes, momentum=BN_MOMENTUM) - self.conv3 = nn.Conv2d( - planes, planes * self.expansion, kernel_size=1, bias=False - ) - self.bn3 = nn.BatchNorm2d(planes * self.expansion, momentum=BN_MOMENTUM) - self.relu = nn.ReLU(inplace=True) - self.downsample = downsample - self.stride = stride - - def forward(self, x): - residual = x - - out = self.conv1(x) - out = self.bn1(out) - out = self.relu(out) - - out = self.conv2(out) - out = self.bn2(out) - out = self.relu(out) - - out = self.conv3(out) - out = self.bn3(out) - - if self.downsample is not None: - residual = self.downsample(x) - - out += residual - out = self.relu(out) - - return out - - @staticmethod - def __repr__(): - return "Bottleneck" - - -@MODELS.register_module() -class PoseResNet(nn.Module): - def __init__( - self, - block, - layers, - heads, - head_conv, - dropout_prob, - fpn=False, - cls_based_hm=True, - use_c2=False, - **kwargs, - ): - self.inplanes = 64 - self.deconv_with_bias = False - self.heads = heads - self.fpn = fpn - self.cls_based_hm = cls_based_hm - self.use_c2 = use_c2 - - # Convert Cls name into Cls Object - if isinstance(block, str): - for bl in [BasicBlock, Bottleneck]: - if block == bl.__repr__(): - block = bl - - for k, v in kwargs.items(): - if v is None: - raise ValueError( - f"The {k} argument receive a None value, Please check!" - ) - self.__setattr__(k, v) - - super(PoseResNet, self).__init__() - self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, bias=False) - self.bn1 = nn.BatchNorm2d(64, momentum=BN_MOMENTUM) - self.relu = nn.ReLU(inplace=True) - self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) - self.layer1 = self._make_layer(block, 64, layers[0]) - self.layer2 = self._make_layer(block, 128, layers[1], stride=2) - self.layer3 = self._make_layer(block, 256, layers[2], stride=2) - self.layer4 = self._make_layer(block, 512, layers[3], stride=2) - - # Custom dropout layer - self.dropout_layer = nn.Dropout(dropout_prob) - - if self.fpn: - # Adding sidmoid layer - self.sigmoid_layer = nn.Sigmoid() - - # Adding pointwise block - self.pw_block_1 = self._point_wise_block(2048, 1024) - - # used for deconv layers - deconv_filters = [256, 128, 256] if self.fpn else [256, 256, 256] - self.deconv_layers = self._make_deconv_layer( - 3, - deconv_filters, - [4, 4, 4], - ) - - # Adding inception block - if self.fpn: - for idx, deconv_layer in enumerate(self.deconv_layers): - self.__setattr__(f"deconv_layer_{idx}", nn.Sequential(deconv_layer)) - self.pw_block_2 = self._point_wise_block(512, 512) - if self.use_c2: - self.pw_block_3 = self._point_wise_block(512, 256) - self.pw_block_c3 = self._point_wise_block(1024, 256) - self.pw_block_c2 = self._point_wise_block(512, 128) - self.inception_block = InceptionBlock(256, 256, stride=1, pool_size=3) - - for head in sorted(self.heads): - num_output = self.heads[head] - if head_conv > 0: - if head != "cls": - fc = nn.Sequential( - nn.Conv2d(256, head_conv, kernel_size=3, padding=1, bias=True), - nn.BatchNorm2d(head_conv), - nn.ReLU(inplace=True), - nn.Conv2d( - head_conv, num_output, kernel_size=1, stride=1, padding=0 - ), - ) - else: - if self.cls_based_hm: - fc = nn.Sequential( - nn.AdaptiveMaxPool2d(head_conv // 4), - nn.Flatten(), - nn.Linear( - num_output * ((head_conv // 4) ** 2), - head_conv, - bias=True, - ), - nn.BatchNorm1d(head_conv, momentum=BN_MOMENTUM), - nn.ReLU(inplace=True), - nn.Linear(head_conv, 1, bias=True), - nn.Sigmoid(), - ) - else: - fc = nn.Sequential( - nn.Conv2d( - 256, head_conv, kernel_size=3, padding=1, bias=True - ), - nn.BatchNorm2d(head_conv, momentum=BN_MOMENTUM), - nn.ReLU(inplace=True), - # nn.Conv2d(head_conv, num_output, kernel_size=1, - # stride=1, padding=0, bias=True), - # nn.BatchNorm2d(num_output), - # nn.ReLU(inplace=True), - # nn.AdaptiveMaxPool2d(head_conv//4), - nn.AdaptiveAvgPool2d(1), - nn.Flatten(), - # nn.Linear((head_conv//4)**2, head_conv, bias=True), - # nn.BatchNorm1d(head_conv, momentum=BN_MOMENTUM), - # nn.ReLU(inplace=True), - nn.Linear(head_conv, 1, bias=True), - # nn.Sigmoid() - ) - else: - fc = nn.Conv2d( - in_channels=256, - out_channels=num_output, - kernel_size=1, - stride=1, - padding=0, - ) - self.__setattr__(head, fc) - - def _point_wise_block(self, inplanes, outplanes): - self.inplanes = outplanes - module = point_wise_block(inplanes, outplanes) - return module - - def _conv_block(self, inplanes, outplanes, kernel_size, stride=1): - self.inplanes = outplanes - module = conv_block(inplanes, outplanes, kernel_size=kernel_size, stride=stride) - return module - - def _make_layer(self, block, planes, blocks, stride=1): - downsample = None - if stride != 1 or self.inplanes != planes * block.expansion: - downsample = nn.Sequential( - nn.Conv2d( - self.inplanes, - planes * block.expansion, - kernel_size=1, - stride=stride, - bias=False, - ), - nn.BatchNorm2d(planes * block.expansion, momentum=BN_MOMENTUM), - ) - - layers = [] - layers.append(block(self.inplanes, planes, stride, downsample)) - self.inplanes = planes * block.expansion - for i in range(1, blocks): - layers.append(block(self.inplanes, planes)) - - return nn.Sequential(*layers) - - def _get_deconv_cfg(self, deconv_kernel, index): - if deconv_kernel == 4: - padding = 1 - output_padding = 0 - elif deconv_kernel == 3: - padding = 1 - output_padding = 1 - elif deconv_kernel == 2: - padding = 0 - output_padding = 0 - - return deconv_kernel, padding, output_padding - - def _make_deconv_layer(self, num_layers, num_filters, num_kernels): - assert num_layers == len( - num_filters - ), "ERROR: num_deconv_layers is different len(num_deconv_filters)" - assert num_layers == len( - num_kernels - ), "ERROR: num_deconv_layers is different len(num_deconv_filters)" - - layers = [] - for i in range(num_layers): - kernel, padding, output_padding = self._get_deconv_cfg(num_kernels[i], i) - - planes = num_filters[i] - layers.append( - nn.Sequential( - nn.ConvTranspose2d( - in_channels=self.inplanes, - out_channels=planes, - kernel_size=kernel, - stride=2, - padding=padding, - output_padding=output_padding, - bias=self.deconv_with_bias, - ), - nn.BatchNorm2d(planes, momentum=BN_MOMENTUM), - ) - ) - if not self.fpn: - layers.append(nn.ReLU(inplace=True)) - - self.inplanes = planes if not self.fpn else planes * 2 - - if self.fpn: - return layers - else: - return nn.Sequential(*layers) - - def forward(self, x): - x = self.conv1(x) - x = self.bn1(x) - x = self.relu(x) - x = self.maxpool(x) - - x1 = self.layer1(x) # 256 x 64 x 64 - x2 = self.layer2(x1) # 512 x 32 x 32 - x3 = self.layer3(x2) # 1024 x 16 x 16 - x4 = self.layer4(x3) # 2048 x 8 x 8 - - # Custom dropout layer - x = self.dropout_layer(x4) # B x 8 x 8 x 2048 - x3 = self.dropout_layer(x3) - x2 = self.dropout_layer(x2) - x1 = self.dropout_layer(x1) - - # Custom FPN - if self.fpn: - assert isinstance( - self.deconv_layers, list - ), "To custom FPN, decompose deconv layers as a list!" - x = self.pw_block_1(x) # B x 1024 x 8 x 8 - x = self.deconv_layer_0(x) # B x 256 x 16 x 16 - # x = self.relu(x) # B x 256 x 16 x 16 - - x_weighted = self.sigmoid_layer(x) # B x 256 x 16 x 16 - x_inverse = torch.sub(1, x_weighted, alpha=1) # B x 256 x 16 x 16 - x3 = self.pw_block_c3(x3) # B x 256 x 16 x 16 - x3_ = torch.multiply(x3, x_inverse) # B x 256 x 16 x 16 - x = torch.cat((x, x3_), dim=1) # B x 512 x 16 x 16 - - x = self.pw_block_2(x) # B x 512 x 16 x 16 - x = self.deconv_layer_1(x) # B x 128 x 32 x 32 - # x = self.relu(x) #B x 128 x 32 x 32 - - x_weighted = self.sigmoid_layer(x) # B x 128 x 32 x 32 - x_inverse = torch.sub(1, x_weighted, alpha=1) # B x 128 x 32 x 32 - x2 = self.pw_block_c2(x2) - x2_ = torch.multiply(x2, x_inverse) # B x 128 x 32 x 32 - x = torch.cat((x, x2_), dim=1) # B x 256 x 32 x 32 - - x = self.inception_block(x) # B x 256 x 64 x 64 - x = self.deconv_layer_2(x) # B x 256 x 64 x 64 - - if self.use_c2: - x_weighted = self.sigmoid_layer(x) - x_inverse = torch.sub(1, x_weighted, alpha=1) - x1_ = torch.multiply(x1, x_inverse) - x = torch.cat((x, x1_), dim=1) - x = self.pw_block_3(x) - else: - x = self.relu(x) # B x 256 x 64 x 64 - else: - assert isinstance( - self.deconv_layers, nn.Module - ), "Deconv Layer must be nn Module to compute!" - x = self.deconv_layers(x) - - ret = {} - x1_hm = None - for head in self.heads: - if self.cls_based_hm and head == "cls" and x1_hm is not None: - x = x1_hm - elif head == "hm": - x1_hm = x - - ret[head] = self.__getattr__(head)(x) - - return [ret] - - def init_weights(self, pretrained=True, **kwargs): - num_layers = kwargs.get("num_layers") - if pretrained: - if self.fpn: - for bl in [self.pw_block_1, self.pw_block_2]: - for _, l in bl.named_parameters(): - if isinstance(l, nn.Conv2d): - nn.init.normal_(l.weight, std=0.001) - nn.init.constant_(l.bias, 0) - - for _, l in self.inception_block.named_parameters(): - if isinstance(l, nn.Conv2d): - nn.init.normal_(l.weight, std=0.001) - nn.init.constant_(l.bias, 0) - - # print('=> init resnet deconv weights from normal distribution') - if isinstance(self.deconv_layers, nn.Module): - for _, m in self.deconv_layers.named_modules(): - if isinstance(m, nn.ConvTranspose2d): - # print('=> init {}.weight as normal(0, 0.001)'.format(name)) - # print('=> init {}.bias as 0'.format(name)) - nn.init.normal_(m.weight, std=0.001) - if self.deconv_with_bias: - nn.init.constant_(m.bias, 0) - elif isinstance(m, nn.BatchNorm2d): - # print('=> init {}.weight as 1'.format(name)) - # print('=> init {}.bias as 0'.format(name)) - nn.init.constant_(m.weight, 1) - nn.init.constant_(m.bias, 0) - else: - for layer in [ - self.deconv_layer_0, - self.deconv_layer_1, - self.deconv_layer_2, - ]: - for _, m in layer.named_modules(): - if isinstance(m, nn.ConvTranspose2d): - # print('=> init {}.weight as normal(0, 0.001)'.format(name)) - # print('=> init {}.bias as 0'.format(name)) - nn.init.normal_(m.weight, std=0.001) - if self.deconv_with_bias: - nn.init.constant_(m.bias, 0) - elif isinstance(m, nn.BatchNorm2d): - # print('=> init {}.weight as 1'.format(name)) - # print('=> init {}.bias as 0'.format(name)) - nn.init.constant_(m.weight, 1) - nn.init.constant_(m.bias, 0) - - # print('=> init final conv weights from normal distribution') - for head in self.heads: - final_layer = self.__getattr__(head) - for i, m in enumerate(final_layer.modules()): - if isinstance(m, nn.Conv2d): - # nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') - # print('=> init {}.weight as normal(0, 0.001)'.format(name)) - # print('=> init {}.bias as 0'.format(name)) - if m.weight.shape[0] == self.heads[head]: - if "hm" in head: - nn.init.constant_(m.bias, -2.19) - else: - nn.init.normal_(m.weight, std=0.001) - nn.init.constant_(m.bias, 0) - # if isinstance(m, nn.Linear): - # if m.weight.shape[0] == self.heads[head]: - # prior = 1/71 - # nn.init.constant_(m.bias, -math.log((1-prior)/prior)) - # else: - # nn.init.normal_(m.weight, std=0.001) - # nn.init.constant_(m.bias, 0) - - # pretrained_state_dict = torch.load(pretrained) - url = model_urls["resnet{}".format(num_layers)] - pretrained_state_dict = model_zoo.load_url(url) - print("=> loading pretrained model {}".format(url)) - self.load_state_dict(pretrained_state_dict, strict=False) - else: - print("=> imagenet pretrained model dose not exist") - print("=> please download it first") - raise ValueError("imagenet pretrained model does not exist") - - -resnet_spec = { - 18: (BasicBlock, [2, 2, 2, 2]), - 34: (BasicBlock, [3, 4, 6, 3]), - 50: (Bottleneck, [3, 4, 6, 3]), - 101: (Bottleneck, [3, 4, 23, 3]), - 152: (Bottleneck, [3, 8, 36, 3]), -} diff --git a/video/fake-stormer/model_code/models/networks/necks/__init__.py b/video/fake-stormer/model_code/models/networks/necks/__init__.py deleted file mode 100644 index fd9cea73d48be2870de0d4fc54500d559133033d..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/necks/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# -*- coding: utf-8 -*- -from .efpn3D import EFPN3D - -__all__ = ["EFPN3D"] diff --git a/video/fake-stormer/model_code/models/networks/necks/base.py b/video/fake-stormer/model_code/models/networks/necks/base.py deleted file mode 100644 index e4aa3766502e681f3bce863dee33118f707178fc..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/necks/base.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -from abc import ABCMeta, abstractmethod -from typing import Dict - -import torch -import torch.nn as nn - - -class BaseNeck(nn.Module, metaclass=ABCMeta): - def __init__(self, **kwargs) -> None: - return super().__init__() - - @abstractmethod - def forward(self, x: Dict[str, torch.tensor], **kwargs): - return NotImplemented - - @abstractmethod - def preprocess_inputs(self, x: Dict[str, torch.tensor], **kwargs): - return NotImplemented - - @abstractmethod - def init_weights(self, pretrained=None): - return NotImplemented - - @staticmethod - def _get_deconv_cfg(deconv_kernel: int): - """Get configurations for deconv layers.""" - if deconv_kernel == 4: - padding = 1 - output_padding = 0 - elif deconv_kernel == 3: - padding = 1 - output_padding = 1 - elif deconv_kernel in [1, 2]: - padding = 0 - output_padding = 0 - else: - raise ValueError(f"Not supported num_kernels ({deconv_kernel}).") - - return deconv_kernel, padding, output_padding diff --git a/video/fake-stormer/model_code/models/networks/necks/efpn3D.py b/video/fake-stormer/model_code/models/networks/necks/efpn3D.py deleted file mode 100644 index 0794dea46ce1928e0fe041fa23ed2514d83b51eb..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/necks/efpn3D.py +++ /dev/null @@ -1,173 +0,0 @@ -# -*- coding: utf-8 -*- -from typing import Dict, List, Sequence - -import torch -import torch.nn as nn -from mmengine.model import xavier_init - -from ...builder import NECKS -from ..common import InceptionBlock3D, conv3d_block, deconv3d_block -from .base import BaseNeck - - -@NECKS.register_module() -class EFPN3D(BaseNeck): - def __init__( - self, - in_channels: int, - num_deconv_layers: int, - num_deconv_filters: Sequence[int], - num_deconv_kernels: Sequence[int], - num_deconv_strides: Sequence[int], - efpn: bool = True, - **kwargs, - ) -> None: - super().__init__(**kwargs) - - self.in_channels = in_channels - self.efpn = efpn - self.num_deconv_layers = num_deconv_layers - - if num_deconv_layers > 0: - self.deconv_layers = self._make_3ddeconv_layer( - num_deconv_filters[0], - num_deconv_layers, - num_deconv_filters, - num_deconv_kernels, - num_deconv_strides, - ) - elif num_deconv_layers == 0: - self.deconv_layers = nn.Identity() - else: - raise ValueError(f"num_deconv_layers ({num_deconv_layers}) should >= 0.") - - if self.efpn: - in_filter = self.in_channels - for idx, out_filter in enumerate(num_deconv_filters): - deconv_block = nn.Sequential( - conv3d_block( - inplanes=in_filter, - outplanes=out_filter, - kernel_size=(1, 1, 1), - stride=(1, 1, 1), - bias=False, - ), - self.deconv_layers[idx], - ) - in_filter = out_filter * 2 - self.__setattr__(f"deconv_block_{idx}", deconv_block) - self.inception_block3d = InceptionBlock3D( - inplanes=num_deconv_filters[-1], - outplanes=num_deconv_filters[-1], - stride=1, - pool_size=3, - ) - - def preprocess_inputs(self, x: Dict[str, torch.tensor], **kwargs): - assert "embed" in x.keys(), "The input dict must contain embedding features!" - inputs = x["embed"] - additional_inputs = {} - - for k, v in x.items(): - if k != "embed": - additional_inputs[k] = v - - return inputs, additional_inputs - - def _make_3ddeconv_layer( - self, - in_channels, - num_layers: int, - num_filters: List[int], - num_kernels: Sequence[int], - num_strides: Sequence[int], - ) -> list: - """Make deconv layers.""" - if num_layers != len(num_filters): - error_msg = ( - f"num_layers({num_layers}) " - f"!= length of num_filters({len(num_filters)})" - ) - raise ValueError(error_msg) - if num_layers != len(num_kernels): - error_msg = ( - f"num_layers({num_layers}) " - f"!= length of num_kernels({len(num_kernels)})" - ) - raise ValueError(error_msg) - - layers = [] - in_planes = in_channels - for i in range(num_layers): - kernels = [] - paddings = [] - output_paddings = [] - - for j in range(len(num_kernels[i])): - kernel, padding, output_padding = self._get_deconv_cfg( - num_kernels[i][j] - ) - kernels.append(kernel) - paddings.append(padding) - output_paddings.append(output_padding) - - outplanes = num_filters[i] - layers.append( - deconv3d_block( - inplanes=in_planes, - outplanes=outplanes, - kernel_size=kernels, - stride=num_strides[i], - padding=paddings, - bias=False, - out_padding=output_paddings, - ) - ) - - # This condition to match n_filters after convolution and optimize number of EFPN parameters - if self.efpn: - in_planes = ( - num_filters[i + 1] - if (i + 1 < num_layers) - else num_filters[num_layers - 1] - ) - else: - in_planes = outplanes - - return layers - - def forward(self, x: Dict[str, torch.tensor], **kwargs) -> dict: - inputs, additional_inputs = self.preprocess_inputs(x) - trapezoids = None - if "outputs" in additional_inputs.keys(): - trapezoids = additional_inputs["outputs"] - # x2, x3, x4, x5 = trapezoids[0], trapezoids[1], trapezoids[2], trapezoids[3] - - if not self.efpn: - x_embed = self.deconv_layers(inputs) - else: - assert ( - "outputs" in additional_inputs.keys() - ), "EFPN requires multiscale feature outputs!" - x_embed = inputs - for i in range(self.num_deconv_layers): - x_embed = self.__getattr__(f"deconv_block_{i}")(x_embed) - if i < self.num_deconv_layers - 1: - x_weights = x_embed.sigmoid_() - x_inv = torch.sub(1, x_weights, alpha=1) - x_ = torch.multiply( - x_inv, trapezoids[self.num_deconv_layers - (i + 2)] - ) - x_embed = torch.cat([x_embed, x_], dim=1) - - # Last layer to capture multi-scale artifacts - x_embed = self.inception_block3d(x_embed) - - res = {} - res["embed"] = x_embed - - return res - - def init_weights(self) -> None: - for layer in self.deconv_layers: - xavier_init(layer, distribution="uniform") diff --git a/video/fake-stormer/model_code/models/networks/pose_efficientNet.py b/video/fake-stormer/model_code/models/networks/pose_efficientNet.py deleted file mode 100644 index d6c3cf28fc7c1170289d3039330c4798b843198e..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/pose_efficientNet.py +++ /dev/null @@ -1,978 +0,0 @@ -# -*- coding: utf-8 -*- -import math -import os -import sys - -if not os.getcwd() in sys.path: - sys.path.append(os.getcwd()) - -import torch -from torch import nn -from torch.nn import functional as F -from torch.utils import model_zoo - -from ..builder import MODELS, build_model -from .backbones.efficientNet import ( - MemoryEfficientSwish, - Swish, - calculate_output_image_size, - drop_connect, - efficientnet_params, - get_model_params, - get_same_padding_conv2d, - load_pretrained_weights, - round_filters, - round_repeats, - url_map, - url_map_advprop, -) -from .common import ( - BN_MOMENTUM, - InceptionBlock, - SELayer, - Texture_Enhance, - conv_block, - point_wise_block, -) - -VALID_MODELS = ( - "efficientnet-b0", - "efficientnet-b1", - "efficientnet-b2", - "efficientnet-b3", - "efficientnet-b4", - "efficientnet-b5", - "efficientnet-b6", - "efficientnet-b7", - "efficientnet-b8", - # Support the construction of 'efficientnet-l2' without pretrained weights - "efficientnet-l2", -) - - -class MBConvBlock(nn.Module): - """Mobile Inverted Residual Bottleneck Block. - Args: - block_args (namedtuple): BlockArgs, defined in utils.py. - global_params (namedtuple): GlobalParam, defined in utils.py. - image_size (tuple or list): [image_height, image_width]. - References: - [1] https://arxiv.org/abs/1704.04861 (MobileNet v1) - [2] https://arxiv.org/abs/1801.04381 (MobileNet v2) - [3] https://arxiv.org/abs/1905.02244 (MobileNet v3) - """ - - def __init__(self, block_args, global_params, image_size=None): - super().__init__() - self._block_args = block_args - self._bn_mom = ( - 1 - global_params.batch_norm_momentum - ) # pytorch's difference from tensorflow - self._bn_eps = global_params.batch_norm_epsilon - self.has_se = (self._block_args.se_ratio is not None) and ( - 0 < self._block_args.se_ratio <= 1 - ) - self.id_skip = ( - block_args.id_skip - ) # whether to use skip connection and drop connect - - # Expansion phase (Inverted Bottleneck) - inp = self._block_args.input_filters # number of input channels - oup = ( - self._block_args.input_filters * self._block_args.expand_ratio - ) # number of output channels - if self._block_args.expand_ratio != 1: - Conv2d = get_same_padding_conv2d(image_size=image_size) - self._expand_conv = Conv2d( - in_channels=inp, out_channels=oup, kernel_size=1, bias=False - ) - self._bn0 = nn.BatchNorm2d( - num_features=oup, momentum=self._bn_mom, eps=self._bn_eps - ) - # image_size = calculate_output_image_size(image_size, 1) <-- this wouldn't modify image_size - - # Depthwise convolution phase - k = self._block_args.kernel_size - s = self._block_args.stride - Conv2d = get_same_padding_conv2d(image_size=image_size) - self._depthwise_conv = Conv2d( - in_channels=oup, - out_channels=oup, - groups=oup, # groups makes it depthwise - kernel_size=k, - stride=s, - bias=False, - ) - self._bn1 = nn.BatchNorm2d( - num_features=oup, momentum=self._bn_mom, eps=self._bn_eps - ) - image_size = calculate_output_image_size(image_size, s) - - # Squeeze and Excitation layer, if desired - if self.has_se: - Conv2d = get_same_padding_conv2d(image_size=(1, 1)) - num_squeezed_channels = max( - 1, int(self._block_args.input_filters * self._block_args.se_ratio) - ) - self._se_reduce = Conv2d( - in_channels=oup, out_channels=num_squeezed_channels, kernel_size=1 - ) - self._se_expand = Conv2d( - in_channels=num_squeezed_channels, out_channels=oup, kernel_size=1 - ) - - # Pointwise convolution phase - final_oup = self._block_args.output_filters - Conv2d = get_same_padding_conv2d(image_size=image_size) - self._project_conv = Conv2d( - in_channels=oup, out_channels=final_oup, kernel_size=1, bias=False - ) - self._bn2 = nn.BatchNorm2d( - num_features=final_oup, momentum=self._bn_mom, eps=self._bn_eps - ) - self._swish = MemoryEfficientSwish() - - def forward(self, inputs, drop_connect_rate=None): - """MBConvBlock's forward function. - Args: - inputs (tensor): Input tensor. - drop_connect_rate (bool): Drop connect rate (float, between 0 and 1). - Returns: - Output of this block after processing. - """ - - # Expansion and Depthwise Convolution - x = inputs - if self._block_args.expand_ratio != 1: - x = self._expand_conv(inputs) - x = self._bn0(x) - x = self._swish(x) - - x = self._depthwise_conv(x) - x = self._bn1(x) - x = self._swish(x) - - # Squeeze and Excitation - if self.has_se: - x_squeezed = F.adaptive_avg_pool2d(x, 1) - x_squeezed = self._se_reduce(x_squeezed) - x_squeezed = self._swish(x_squeezed) - x_squeezed = self._se_expand(x_squeezed) - x = torch.sigmoid(x_squeezed) * x - - # Pointwise Convolution - x = self._project_conv(x) - x = self._bn2(x) - - # Skip connection and drop connect - input_filters, output_filters = ( - self._block_args.input_filters, - self._block_args.output_filters, - ) - if ( - self.id_skip - and self._block_args.stride == 1 - and input_filters == output_filters - ): - # The combination of skip connection and drop connect brings about stochastic depth. - if drop_connect_rate: - x = drop_connect(x, p=drop_connect_rate, training=self.training) - x = x + inputs # skip connection - return x - - def set_swish(self, memory_efficient=True): - """Sets swish function as memory efficient (for training) or standard (for export). - Args: - memory_efficient (bool): Whether to use memory-efficient version of swish. - """ - self._swish = MemoryEfficientSwish() if memory_efficient else Swish() - - -@MODELS.register_module() -class EfficientNet(nn.Module): - """EfficientNet model. - Most easily loaded with the .from_name or .from_pretrained methods. - Args: - blocks_args (list[namedtuple]): A list of BlockArgs to construct blocks. - global_params (namedtuple): A set of GlobalParams shared between blocks. - References: - [1] https://arxiv.org/abs/1905.11946 (EfficientNet) - Example: - >>> import torch - >>> from efficientnet.model import EfficientNet - >>> inputs = torch.rand(1, 3, 224, 224) - >>> model = EfficientNet.from_pretrained('efficientnet-b0') - >>> model.eval() - >>> outputs = model(inputs) - """ - - def __init__(self, blocks_args=None, global_params=None): - super().__init__() - assert isinstance(blocks_args, list), "blocks_args should be a list" - assert len(blocks_args) > 0, "block args must be greater than 0" - self._global_params = global_params - self._blocks_args = blocks_args - - # Batch norm parameters - bn_mom = 1 - self._global_params.batch_norm_momentum - bn_eps = self._global_params.batch_norm_epsilon - - # Get stem static or dynamic convolution depending on image size - image_size = global_params.image_size - Conv2d = get_same_padding_conv2d(image_size=image_size) - - # Stem - in_channels = 3 # rgb - out_channels = round_filters( - 32, self._global_params - ) # number of output channels - self._conv_stem = Conv2d( - in_channels, out_channels, kernel_size=3, stride=2, bias=False - ) - self._bn0 = nn.BatchNorm2d( - num_features=out_channels, momentum=bn_mom, eps=bn_eps - ) - image_size = calculate_output_image_size(image_size, 2) - - # Build blocks - self._blocks = nn.ModuleList([]) - for block_args in self._blocks_args: - - # Update block input and output filters based on depth multiplier. - block_args = block_args._replace( - input_filters=round_filters( - block_args.input_filters, self._global_params - ), - output_filters=round_filters( - block_args.output_filters, self._global_params - ), - num_repeat=round_repeats(block_args.num_repeat, self._global_params), - ) - - # The first block needs to take care of stride and filter size increase. - self._blocks.append( - MBConvBlock(block_args, self._global_params, image_size=image_size) - ) - image_size = calculate_output_image_size(image_size, block_args.stride) - if block_args.num_repeat > 1: # modify block_args to keep same output size - block_args = block_args._replace( - input_filters=block_args.output_filters, stride=1 - ) - for _ in range(block_args.num_repeat - 1): - self._blocks.append( - MBConvBlock(block_args, self._global_params, image_size=image_size) - ) - # image_size = calculate_output_image_size(image_size, block_args.stride) # stride = 1 - - # Head - in_channels = block_args.output_filters # output of final block - out_channels = round_filters(1280, self._global_params) - Conv2d = get_same_padding_conv2d(image_size=image_size) - self._conv_head = Conv2d(in_channels, out_channels, kernel_size=1, bias=False) - self._bn1 = nn.BatchNorm2d( - num_features=out_channels, momentum=bn_mom, eps=bn_eps - ) - - # Final linear layer - self._avg_pooling = nn.AdaptiveAvgPool2d(1) - if self._global_params.include_top: - self._dropout = nn.Dropout(self._global_params.dropout_rate) - self._fc = nn.Linear(out_channels, self._global_params.num_classes) - - # Heatmap Decoder Construction - if self._global_params.include_hm_decoder: - print("Constructing the heatmap Decoder!") - self.efpn = self._global_params.efpn - self.tfpn = self._global_params.tfpn - - assert not ( - self.efpn and self.tfpn - ), "Only one of E-FPN or FPN is intergrated!" - - self.se_layer = self._global_params.se_layer - # self.hm_decoder_filters = [1792, 448, 160, 56] if self.fpn else [1792, 256, 256, 128] - self.hm_decoder_filters = [1792, 448, 160, 56] - num_kernels = [4, 4, 4, 4] if (self.efpn or self.tfpn) else [4, 4, 4] - self._dropout = nn.Dropout(self._global_params.dropout_rate) - self._sigmoid = nn.Sigmoid() - self._relu = nn.ReLU(inplace=True) - self._relu1 = nn.ReLU(inplace=False) - self.deconv_with_bias = False - - # if self._global_params.use_c2: - # self.inception_block_4 = InceptionBlock(224, 224, stride=1, pool_size=3) - if self._global_params.use_c3: - self.inception_block = InceptionBlock(112, 112, stride=1, pool_size=3) - else: - self.inception_block = InceptionBlock(56, 56, stride=1, pool_size=3) - - self.heads = self._global_params.heads - n_deconv = len(self.hm_decoder_filters) - self.fpn_layers = [ - self._global_params.use_c51, - self._global_params.use_c4, - self._global_params.use_c3, - ] - - if self.efpn or self.tfpn: - for idx in range(n_deconv): - in_decod_filters = self.hm_decoder_filters[idx] - - if idx == 0: - out_decod_filters = self.hm_decoder_filters[idx + 1] - deconv = nn.Sequential( - conv_block( - in_decod_filters, - out_decod_filters, - (3, 3), - stride=1, - padding=1, - ), - ) - else: - in_decod_filters = ( - in_decod_filters * 2 - if self.fpn_layers[idx - 1] - else in_decod_filters - ) - kernel, padding, output_padding = self._get_deconv_cfg( - num_kernels[idx] - ) - - if idx + 1 < n_deconv: - out_decod_filters = self.hm_decoder_filters[idx + 1] - deconv = nn.Sequential( - conv_block( - in_decod_filters, - out_decod_filters, - (3, 3), - stride=1, - padding=1, - ), - nn.ConvTranspose2d( - in_channels=out_decod_filters, - out_channels=out_decod_filters, - kernel_size=kernel, - stride=2, - padding=padding, - output_padding=output_padding, - bias=self.deconv_with_bias, - ), - nn.BatchNorm2d(out_decod_filters, momentum=BN_MOMENTUM), - ) - else: - out_decod_filters = in_decod_filters - deconv = nn.Sequential( - self.inception_block, - # conv_block(in_decod_filters, out_decod_filters, (3,3), stride=1, padding=1), - nn.ConvTranspose2d( - in_channels=out_decod_filters, - out_channels=out_decod_filters, - kernel_size=kernel, - stride=2, - padding=padding, - output_padding=output_padding, - bias=self.deconv_with_bias, - ), - nn.BatchNorm2d(out_decod_filters, momentum=BN_MOMENTUM), - ) - - # In case of using C2, this conv to apply to C2 features to get the same filters of the last deconv - if self._global_params.use_c2: - if self._global_params.norm_c2: - self.texture_enhance = Texture_Enhance(32) - # self.conv_c2 = point_wise_block(128, out_decod_filters) - self.conv_c2 = conv_block( - 128, - out_decod_filters, - (3, 3), - stride=1, - padding=1, - ) - else: - self.conv_c2 = conv_block( - 32, - out_decod_filters, - (3, 3), - stride=1, - padding=1, - ) - if self.se_layer: - se = SELayer(channel=out_decod_filters * 2) - self.__setattr__(f"se_layer_{idx+1}", se) - - self.__setattr__(f"deconv_{idx+1}", deconv) - else: - self.deconv_layers = self._make_deconv_layer( - len(num_kernels), - self.hm_decoder_filters, - num_kernels, - ) - - for head, num_output in self.heads.items(): - head_conv = int(self._global_params.head_conv) - num_output = int(num_output) - if self._global_params.use_c2: - assert ( - self._global_params.efpn or self._global_params.tfpn - ), "FPN Design must be set active!" - assert ( - self._global_params.use_c3 - ), "C3 must be utilized for FPN intergration of C2" - in_head_filters = self.hm_decoder_filters[-1] * 4 - elif self._global_params.use_c3: - in_head_filters = self.hm_decoder_filters[-1] * 2 - else: - in_head_filters = self.hm_decoder_filters[-1] - - if head_conv > 0: - if head != "cls": - fc = nn.Sequential( - nn.Conv2d( - in_head_filters, - head_conv, - kernel_size=3, - padding=1, - bias=True, - ), - nn.BatchNorm2d(head_conv), - nn.ReLU(inplace=True), - nn.Conv2d( - head_conv, - num_output, - kernel_size=1, - stride=1, - padding=0, - ), - ) - else: - fc = nn.Sequential( - nn.Conv2d( - in_head_filters, - head_conv, - kernel_size=3, - padding=1, - bias=True, - ), - nn.BatchNorm2d(head_conv, momentum=BN_MOMENTUM), - nn.ReLU(inplace=True), - # nn.Conv2d(head_conv, num_output, kernel_size=1, - # stride=1, padding=0, bias=True), - # nn.BatchNorm2d(num_output), - # nn.ReLU(inplace=True), - # nn.AdaptiveMaxPool2d(head_conv//4), - nn.AdaptiveAvgPool2d(1), - nn.Flatten(), - # nn.Linear((head_conv//4)**2, head_conv, bias=True), - # nn.BatchNorm1d(head_conv, momentum=BN_MOMENTUM), - # nn.ReLU(inplace=True), - nn.Linear(head_conv, num_output, bias=True), - # nn.Sigmoid(), - # nn.Softmax(dim=-1) - ) - else: - fc = nn.Conv2d( - in_channels=in_head_filters, - out_channels=num_output, - kernel_size=1, - stride=1, - padding=0, - ) - self.__setattr__(head, fc) - - # set activation to memory efficient swish by default - self._swish = MemoryEfficientSwish() - - def _get_deconv_cfg(self, deconv_kernel): - if deconv_kernel == 4: - padding = 1 - output_padding = 0 - elif deconv_kernel == 3: - padding = 1 - output_padding = 1 - elif deconv_kernel == 2: - padding = 0 - output_padding = 0 - - return deconv_kernel, padding, output_padding - - def _make_deconv_layer(self, num_layers, num_filters, num_kernels): - assert num_layers == ( - len(num_filters) - 1 - ), "ERROR: num_deconv_layers is different len(num_deconv_filters)" - assert num_layers == len( - num_kernels - ), "ERROR: num_deconv_layers is different len(num_deconv_filters)" - - layers = [] - for i in range(num_layers): - kernel, padding, output_padding = self._get_deconv_cfg(num_kernels[i]) - - in_planes = num_filters[i] - out_planes = num_filters[i + 1] - - layers.append( - nn.Sequential( - nn.ConvTranspose2d( - in_channels=in_planes, - out_channels=out_planes, - kernel_size=kernel, - stride=2, - padding=padding, - output_padding=output_padding, - bias=self.deconv_with_bias, - ), - nn.BatchNorm2d(out_planes, momentum=BN_MOMENTUM), - nn.ReLU(inplace=True), - ) - ) - - return nn.Sequential(*layers) - - def set_swish(self, memory_efficient=True): - """Sets swish function as memory efficient (for training) or standard (for export). - Args: - memory_efficient (bool): Whether to use memory-efficient version of swish. - """ - self._swish = MemoryEfficientSwish() if memory_efficient else Swish() - for block in self._blocks: - block.set_swish(memory_efficient) - - def extract_endpoints(self, inputs): - """Use convolution layer to extract features - from reduction levels i in [1, 2, 3, 4, 5]. - Args: - inputs (tensor): Input tensor. - Returns: - Dictionary of last intermediate features - with reduction levels i in [1, 2, 3, 4, 5]. - Example: - >>> import torch - >>> from efficientnet.model import EfficientNet - >>> inputs = torch.rand(1, 3, 224, 224) - >>> model = EfficientNet.from_pretrained('efficientnet-b0') - >>> endpoints = model.extract_endpoints(inputs) - >>> print(endpoints['reduction_1'].shape) # torch.Size([1, 16, 112, 112]) - >>> print(endpoints['reduction_2'].shape) # torch.Size([1, 24, 56, 56]) - >>> print(endpoints['reduction_3'].shape) # torch.Size([1, 40, 28, 28]) - >>> print(endpoints['reduction_4'].shape) # torch.Size([1, 112, 14, 14]) - >>> print(endpoints['reduction_5'].shape) # torch.Size([1, 320, 7, 7]) - >>> print(endpoints['reduction_6'].shape) # torch.Size([1, 1280, 7, 7]) - """ - endpoints = dict() - - # Stem - x = self._swish(self._bn0(self._conv_stem(inputs))) - prev_x = x - - # Blocks - for idx, block in enumerate(self._blocks): - drop_connect_rate = self._global_params.drop_connect_rate - if drop_connect_rate: - drop_connect_rate *= float(idx) / len( - self._blocks - ) # scale drop connect_rate - x = block(x, drop_connect_rate=drop_connect_rate) - # print('Prev', prev_x.size()) - # print('X', x.size()) - if prev_x.size(2) > x.size(2): - endpoints["reduction_{}".format(len(endpoints) + 1)] = prev_x - elif idx == len(self._blocks) - 1: - endpoints["reduction_{}".format(len(endpoints) + 1)] = x - prev_x = x - - # Head - x = self._swish(self._bn1(self._conv_head(x))) - endpoints["reduction_{}".format(len(endpoints) + 1)] = x - - return endpoints - - def extract_features(self, inputs): - """use convolution layer to extract feature . - Args: - inputs (tensor): Input tensor. - Returns: - Output of the final convolution - layer in the efficientnet model. - """ - # Stem - x = self._swish(self._bn0(self._conv_stem(inputs))) - - # Blocks - for idx, block in enumerate(self._blocks): - drop_connect_rate = self._global_params.drop_connect_rate - if drop_connect_rate: - drop_connect_rate *= float(idx) / len( - self._blocks - ) # scale drop connect_rate - x = block(x, drop_connect_rate=drop_connect_rate) - - # Head - x = self._swish(self._bn1(self._conv_head(x))) - - return x - - def forward(self, inputs): - """EfficientNet's forward function. - Calls extract_features to extract features, applies final linear layer, and returns logits. - Args: - inputs (tensor): Input tensor. - Returns: - Output of this model after processing. - """ - # Convolution layers - # x = self.extract_features(inputs) - endpoints = self.extract_endpoints(inputs) - x1 = endpoints["reduction_6"] - x2 = endpoints["reduction_5"] - x3 = endpoints["reduction_4"] - x4 = endpoints["reduction_3"] - x5 = endpoints["reduction_2"] - x = x1 - - if self._global_params.include_top: - # Pooling and final linear layer - x = self._avg_pooling(x) - - x = x.flatten(start_dim=1) - x = self._dropout(x) - x = self._fc(x) - res = {} - res["cls"] = x - - return res - - if self._global_params.include_hm_decoder: - x1 = self._dropout(x1) - x2 = self._dropout(x2) - x3 = self._dropout(x3) - x4 = self._dropout(x4) - - if self.efpn: - assert ( - self._global_params.use_c51 - ), "C51 must be utilized for FPN intergration" - - x = self.__getattr__("deconv_1")(x1) - - if self._global_params.use_c51: - x_weighted = self._sigmoid(x) - x_inv = torch.sub(1, x_weighted, alpha=1) - x2_ = torch.multiply(x_inv, x2) - x = torch.cat([x, x2_], dim=1) - - if self.se_layer: - x = self.__getattr__("se_layer_1")(x) - else: - x = self._relu(x) - - x = self.__getattr__("deconv_2")(x) - - if self._global_params.use_c4: - x_weighted = self._sigmoid(x) - x_inv = torch.sub(1, x_weighted, alpha=1) - x3_ = torch.multiply(x_inv, x3) - x = torch.cat([x, x3_], dim=1) - - if self.se_layer: - x = self.__getattr__("se_layer_2")(x) - else: - x = self._relu(x) - - x = self.__getattr__("deconv_3")(x) - - if self._global_params.use_c3: - assert ( - self._global_params.use_c4 - ), "C4 must be utilized for FPN intergration of C3" - - x_weighted = self._sigmoid(x) - x_inv = torch.sub(1, x_weighted, alpha=1) - x4_ = torch.multiply(x_inv, x4) - x = torch.cat([x, x4_], dim=1) - - if self.se_layer: - x = self.__getattr__("se_layer_3")(x) - else: - x = self._relu(x) - - x = self.__getattr__("deconv_4")(x) - - if not self._global_params.use_c2: - x = self._relu(x) - else: - assert ( - self._global_params.use_c3 - ), "C3 must be utilized for FPN intergration of C2" - - x5 = self._dropout(x5) - if self._global_params.norm_c2: - x5_ = self.texture_enhance(x5, (16, 16)) - x5_ = self.conv_c2(x5_) - else: - x5_ = self.conv_c2(x5) - - x_weighted = self._sigmoid(x) - x_inv = torch.sub(1, x_weighted, alpha=1) - x5_ = torch.multiply(x_inv, x5_) - x = torch.cat([x, x5_], dim=1) - - # # Adding multi receptive fields - # x = self.inception_block_4(x) - - if self.se_layer: - x = self.__getattr__("se_layer_4")(x) - elif self.tfpn: - assert ( - self._global_params.use_c51 - ), "C51 must be utilized for FPN intergration" - x = self.__getattr__("deconv_1")(x1) - x = self._relu1(x) - x = torch.cat([x, x2], dim=1) - - x = self.__getattr__("deconv_2")(x) - if not self._global_params.use_c4: - x = self._relu1(x) - else: - x = torch.cat([x, x3], dim=1) - - x = self.__getattr__("deconv_3")(x) - if not self._global_params.use_c3: - x = self._relu1(x) - else: - assert ( - self._global_params.use_c4 - ), "C4 must be utilized for FPN intergration of C3" - x = torch.cat([x, x4], dim=1) - - x = self.__getattr__("deconv_4")(x) - if not self._global_params.use_c2: - x = self._relu(x) - else: - assert ( - self._global_params.use_c3 - ), "C3 must be utilized for FPN intergration of C2" - x5 = self._dropout(x5) - x5 = self.conv_c2(x5) - x = self._relu1(x) - x = torch.cat([x, x5], dim=1) - else: - x = self.deconv_layers(x1) - - ret = {} - for head in self.heads: - ret[head] = self.__getattr__(head)(x) - - return [ret] - - @classmethod - def from_name(cls, model_name, in_channels=3, **override_params): - """Create an efficientnet model according to name. - Args: - model_name (str): Name for efficientnet. - in_channels (int): Input data's channel number. - override_params (other key word params): - Params to override model's global_params. - Optional key: - 'width_coefficient', 'depth_coefficient', - 'image_size', 'dropout_rate', - 'num_classes', 'batch_norm_momentum', - 'batch_norm_epsilon', 'drop_connect_rate', - 'depth_divisor', 'min_depth' - Returns: - An efficientnet model. - """ - cls._check_model_name_is_valid(model_name) - blocks_args, global_params = get_model_params(model_name, override_params) - model = cls(blocks_args, global_params) - model._change_in_channels(in_channels) - return model - - @classmethod - def from_pretrained( - cls, - model_name, - weights_path=None, - advprop=False, - in_channels=3, - num_classes=1000, - **override_params, - ): - """Create an efficientnet model according to name. - Args: - model_name (str): Name for efficientnet. - weights_path (None or str): - str: path to pretrained weights file on the local disk. - None: use pretrained weights downloaded from the Internet. - advprop (bool): - Whether to load pretrained weights - trained with advprop (valid when weights_path is None). - in_channels (int): Input data's channel number. - num_classes (int): - Number of categories for classification. - It controls the output size for final linear layer. - override_params (other key word params): - Params to override model's global_params. - Optional key: - 'width_coefficient', 'depth_coefficient', - 'image_size', 'dropout_rate', - 'batch_norm_momentum', - 'batch_norm_epsilon', 'drop_connect_rate', - 'depth_divisor', 'min_depth' - Returns: - A pretrained efficientnet model. - """ - model = cls.from_name(model_name, num_classes=num_classes, **override_params) - load_pretrained_weights( - model, - model_name, - weights_path=weights_path, - load_fc=((num_classes == 1000) and (model._global_params.include_top)), - advprop=advprop, - ) - model._change_in_channels(in_channels) - return model - - @classmethod - def get_image_size(cls, model_name): - """Get the input image size for a given efficientnet model. - Args: - model_name (str): Name for efficientnet. - Returns: - Input image size (resolution). - """ - cls._check_model_name_is_valid(model_name) - _, _, res, _ = efficientnet_params(model_name) - return res - - @classmethod - def _check_model_name_is_valid(cls, model_name): - """Validates model name. - Args: - model_name (str): Name for efficientnet. - Returns: - bool: Is a valid name or not. - """ - if model_name not in VALID_MODELS: - raise ValueError("model_name should be one of: " + ", ".join(VALID_MODELS)) - - def _change_in_channels(self, in_channels): - """Adjust model's first convolution layer to in_channels, if in_channels not equals 3. - Args: - in_channels (int): Input data's channel number. - """ - if in_channels != 3: - Conv2d = get_same_padding_conv2d(image_size=self._global_params.image_size) - out_channels = round_filters(32, self._global_params) - self._conv_stem = Conv2d( - in_channels, out_channels, kernel_size=3, stride=2, bias=False - ) - - -@MODELS.register_module() -class PoseEfficientNet(EfficientNet): - def __init__(self, model_name, in_channels=3, **override_params): - self.model_name = model_name - self.in_channels = in_channels - - # Initialize Parent Class - super()._check_model_name_is_valid(model_name) - blocks_args, global_params = get_model_params(model_name, override_params) - super().__init__(blocks_args, global_params) - - @classmethod - def from_name(cls, model_name, in_channels, **override_params): - return NotImplemented - - @classmethod - def from_pretrained( - cls, - model_name, - weights_path, - advprop, - in_channels, - num_classes, - **override_params, - ): - return NotImplemented - - def _change_in_channels(self, in_channels): - return NotImplemented - - def init_weights(self, pretrained=False, advprop=False, verbose=True): - if pretrained: - url_map_ = url_map_advprop if advprop else url_map - state_dict = model_zoo.load_url(url_map_[self.model_name]) - state_dict.pop("_fc.weight") - state_dict.pop("_fc.bias") - self.load_state_dict(state_dict, strict=False) - - # Initialize weights for Deconvolution Layer - if self._global_params.include_hm_decoder: - if self.efpn or self.tfpn: - deconv_layers = [ - self.deconv_1, - self.deconv_2, - self.deconv_3, - self.deconv_4, - ] - else: - deconv_layers = self.deconv_layers - - for layer in deconv_layers: - for _, m in layer.named_modules(): - if isinstance(m, nn.ConvTranspose2d): - n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels - m.weight.data.normal_(0, math.sqrt(2.0 / n)) - if self.deconv_with_bias: - nn.init.constant_(m.bias, 0) - elif isinstance(m, nn.BatchNorm2d): - nn.init.constant_(m.weight, 1) - nn.init.constant_(m.bias, 0) - - # Init head parameters - for head in self.heads: - final_layer = self.__getattr__(head) - for i, m in enumerate(final_layer.modules()): - if isinstance(m, nn.Conv2d): - if m.weight.shape[0] == self.heads[head]: - if "hm" in head: - nn.init.constant_(m.bias, -2.19) - else: - # nn.init.normal_(m.weight, std=0.001) - n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels - m.weight.data.normal_(0, math.sqrt(2.0 / n)) - nn.init.constant_(m.bias, 0) - - self._change_in_channels(in_channels=self.in_channels) - if verbose: - print("Loaded pretrained weights for {}".format(self.model_name)) - - -if __name__ == "__main__": - cfg = dict( - type="PoseEfficientNet", - model_name="efficientnet-b4", - include_top=False, - include_hm_decoder=True, - head_conv=64, - heads={"hm": 1, "cls": 1, "cstency": 256}, - use_c2=True, - ) - model = build_model(cfg, MODELS) - model.init_weights(pretrained=True) - model.eval() - inputs = torch.rand((1, 3, 384, 384)) - - for i, (n, p) in enumerate(model.named_parameters()): - print(i, n) - - # To show the whole pose EFN model outputs shape - x = model(inputs)[0] - for head in x.keys(): - print(f"{head} shape is --- {x[head].shape}") - - # To show the endpoints features shape - # endpoints = model.extract_endpoints(inputs) - # for k in endpoints.keys(): - # print(endpoints[k].shape) diff --git a/video/fake-stormer/model_code/models/networks/pose_hrnet.py b/video/fake-stormer/model_code/models/networks/pose_hrnet.py deleted file mode 100644 index 0c7f6bfc240320820f070a12e57687e30b608b9b..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/networks/pose_hrnet.py +++ /dev/null @@ -1,540 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, division, print_function - -import logging -import os -import re - -import torch -import torch.nn as nn - -from ..builder import MODELS -from .common import BN_MOMENTUM, conv3x3 - - -class BasicBlock(nn.Module): - expansion = 1 - - def __init__(self, inplanes, planes, stride=1, downsample=None): - super(BasicBlock, self).__init__() - self.conv1 = conv3x3(inplanes, planes, stride) - self.bn1 = nn.BatchNorm2d(planes, momentum=BN_MOMENTUM) - self.relu = nn.ReLU(inplace=True) - self.conv2 = conv3x3(planes, planes) - self.bn2 = nn.BatchNorm2d(planes, momentum=BN_MOMENTUM) - self.downsample = downsample - self.stride = stride - - def forward(self, x): - residual = x - - out = self.conv1(x) - out = self.bn1(out) - out = self.relu(out) - - out = self.conv2(out) - out = self.bn2(out) - - if self.downsample is not None: - residual = self.downsample(x) - - out += residual - out = self.relu(out) - - return out - - -class Bottleneck(nn.Module): - expansion = 4 - - def __init__(self, inplanes, planes, stride=1, downsample=None): - super(Bottleneck, self).__init__() - self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, bias=False) - self.bn1 = nn.BatchNorm2d(planes, momentum=BN_MOMENTUM) - self.conv2 = nn.Conv2d( - planes, planes, kernel_size=3, stride=stride, padding=1, bias=False - ) - self.bn2 = nn.BatchNorm2d(planes, momentum=BN_MOMENTUM) - self.conv3 = nn.Conv2d( - planes, planes * self.expansion, kernel_size=1, bias=False - ) - self.bn3 = nn.BatchNorm2d(planes * self.expansion, momentum=BN_MOMENTUM) - self.relu = nn.ReLU(inplace=True) - self.downsample = downsample - self.stride = stride - - def forward(self, x): - residual = x - - out = self.conv1(x) - out = self.bn1(out) - out = self.relu(out) - - out = self.conv2(out) - out = self.bn2(out) - out = self.relu(out) - - out = self.conv3(out) - out = self.bn3(out) - - if self.downsample is not None: - residual = self.downsample(x) - - out += residual - out = self.relu(out) - - return out - - -class HighResolutionModule(nn.Module): - def __init__( - self, - num_branches, - blocks, - num_blocks, - num_inchannels, - num_channels, - fuse_method, - multi_scale_output=True, - ): - super(HighResolutionModule, self).__init__() - self._check_branches( - num_branches, blocks, num_blocks, num_inchannels, num_channels - ) - - self.num_inchannels = num_inchannels - self.fuse_method = fuse_method - self.num_branches = num_branches - - self.multi_scale_output = multi_scale_output - - self.branches = self._make_branches( - num_branches, blocks, num_blocks, num_channels - ) - self.fuse_layers = self._make_fuse_layers() - self.relu = nn.ReLU(True) - - def _check_branches( - self, num_branches, blocks, num_blocks, num_inchannels, num_channels - ): - if num_branches != len(num_blocks): - error_msg = "NUM_BRANCHES({}) <> NUM_BLOCKS({})".format( - num_branches, len(num_blocks) - ) - # logger.error(error_msg) - raise ValueError(error_msg) - - if num_branches != len(num_channels): - error_msg = "NUM_BRANCHES({}) <> NUM_CHANNELS({})".format( - num_branches, len(num_channels) - ) - # logger.error(error_msg) - raise ValueError(error_msg) - - if num_branches != len(num_inchannels): - error_msg = "NUM_BRANCHES({}) <> NUM_INCHANNELS({})".format( - num_branches, len(num_inchannels) - ) - # logger.error(error_msg) - raise ValueError(error_msg) - - def _make_one_branch(self, branch_index, block, num_blocks, num_channels, stride=1): - downsample = None - if ( - stride != 1 - or self.num_inchannels[branch_index] - != num_channels[branch_index] * block.expansion - ): - downsample = nn.Sequential( - nn.Conv2d( - self.num_inchannels[branch_index], - num_channels[branch_index] * block.expansion, - kernel_size=1, - stride=stride, - bias=False, - ), - nn.BatchNorm2d( - num_channels[branch_index] * block.expansion, momentum=BN_MOMENTUM - ), - ) - - layers = [] - layers.append( - block( - self.num_inchannels[branch_index], - num_channels[branch_index], - stride, - downsample, - ) - ) - self.num_inchannels[branch_index] = num_channels[branch_index] * block.expansion - for i in range(1, num_blocks[branch_index]): - layers.append( - block(self.num_inchannels[branch_index], num_channels[branch_index]) - ) - - return nn.Sequential(*layers) - - def _make_branches(self, num_branches, block, num_blocks, num_channels): - branches = [] - - for i in range(num_branches): - branches.append(self._make_one_branch(i, block, num_blocks, num_channels)) - - return nn.ModuleList(branches) - - def _make_fuse_layers(self): - if self.num_branches == 1: - return None - - num_branches = self.num_branches - num_inchannels = self.num_inchannels - fuse_layers = [] - for i in range(num_branches if self.multi_scale_output else 1): - fuse_layer = [] - for j in range(num_branches): - if j > i: - fuse_layer.append( - nn.Sequential( - nn.Conv2d( - num_inchannels[j], - num_inchannels[i], - 1, - 1, - 0, - bias=False, - ), - nn.BatchNorm2d(num_inchannels[i]), - nn.Upsample(scale_factor=2 ** (j - i), mode="nearest"), - ) - ) - elif j == i: - fuse_layer.append(None) - else: - conv3x3s = [] - for k in range(i - j): - if k == i - j - 1: - num_outchannels_conv3x3 = num_inchannels[i] - conv3x3s.append( - nn.Sequential( - nn.Conv2d( - num_inchannels[j], - num_outchannels_conv3x3, - 3, - 2, - 1, - bias=False, - ), - nn.BatchNorm2d(num_outchannels_conv3x3), - ) - ) - else: - num_outchannels_conv3x3 = num_inchannels[j] - conv3x3s.append( - nn.Sequential( - nn.Conv2d( - num_inchannels[j], - num_outchannels_conv3x3, - 3, - 2, - 1, - bias=False, - ), - nn.BatchNorm2d(num_outchannels_conv3x3), - nn.ReLU(True), - ) - ) - fuse_layer.append(nn.Sequential(*conv3x3s)) - fuse_layers.append(nn.ModuleList(fuse_layer)) - - return nn.ModuleList(fuse_layers) - - def get_num_inchannels(self): - return self.num_inchannels - - def forward(self, x): - if self.num_branches == 1: - return [self.branches[0](x[0])] - - for i in range(self.num_branches): - x[i] = self.branches[i](x[i]) - - x_fuse = [] - - for i in range(len(self.fuse_layers)): - y = x[0] if i == 0 else self.fuse_layers[i][0](x[0]) - for j in range(1, self.num_branches): - if i == j: - y = y + x[j] - else: - y = y + self.fuse_layers[i][j](x[j]) - x_fuse.append(self.relu(y)) - - return x_fuse - - -blocks_dict = {"BASIC": BasicBlock, "BOTTLENECK": Bottleneck} - - -@MODELS.register_module() -class PoseHighResolutionNet(nn.Module): - def __init__(self, cfg, **kwargs): - self.inplanes = 64 - extra = cfg.MODEL.EXTRA - self.cls_based_hm = cfg.MODEL.cls_based_hm - self.heads = cfg.MODEL.heads - super(PoseHighResolutionNet, self).__init__() - - # stem net - self.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=2, padding=1, bias=False) - self.bn1 = nn.BatchNorm2d(64, momentum=BN_MOMENTUM) - self.conv2 = nn.Conv2d(64, 64, kernel_size=3, stride=2, padding=1, bias=False) - self.bn2 = nn.BatchNorm2d(64, momentum=BN_MOMENTUM) - self.relu = nn.ReLU(inplace=True) - self.layer1 = self._make_layer(Bottleneck, 64, 4) - - self.stage2_cfg = cfg["MODEL"]["EXTRA"]["STAGE2"] - num_channels = self.stage2_cfg["NUM_CHANNELS"] - block = blocks_dict[self.stage2_cfg["BLOCK"]] - num_channels = [ - num_channels[i] * block.expansion for i in range(len(num_channels)) - ] - self.transition1 = self._make_transition_layer([256], num_channels) - self.stage2, pre_stage_channels = self._make_stage( - self.stage2_cfg, num_channels - ) - - self.stage3_cfg = cfg["MODEL"]["EXTRA"]["STAGE3"] - num_channels = self.stage3_cfg["NUM_CHANNELS"] - block = blocks_dict[self.stage3_cfg["BLOCK"]] - num_channels = [ - num_channels[i] * block.expansion for i in range(len(num_channels)) - ] - self.transition2 = self._make_transition_layer(pre_stage_channels, num_channels) - self.stage3, pre_stage_channels = self._make_stage( - self.stage3_cfg, num_channels - ) - - self.stage4_cfg = cfg["MODEL"]["EXTRA"]["STAGE4"] - num_channels = self.stage4_cfg["NUM_CHANNELS"] - block = blocks_dict[self.stage4_cfg["BLOCK"]] - num_channels = [ - num_channels[i] * block.expansion for i in range(len(num_channels)) - ] - self.transition3 = self._make_transition_layer(pre_stage_channels, num_channels) - self.stage4, pre_stage_channels = self._make_stage( - self.stage4_cfg, num_channels, multi_scale_output=False - ) - - self.final_layer = nn.Conv2d( - in_channels=pre_stage_channels[0], - out_channels=cfg.MODEL.NUM_JOINTS, - kernel_size=extra.FINAL_CONV_KERNEL, - stride=1, - padding=1 if extra.FINAL_CONV_KERNEL == 3 else 0, - ) - - self.final_layer_cls = nn.Sequential( - nn.BatchNorm2d(cfg.MODEL.NUM_JOINTS, momentum=BN_MOMENTUM), - nn.AdaptiveMaxPool2d(cfg.MODEL.HEATMAP_SIZE[0] // 4), - nn.Flatten(), - nn.Linear( - (cfg.MODEL.HEATMAP_SIZE[0] // 4) ** 2, cfg.MODEL.NUM_JOINTS, bias=True - ), - nn.Sigmoid(), - ) - - self.pretrained_layers = cfg["MODEL"]["EXTRA"]["PRETRAINED_LAYERS"] - - def _make_transition_layer(self, num_channels_pre_layer, num_channels_cur_layer): - num_branches_cur = len(num_channels_cur_layer) - num_branches_pre = len(num_channels_pre_layer) - - transition_layers = [] - for i in range(num_branches_cur): - if i < num_branches_pre: - if num_channels_cur_layer[i] != num_channels_pre_layer[i]: - transition_layers.append( - nn.Sequential( - nn.Conv2d( - num_channels_pre_layer[i], - num_channels_cur_layer[i], - 3, - 1, - 1, - bias=False, - ), - nn.BatchNorm2d(num_channels_cur_layer[i]), - nn.ReLU(inplace=True), - ) - ) - else: - transition_layers.append(None) - else: - conv3x3s = [] - for j in range(i + 1 - num_branches_pre): - inchannels = num_channels_pre_layer[-1] - outchannels = ( - num_channels_cur_layer[i] - if j == i - num_branches_pre - else inchannels - ) - conv3x3s.append( - nn.Sequential( - nn.Conv2d(inchannels, outchannels, 3, 2, 1, bias=False), - nn.BatchNorm2d(outchannels), - nn.ReLU(inplace=True), - ) - ) - transition_layers.append(nn.Sequential(*conv3x3s)) - - return nn.ModuleList(transition_layers) - - def _make_layer(self, block, planes, blocks, stride=1): - downsample = None - if stride != 1 or self.inplanes != planes * block.expansion: - downsample = nn.Sequential( - nn.Conv2d( - self.inplanes, - planes * block.expansion, - kernel_size=1, - stride=stride, - bias=False, - ), - nn.BatchNorm2d(planes * block.expansion, momentum=BN_MOMENTUM), - ) - - layers = [] - layers.append(block(self.inplanes, planes, stride, downsample)) - self.inplanes = planes * block.expansion - for i in range(1, blocks): - layers.append(block(self.inplanes, planes)) - - return nn.Sequential(*layers) - - def _make_stage(self, layer_config, num_inchannels, multi_scale_output=True): - num_modules = layer_config["NUM_MODULES"] - num_branches = layer_config["NUM_BRANCHES"] - num_blocks = layer_config["NUM_BLOCKS"] - num_channels = layer_config["NUM_CHANNELS"] - block = blocks_dict[layer_config["BLOCK"]] - fuse_method = layer_config["FUSE_METHOD"] - - modules = [] - for i in range(num_modules): - # multi_scale_output is only used last module - if not multi_scale_output and i == num_modules - 1: - reset_multi_scale_output = False - else: - reset_multi_scale_output = True - - modules.append( - HighResolutionModule( - num_branches, - block, - num_blocks, - num_inchannels, - num_channels, - fuse_method, - reset_multi_scale_output, - ) - ) - num_inchannels = modules[-1].get_num_inchannels() - - return nn.Sequential(*modules), num_inchannels - - def forward(self, x): - x = self.conv1(x) - x = self.bn1(x) - x = self.relu(x) - x = self.conv2(x) - x = self.bn2(x) - x = self.relu(x) - x = self.layer1(x) - - x_list = [] - for i in range(self.stage2_cfg["NUM_BRANCHES"]): - if self.transition1[i] is not None: - x_list.append(self.transition1[i](x)) - else: - x_list.append(x) - y_list = self.stage2(x_list) - - x_list = [] - for i in range(self.stage3_cfg["NUM_BRANCHES"]): - if self.transition2[i] is not None: - x_list.append(self.transition2[i](y_list[-1])) - else: - x_list.append(y_list[i]) - y_list = self.stage3(x_list) - - x_list = [] - for i in range(self.stage4_cfg["NUM_BRANCHES"]): - if self.transition3[i] is not None: - x_list.append(self.transition3[i](y_list[-1])) - else: - x_list.append(y_list[i]) - y_list = self.stage4(x_list) - - x = self.final_layer(y_list[0]) - - ret = {} - for head in self.heads.keys(): - if head == "hm": - ret[head] = x - else: - x1 = self.final_layer_cls(x) - ret[head] = x1 - return [ret] - - def init_weights(self, pretrained="", **kwargs): - for m in self.modules(): - if isinstance(m, nn.Conv2d): - # nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') - nn.init.normal_(m.weight, std=0.001) - for name, _ in m.named_parameters(): - if name in ["bias"]: - nn.init.constant_(m.bias, 0) - elif isinstance(m, nn.BatchNorm2d): - nn.init.constant_(m.weight, 1) - nn.init.constant_(m.bias, 0) - elif isinstance(m, nn.ConvTranspose2d): - nn.init.normal_(m.weight, std=0.001) - for name, _ in m.named_parameters(): - if name in ["bias"]: - nn.init.constant_(m.bias, 0) - - if os.path.isfile(pretrained): - pretrained_state_dict = torch.load( - pretrained, map_location=torch.device("cpu") - ) - - need_init_state_dict = {} - for name, m in pretrained_state_dict.items(): - if ( - name.split(".")[0] in self.pretrained_layers - or self.pretrained_layers[0] == "*" - ): - need_init_state_dict[name] = m - self.load_state_dict(need_init_state_dict, strict=False) - elif pretrained: - raise ValueError("{} is not exist!".format(pretrained)) - - -def get_pose_net(cfg, is_train, **kwargs): - model = PoseHighResolutionNet(cfg, **kwargs) - - if is_train and cfg.MODEL.INIT_WEIGHTS: - model.init_weights(cfg.MODEL.PRETRAINED) - - return model - - -if __name__ == "__main__": - from builder import build_model - from configs.get_config import load_config - - cfg = load_config("configs/hrnet_sbi.yaml") - - hrnet = build_model(cfg.MODEL, MODELS, default_args=dict(cfg=cfg)) - print(hrnet) diff --git a/video/fake-stormer/model_code/models/utils/__init__.py b/video/fake-stormer/model_code/models/utils/__init__.py deleted file mode 100644 index f469208ff760535cac619667e3c040138c84d20e..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/utils/__init__.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding:utf-8 -*- -from .check_and_update_config import check_and_update_config -from .utils import ( - freeze_backbone, - load_checkpoint, - load_model, - load_pretrained, - n_param_model, - preset_model, - save_model, - swin_converter, - unfreeze_backbone, -) - -__all__ = [ - "check_and_update_config", - "build_model", - "load_pretrained", - "freeze_backbone", - "resnet_spec", - "load_model", - "save_model", - "unfreeze_backbone", - "preset_model", - "load_checkpoint", - "n_param_model", - "swin_converter", -] diff --git a/video/fake-stormer/model_code/models/utils/check_and_update_config.py b/video/fake-stormer/model_code/models/utils/check_and_update_config.py deleted file mode 100644 index 7541a1bb8dc4a32ad4ae9f7f73ac498041e69a1a..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/utils/check_and_update_config.py +++ /dev/null @@ -1,262 +0,0 @@ -# -*- coding:utf-8 -*- -# Copyright (c) OpenMMLab. All rights reserved. -from typing import Dict, Optional, Tuple, Union - -from mmengine.config import Config, ConfigDict -from mmengine.dist import master_only -from mmengine.logging import MMLogger - -ConfigType = Union[Config, ConfigDict] - - -def process_input_transform( - input_transform: str, - head: Dict, - head_new: Dict, - head_deleted_dict: Dict, - head_append_dict: Dict, - neck_new: Dict, - input_index: Tuple[int], - align_corners: bool, -) -> None: - """Process the input_transform field and update head and neck - dictionaries.""" - if input_transform == "resize_concat": - in_channels = head_new.pop("in_channels") - head_deleted_dict["in_channels"] = str(in_channels) - in_channels = sum([in_channels[i] for i in input_index]) - head_new["in_channels"] = in_channels - head_append_dict["in_channels"] = str(in_channels) - - neck_new.update( - dict( - type="FeatureMapProcessor", - concat=True, - select_index=input_index, - ) - ) - if align_corners: - neck_new["align_corners"] = align_corners - - elif input_transform == "select": - if input_index != (-1,): - neck_new.update(dict(type="FeatureMapProcessor", select_index=input_index)) - if isinstance(head["in_channels"], tuple): - in_channels = head_new.pop("in_channels") - head_deleted_dict["in_channels"] = str(in_channels) - if isinstance(input_index, int): - in_channels = in_channels[input_index] - else: - in_channels = tuple([in_channels[i] for i in input_index]) - head_new["in_channels"] = in_channels - head_append_dict["in_channels"] = str(in_channels) - if align_corners: - neck_new["align_corners"] = align_corners - - else: - raise ValueError( - f"model.head get invalid value for argument " - f"input_transform: {input_transform}" - ) - - -def process_extra_field( - extra: Dict, - head_new: Dict, - head_deleted_dict: Dict, - head_append_dict: Dict, - neck_new: Dict, -) -> None: - """Process the extra field and update head and neck dictionaries.""" - head_deleted_dict["extra"] = "dict(" - for key, value in extra.items(): - head_deleted_dict["extra"] += f"{key}={value}," - head_deleted_dict["extra"] = head_deleted_dict["extra"][:-1] + ")" - if "final_conv_kernel" in extra: - kernel_size = extra["final_conv_kernel"] - if kernel_size > 1: - padding = kernel_size // 2 - head_new["final_layer"] = dict(kernel_size=kernel_size, padding=padding) - head_append_dict["final_layer"] = ( - f"dict(kernel_size={kernel_size}, " f"padding={padding})" - ) - else: - head_new["final_layer"] = dict(kernel_size=kernel_size) - head_append_dict["final_layer"] = f"dict(kernel_size={kernel_size})" - if "upsample" in extra: - neck_new.update( - dict( - type="FeatureMapProcessor", - scale_factor=float(extra["upsample"]), - apply_relu=True, - ) - ) - - -def process_has_final_layer( - has_final_layer: bool, - head_new: Dict, - head_deleted_dict: Dict, - head_append_dict: Dict, -) -> None: - """Process the has_final_layer field and update the head dictionary.""" - head_deleted_dict["has_final_layer"] = str(has_final_layer) - if not has_final_layer: - if "final_layer" not in head_new: - head_new["final_layer"] = None - head_append_dict["final_layer"] = "None" - - -def check_and_update_config( - neck: Optional[ConfigType], head: ConfigType -) -> Tuple[Optional[Dict], Dict]: - """Check and update the configuration of the head and neck components. - Args: - neck (Optional[ConfigType]): Configuration for the neck component. - head (ConfigType): Configuration for the head component. - - Returns: - Tuple[Optional[Dict], Dict]: Updated configurations for the neck - and head components. - """ - head_new, neck_new = head.copy(), neck.copy() if isinstance(neck, dict) else {} - head_deleted_dict, head_append_dict = {}, {} - - if "input_transform" in head: - input_transform = head_new.pop("input_transform") - head_deleted_dict["input_transform"] = f"'{input_transform}'" - else: - input_transform = "select" - - if "input_index" in head: - input_index = head_new.pop("input_index") - head_deleted_dict["input_index"] = str(input_index) - else: - input_index = (-1,) - - if "align_corners" in head: - align_corners = head_new.pop("align_corners") - head_deleted_dict["align_corners"] = str(align_corners) - else: - align_corners = False - - process_input_transform( - input_transform, - head, - head_new, - head_deleted_dict, - head_append_dict, - neck_new, - input_index, - align_corners, - ) - - if "extra" in head: - extra = head_new.pop("extra") - process_extra_field( - extra, head_new, head_deleted_dict, head_append_dict, neck_new - ) - - if "has_final_layer" in head: - has_final_layer = head_new.pop("has_final_layer") - process_has_final_layer( - has_final_layer, head_new, head_deleted_dict, head_append_dict - ) - - display_modifications(head_deleted_dict, head_append_dict, neck_new) - - neck_new = neck_new if len(neck_new) else None - return neck_new, head_new - - -@master_only -def display_modifications( - head_deleted_dict: Dict, head_append_dict: Dict, neck: Dict -) -> None: - """Display the modifications made to the head and neck configurations. - - Args: - head_deleted_dict (Dict): Dictionary of deleted fields in the head. - head_append_dict (Dict): Dictionary of appended fields in the head. - neck (Dict): Updated neck configuration. - """ - if len(head_deleted_dict) + len(head_append_dict) == 0: - return - - old_model_info, new_model_info = build_model_info( - head_deleted_dict, head_append_dict, neck - ) - - total_info = ( - "\nThe config you are using is outdated. " - "The following section of the config:\n```\n" - ) - total_info += old_model_info - total_info += "```\nshould be updated to\n```\n" - total_info += new_model_info - total_info += ( - "```\nFor more information, please refer to " - "https://mmpose.readthedocs.io/en/latest/" - "guide_to_framework.html#step3-model" - ) - - logger: MMLogger = MMLogger.get_current_instance() - logger.warning(total_info) - - -def build_model_info( - head_deleted_dict: Dict, head_append_dict: Dict, neck: Dict -) -> Tuple[str, str]: - """Build the old and new model information strings. - Args: - head_deleted_dict (Dict): Dictionary of deleted fields in the head. - head_append_dict (Dict): Dictionary of appended fields in the head. - neck (Dict): Updated neck configuration. - - Returns: - Tuple[str, str]: Old and new model information strings. - """ - old_head_info = build_head_info(head_deleted_dict) - new_head_info = build_head_info(head_append_dict) - neck_info = build_neck_info(neck) - - old_model_info = "model=dict(\n" + " " * 4 + "...,\n" + old_head_info - new_model_info = "model=dict(\n" + " " * 4 + "...,\n" + neck_info + new_head_info - - return old_model_info, new_model_info - - -def build_head_info(head_dict: Dict) -> str: - """Build the head information string. - - Args: - head_dict (Dict): Dictionary of fields in the head configuration. - Returns: - str: Head information string. - """ - head_info = " " * 4 + "head=dict(\n" - for key, value in head_dict.items(): - head_info += " " * 8 + f"{key}={value},\n" - head_info += " " * 8 + "...),\n" - return head_info - - -def build_neck_info(neck: Dict) -> str: - """Build the neck information string. - Args: - neck (Dict): Updated neck configuration. - - Returns: - str: Neck information string. - """ - if len(neck) > 0: - neck = neck.copy() - neck_info = ( - " " * 4 + "neck=dict(\n" + " " * 8 + f'type=\'{neck.pop("type")}\',\n' - ) - for key, value in neck.items(): - neck_info += " " * 8 + f"{key}={str(value)},\n" - neck_info += " " * 4 + "),\n" - else: - neck_info = "" - return neck_info diff --git a/video/fake-stormer/model_code/models/utils/utils.py b/video/fake-stormer/model_code/models/utils/utils.py deleted file mode 100644 index 469f8e4c3403cccd8de8699eb4116cccbd13274a..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/models/utils/utils.py +++ /dev/null @@ -1,658 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, division, print_function - -import copy -import io -import os -import os.path as osp -import pkgutil -import re -import warnings -from collections import OrderedDict -from importlib import import_module -from tempfile import TemporaryDirectory - -import mmcv -import torch -import torch.nn as nn -import torchvision -from mmcv.parallel import is_module_wrapper -from mmengine.dist import get_dist_info -from mmengine.fileio import FileClient -from mmengine.fileio import load as load_file -from mmengine.utils import mkdir_or_exist -from ptflops import get_model_complexity_info -from torch.utils import model_zoo - -ENV_MMCV_HOME = "MMCV_HOME" -ENV_XDG_CACHE_HOME = "XDG_CACHE_HOME" -DEFAULT_CACHE_DIR = "~/.cache" - - -layers_position = { - "PoseResNet_50": 158, - "PoseResNet_101": 311, - "PoseEfficientNet_B4": 415, -} - - -def m_flops(model, cfg): - if cfg.DATASET.DATA_TYPE != "video": - macs, params = get_model_complexity_info( - model, - (3, cfg.DATASET.IMAGE_SIZE[0], cfg.DATASET.IMAGE_SIZE[0]), - as_strings=True, - verbose=True, - ) - else: - macs, params = get_model_complexity_info( - model, - ( - 3, - cfg.DATASET.DATA.SAMPLES_PER_VIDEO.TRAIN, - cfg.DATASET.IMAGE_SIZE[0], - cfg.DATASET.IMAGE_SIZE[0], - ), - as_strings=True, - verbose=True, - ) - print("{:<30} {:<8}".format("Computational complexity: ", macs)) - print("{:<30} {:<8}".format("Number of parameters: ", params)) - - -def n_param_model(model): - print("Number of parameters", sum(p.numel() for p in model.parameters())) - print( - "Number of trainable parameters", - sum(p.numel() for p in model.parameters() if p.requires_grad), - ) - - -def preset_model(cfg, model, optimizer=None, scaler=None): - # Loading models from config, make sure the pretrained path correct to the model name - start_epoch = 0 - if "pretrained" in cfg.TRAIN and os.path.isfile(cfg.TRAIN.pretrained): - model, optimizer, start_epoch, scaler = load_model( - model, - cfg.TRAIN.pretrained, - optimizer=optimizer, - scaler=scaler, - resume=cfg.TRAIN.resume, - lr=cfg.TRAIN.lr, - lr_step=cfg.TRAIN.lr_scheduler.milestones, - gamma=cfg.TRAIN.lr_scheduler.gamma, - ) - else: - model.init_weights(**cfg.MODEL.INIT_WEIGHTS) - print("Loading model successfully -- {}".format(cfg.MODEL.type)) - - # Showing model FLOPS - m_flops(model, cfg) - - # Freeze backbone if begin_epoch < warm up - if cfg.TRAIN.freeze_backbone and start_epoch < cfg.TRAIN.warm_up: - freeze_backbone(cfg.MODEL, model) - - n_param_model(model) - return model, optimizer, start_epoch, scaler - - -def load_pretrained(model, weight_path): - """ - This function only care about state dict of model - For other modules such as optimizer, resume learning, please refer @load_model - """ - state_dict = torch.load(weight_path, map_location=torch.device("cpu"))["state_dict"] - model.load_state_dict(state_dict, strict=True) - return model - - -def freeze_backbone(cfg, model): - """ - This func to freeze some specific layers to warm up the models - """ - if hasattr(model, "backbone"): - backbone = model.backbone - for param in backbone.parameters(): - param.requires_grad = False - else: - for i, (n, p) in enumerate(model.named_parameters()): - if i <= layers_position[f"{cfg.type}_{cfg.num_layers}"]: - p.requires_grad = False - - -def unfreeze_backbone(model): - """ - This func to unfreeze all model layers - """ - for param in model.parameters(): - if not param.requires_grad: - param.requires_grad = True - - -def load_model( - model, - model_path, - optimizer=None, - scaler=None, - resume=False, - lr=None, - lr_step=None, - gamma=None, -): - start_epoch = 0 - checkpoint = torch.load(model_path, map_location=lambda storage, loc: storage) - print("loaded {}, epoch {}".format(model_path, checkpoint["epoch"])) - state_dict_ = checkpoint["state_dict"] - state_dict = {} - - # convert data_parallal to model - for k in state_dict_: - if k.startswith("module") and not k.startswith("module_list"): - state_dict[k[7:]] = state_dict_[k] - else: - state_dict[k] = state_dict_[k] - model_state_dict = model.state_dict() - - # check loaded parameters and created model parameters - msg = ( - "If you see this, your model does not fully load the " - + "pre-trained weight. Please make sure " - + "you have correctly specified --arch xxx " - + "or set the correct --num_classes for your own dataset." - ) - for k in state_dict: - if k in model_state_dict: - if state_dict[k].shape != model_state_dict[k].shape: - print( - "Skip loading parameter {}, required shape{}, " - "loaded shape{}. {}".format( - k, model_state_dict[k].shape, state_dict[k].shape, msg - ) - ) - state_dict[k] = model_state_dict[k] - else: - print("Drop parameter {}.".format(k) + msg) - for k in model_state_dict: - if not (k in state_dict): - print("No param {}.".format(k) + msg) - state_dict[k] = model_state_dict[k] - model.load_state_dict(state_dict, strict=False) - - # resume optimizer parameters - if optimizer is not None and resume: - if "optimizer" in checkpoint: - optimizer.load_state_dict(checkpoint["optimizer"]) - if "scaler" in checkpoint: - scaler.load_state_dict(checkpoint["scaler"]) - - start_epoch = checkpoint["epoch"] + 1 - start_lr = lr - for step in lr_step: - if start_epoch >= step: - start_lr *= gamma - for param_group in optimizer.param_groups: - param_group["lr"] = start_lr - print("Resumed optimizer with start lr", start_lr) - else: - print("No optimizer parameters in checkpoint.") - - return model, optimizer, start_epoch, scaler - - -def save_model(path, epoch, model, optimizer=None, scaler=None): - if isinstance(model, torch.nn.DataParallel): - state_dict = model.module.state_dict() - else: - state_dict = model.state_dict() - data = {"epoch": epoch, "state_dict": state_dict} - - if not (optimizer is None): - data["optimizer"] = optimizer.state_dict() - - if not (scaler is None): - data["scaler"] = scaler.state_dict() - - torch.save(data, path) - - -def _get_mmcv_home(): - mmcv_home = os.path.expanduser( - os.getenv( - ENV_MMCV_HOME, - os.path.join(os.getenv(ENV_XDG_CACHE_HOME, DEFAULT_CACHE_DIR), "mmcv"), - ) - ) - - mkdir_or_exist(mmcv_home) - return mmcv_home - - -def load_url_dist(url, model_dir=None, map_location="cpu"): - """In distributed setting, this function only download checkpoint at local - rank 0.""" - rank, world_size = get_dist_info() - rank = int(os.environ.get("LOCAL_RANK", rank)) - if rank == 0: - checkpoint = model_zoo.load_url( - url, model_dir=model_dir, map_location=map_location - ) - if world_size > 1: - torch.distributed.barrier() - if rank > 0: - checkpoint = model_zoo.load_url( - url, model_dir=model_dir, map_location=map_location - ) - return checkpoint - - -def get_torchvision_models(): - model_urls = dict() - for _, name, ispkg in pkgutil.walk_packages(torchvision.models.__path__): - if ispkg: - continue - _zoo = import_module(f"torchvision.models.{name}") - if hasattr(_zoo, "model_urls"): - _urls = getattr(_zoo, "model_urls") - model_urls.update(_urls) - return model_urls - - -def get_external_models(): - mmcv_home = _get_mmcv_home() - default_json_path = osp.join(mmcv.__path__[0], "model_zoo/open_mmlab.json") - default_urls = load_file(default_json_path) - assert isinstance(default_urls, dict) - external_json_path = osp.join(mmcv_home, "open_mmlab.json") - if osp.exists(external_json_path): - external_urls = load_file(external_json_path) - assert isinstance(external_urls, dict) - default_urls.update(external_urls) - - return default_urls - - -def get_deprecated_model_names(): - deprecate_json_path = osp.join(mmcv.__path__[0], "model_zoo/deprecated.json") - deprecate_urls = load_file(deprecate_json_path) - assert isinstance(deprecate_urls, dict) - - return deprecate_urls - - -def get_mmcls_models(): - mmcls_json_path = osp.join(mmcv.__path__[0], "model_zoo/mmcls.json") - mmcls_urls = load_file(mmcls_json_path) - - return mmcls_urls - - -def _process_mmcls_checkpoint(checkpoint): - state_dict = checkpoint["state_dict"] - new_state_dict = OrderedDict() - for k, v in state_dict.items(): - if k.startswith("backbone."): - new_state_dict[k[9:]] = v - new_checkpoint = dict(state_dict=new_state_dict) - - return new_checkpoint - - -def load_pavimodel_dist(model_path, map_location=None): - """In distributed setting, this function only download checkpoint at local - rank 0.""" - try: - from pavi import modelcloud - except ImportError: - raise ImportError("Please install pavi to load checkpoint from modelcloud.") - rank, world_size = get_dist_info() - rank = int(os.environ.get("LOCAL_RANK", rank)) - if rank == 0: - model = modelcloud.get(model_path) - with TemporaryDirectory() as tmp_dir: - downloaded_file = osp.join(tmp_dir, model.name) - model.download(downloaded_file) - checkpoint = torch.load(downloaded_file, map_location=map_location) - if world_size > 1: - torch.distributed.barrier() - if rank > 0: - model = modelcloud.get(model_path) - with TemporaryDirectory() as tmp_dir: - downloaded_file = osp.join(tmp_dir, model.name) - model.download(downloaded_file) - checkpoint = torch.load(downloaded_file, map_location=map_location) - return checkpoint - - -def load_fileclient_dist(filename, backend, map_location): - """In distributed setting, this function only download checkpoint at local - rank 0.""" - rank, world_size = get_dist_info() - rank = int(os.environ.get("LOCAL_RANK", rank)) - allowed_backends = ["ceph"] - if backend not in allowed_backends: - raise ValueError(f"Load from Backend {backend} is not supported.") - if rank == 0: - fileclient = FileClient(backend=backend) - buffer = io.BytesIO(fileclient.get(filename)) - checkpoint = torch.load(buffer, map_location=map_location) - if world_size > 1: - torch.distributed.barrier() - if rank > 0: - fileclient = FileClient(backend=backend) - buffer = io.BytesIO(fileclient.get(filename)) - checkpoint = torch.load(buffer, map_location=map_location) - return checkpoint - - -def load_state_dict(module, state_dict, strict=False, logger=None): - """Load state_dict to a module. - - This method is modified from :meth:`torch.nn.Module.load_state_dict`. - Default value for ``strict`` is set to ``False`` and the message for - param mismatch will be shown even if strict is False. - - Args: - module (Module): Module that receives the state_dict. - state_dict (OrderedDict): Weights. - strict (bool): whether to strictly enforce that the keys - in :attr:`state_dict` match the keys returned by this module's - :meth:`~torch.nn.Module.state_dict` function. Default: ``False``. - logger (:obj:`logging.Logger`, optional): Logger to log the error - message. If not specified, print function will be used. - """ - unexpected_keys = [] - all_missing_keys = [] - err_msg = [] - - metadata = getattr(state_dict, "_metadata", None) - state_dict = state_dict.copy() - if metadata is not None: - state_dict._metadata = metadata - - # use _load_from_state_dict to enable checkpoint version control - def load(module, prefix=""): - # recursively check parallel module in case that the model has a - # complicated structure, e.g., nn.Module(nn.Module(DDP)) - if is_module_wrapper(module): - module = module.module - local_metadata = {} if metadata is None else metadata.get(prefix[:-1], {}) - module._load_from_state_dict( - state_dict, - prefix, - local_metadata, - True, - all_missing_keys, - unexpected_keys, - err_msg, - ) - for name, child in module._modules.items(): - if child is not None: - load(child, prefix + name + ".") - - load(module) - load = None # break load->load reference cycle - - # ignore "num_batches_tracked" of BN layers - missing_keys = [key for key in all_missing_keys if "num_batches_tracked" not in key] - - if unexpected_keys: - err_msg.append( - "unexpected key in source " f'state_dict: {", ".join(unexpected_keys)}\n' - ) - if missing_keys: - err_msg.append( - f'missing keys in source state_dict: {", ".join(missing_keys)}\n' - ) - - rank, _ = get_dist_info() - if len(err_msg) > 0 and rank == 0: - err_msg.insert(0, "The model and loaded state dict do not match exactly\n") - err_msg = "\n".join(err_msg) - if strict: - raise RuntimeError(err_msg) - elif logger is not None: - logger.warning(err_msg) - else: - print(err_msg) - - -def _load_checkpoint(filename, map_location=None): - """Load checkpoint from somewhere (modelzoo, file, url). - - Args: - filename (str): Accept local filepath, URL, ``torchvision://xxx``, - ``open-mmlab://xxx``. Please refer to ``docs/model_zoo.md`` for - details. - map_location (str | None): Same as :func:`torch.load`. Default: None. - - Returns: - dict | OrderedDict: The loaded checkpoint. It can be either an - OrderedDict storing model weights or a dict containing other - information, which depends on the checkpoint. - """ - if filename.startswith("modelzoo://"): - warnings.warn( - 'The URL scheme of "modelzoo://" is deprecated, please ' - 'use "torchvision://" instead' - ) - model_urls = get_torchvision_models() - model_name = filename[11:] - checkpoint = load_url_dist(model_urls[model_name]) - elif filename.startswith("torchvision://"): - model_urls = get_torchvision_models() - model_name = filename[14:] - checkpoint = load_url_dist(model_urls[model_name]) - elif filename.startswith("open-mmlab://"): - model_urls = get_external_models() - model_name = filename[13:] - deprecated_urls = get_deprecated_model_names() - if model_name in deprecated_urls: - warnings.warn( - f"open-mmlab://{model_name} is deprecated in favor " - f"of open-mmlab://{deprecated_urls[model_name]}" - ) - model_name = deprecated_urls[model_name] - model_url = model_urls[model_name] - # check if is url - if model_url.startswith(("http://", "https://")): - checkpoint = load_url_dist(model_url) - else: - filename = osp.join(_get_mmcv_home(), model_url) - if not osp.isfile(filename): - raise IOError(f"{filename} is not a checkpoint file") - checkpoint = torch.load(filename, map_location=map_location) - elif filename.startswith("mmcls://"): - model_urls = get_mmcls_models() - model_name = filename[8:] - checkpoint = load_url_dist(model_urls[model_name]) - checkpoint = _process_mmcls_checkpoint(checkpoint) - elif filename.startswith(("http://", "https://")): - checkpoint = load_url_dist(filename) - elif filename.startswith("pavi://"): - model_path = filename[7:] - checkpoint = load_pavimodel_dist(model_path, map_location=map_location) - elif filename.startswith("s3://"): - checkpoint = load_fileclient_dist( - filename, backend="ceph", map_location=map_location - ) - else: - if not osp.isfile(filename): - raise IOError(f"{filename} is not a checkpoint file") - checkpoint = torch.load(filename, map_location=map_location) - return checkpoint - - -def load_checkpoint( - model, - filename, - map_location="cpu", - strict=False, - logger=None, - patch_padding="pad", - part_features=None, -): - """Load checkpoint from a file or URI. - - Args: - model (Module): Module to load checkpoint. - filename (str): Accept local filepath, URL, ``torchvision://xxx``, - ``open-mmlab://xxx``. Please refer to ``docs/model_zoo.md`` for - details. - map_location (str): Same as :func:`torch.load`. - strict (bool): Whether to allow different params for the model and - checkpoint. - logger (:mod:`logging.Logger` or None): The logger for error message. - patch_padding (str): 'pad' or 'bilinear' or 'bicubic', used for interpolate patch embed from 14x14 to 16x16 - - Returns: - dict or OrderedDict: The loaded checkpoint. - """ - checkpoint = _load_checkpoint(filename, map_location) - # OrderedDict is a subclass of dict - if not isinstance(checkpoint, dict): - raise RuntimeError(f"No state_dict found in checkpoint file {filename}") - # get state_dict from checkpoint - if "state_dict" in checkpoint: - state_dict = checkpoint["state_dict"] - elif "model" in checkpoint: - state_dict = checkpoint["model"] - elif "module" in checkpoint: - state_dict = checkpoint["module"] - else: - state_dict = checkpoint - # strip prefix of state_dict - if list(state_dict.keys())[0].startswith("module."): - state_dict = {k[7:]: v for k, v in state_dict.items()} - - # for MoBY, load model of online branch - if sorted(list(state_dict.keys()))[0].startswith("encoder"): - state_dict = { - k.replace("encoder.", ""): v - for k, v in state_dict.items() - if k.startswith("encoder.") - } - - rank, _ = get_dist_info() - - layer_names = [name for name, param in model.named_parameters()] - - if ( - "patch_embed.proj.weight" in state_dict - and "patch_embed.proj._conv_stem.weight" not in layer_names - ): - proj_weight = state_dict["patch_embed.proj.weight"] - orig_size = proj_weight.shape[2:] - current_size = model.patch_embed.proj.weight.shape[2:] - padding_size = current_size[0] - orig_size[0] - padding_l = padding_size // 2 - padding_r = padding_size - padding_l - if orig_size != current_size: - if "pad" in patch_padding: - proj_weight = torch.nn.functional.pad( - proj_weight, (padding_l, padding_r, padding_l, padding_r) - ) - elif "bilinear" in patch_padding: - proj_weight = torch.nn.functional.interpolate( - proj_weight, size=current_size, mode="bilinear", align_corners=False - ) - elif "bicubic" in patch_padding: - proj_weight = torch.nn.functional.interpolate( - proj_weight, size=current_size, mode="bicubic", align_corners=False - ) - state_dict["patch_embed.proj.weight"] = proj_weight - - if "pos_embed" in state_dict: - pos_embed_checkpoint = state_dict["pos_embed"] - # pos_embed_checkpoint = pos_embed_checkpoint[:, :-1, :] - embedding_size = pos_embed_checkpoint.shape[-1] - H, W = model.patch_embed.patch_shape - num_patches = model.patch_embed.num_patches - num_extra_tokens = model.pos_embed.shape[-2] - num_patches - # height (== width) for the checkpoint position embedding - orig_size = int((pos_embed_checkpoint.shape[-2] - num_extra_tokens) ** 0.5) - if rank == 0: - print( - "Position interpolate from %dx%d to %dx%d" - % (orig_size, orig_size, H, W) - ) - extra_tokens = pos_embed_checkpoint[:, :num_extra_tokens] - # only the position tokens are interpolated - pos_tokens = pos_embed_checkpoint[:, num_extra_tokens:] - pos_tokens = pos_tokens.reshape( - -1, orig_size, orig_size, embedding_size - ).permute(0, 3, 1, 2) - pos_tokens = torch.nn.functional.interpolate( - pos_tokens, size=(H, W), mode="bicubic", align_corners=False - ) - pos_tokens = pos_tokens.permute(0, 2, 3, 1).flatten(1, 2) - new_pos_embed = torch.cat((extra_tokens, pos_tokens), dim=1) - state_dict["pos_embed"] = new_pos_embed - - new_state_dict = copy.deepcopy(state_dict) - if part_features is not None: - current_keys = list(model.state_dict().keys()) - for key in current_keys: - if "mlp.experts" in key: - source_key = re.sub(r"experts.\d+.", "fc2.", key) - new_state_dict[key] = state_dict[source_key][-part_features:] - elif "fc2" in key: - new_state_dict[key] = state_dict[key][:-part_features] - - # load state_dict - load_state_dict(model, new_state_dict, strict, logger) - return checkpoint - - -def swin_converter(ckpt): - - new_ckpt = OrderedDict() - - def correct_unfold_reduction_order(x): - out_channel, in_channel = x.shape - x = x.reshape(out_channel, 4, in_channel // 4) - x = x[:, [0, 2, 1, 3], :].transpose(1, 2).reshape(out_channel, in_channel) - return x - - def correct_unfold_norm_order(x): - in_channel = x.shape[0] - x = x.reshape(4, in_channel // 4) - x = x[[0, 2, 1, 3], :].transpose(0, 1).reshape(in_channel) - return x - - for k, v in ckpt.items(): - if k.startswith("head"): - continue - elif k.startswith("layers"): - new_v = v - if "attn." in k: - new_k = k.replace("attn.", "attn.w_msa.") - elif "mlp." in k: - if "mlp.fc1." in k: - new_k = k.replace("mlp.fc1.", "ffn.layers.0.0.") - elif "mlp.fc2." in k: - new_k = k.replace("mlp.fc2.", "ffn.layers.1.") - else: - new_k = k.replace("mlp.", "ffn.") - elif "downsample" in k: - new_k = k - if "reduction." in k: - new_v = correct_unfold_reduction_order(v) - elif "norm." in k: - new_v = correct_unfold_norm_order(v) - else: - new_k = k - new_k = new_k.replace("layers", "stages", 1) - elif k.startswith("patch_embed"): - new_v = v - if "proj" in k: - new_k = k.replace("proj", "projection") - else: - new_k = k - else: - new_v = v - new_k = k - - new_ckpt["backbone." + new_k] = new_v - - return new_ckpt diff --git a/video/fake-stormer/model_code/package_utils/__init__.py b/video/fake-stormer/model_code/package_utils/__init__.py deleted file mode 100644 index 40a96afc6ff09d58a702b76e3f7dd412fe975e26..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/package_utils/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/video/fake-stormer/model_code/package_utils/_typing.py b/video/fake-stormer/model_code/package_utils/_typing.py deleted file mode 100644 index 37b26c25145f281bc23b6f98915deb58f886ffb1..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/package_utils/_typing.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -from typing import Dict, List, Optional, Tuple, Union - -from mmengine.config import ConfigDict -from mmengine.structures import InstanceData, PixelData -from torch import Tensor - -# Type hint of config data -ConfigType = Union[ConfigDict, dict] -OptConfigType = Optional[ConfigType] - -# Type hint of one or more config data -MultiConfig = Union[ConfigType, List[ConfigType]] -OptMultiConfig = Optional[MultiConfig] - -# Type hint of data samples -InstanceList = List[InstanceData] -PixelDataList = List[PixelData] -Predictions = Union[InstanceList, Tuple[InstanceList, PixelDataList]] - -# Type hint of features -Features = Union[Tuple[Tensor], List[Tuple[Tensor]], List[List[Tuple[Tensor]]]] diff --git a/video/fake-stormer/model_code/package_utils/bi_online_generation.py b/video/fake-stormer/model_code/package_utils/bi_online_generation.py deleted file mode 100644 index dfd4a95891008f049b77eced6edb96a21e710728..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/package_utils/bi_online_generation.py +++ /dev/null @@ -1,551 +0,0 @@ -# -*- coding: utf-8 -*- -import os -import random -import sys - -if os.getcwd() not in sys.path: - sys.path.insert(0, os.getcwd()) - -import argparse -import multiprocessing as mp -import queue -import time -from threading import Thread - -import cv2 -import numpy as np -from imgaug import augmenters as iaa -from matplotlib import pyplot as plt -from package_utils.deepfake_mask import random_get_hull -from package_utils.utils import load_file, save_file -from PIL import Image -from skimage import io -from skimage import transform as sktransform -from tqdm import tqdm - -# from datasets.sbi.utils import gen_target - -IMAGE_H, IMAGE_W, IMAGE_CHANNEL = 256, 256, 3 -COMPRESSION = "c0" -SPLIT = "train" -DATA_TYPE = "frames" -IMAGE_ROOT = f"/data/deepfake_cluster/datasets_df/FaceForensics++/{COMPRESSION}/" -ANNO_FILE = "processed_data/train_faceforensics_processed.json" -DEST_DIR = "FaceXRay" -LABEL_FILE = "train_FF_FaceXRay.json" -NUMBER_OF_PROCESS = 4 -BLENDING_TYPE = "BI" -MARGIN = 20 - - -def args_parse(args=None): - args_parser = argparse.ArgumentParser("Blending Image Processing Hub...") - args_parser.add_argument("--task", "-t", help="Defining task!") - args_parser.add_argument("--anno_file", "-f", help="Pre annotation file!") - args_parser.add_argument("--fake_type", "-ft", help="Faketype to manipulation!") - args_parser.add_argument( - "--mp", "-m", help="Apply multiprocessing", action="store_true" - ) - args = args_parser.parse_args(args) - return args - - -def name_resolve(path): - if COMPRESSION == "c23": - name = os.path.splitext(os.path.basename(path))[0] - vid_id, frame_id = name.split("_")[0:2] - else: - name = path.split("/") - vid_id, frame_id = name[-2], os.path.splitext(name[-1])[0] - return vid_id, frame_id - - -def gen_real_fimg_mask(img_path): - face_img = io.imread(img_path) - mask = np.zeros((face_img.shape[0], face_img.shape[1], 3)) - mask = (mask * 255).astype(np.uint8) - return face_img, mask - - -def total_euclidean_distance(a, b): - assert len(a.shape) == 2 - return np.sum(np.linalg.norm(a - b, axis=1)) - - -def random_erode_dilate(mask, **kwargs): - ksize = kwargs.get("ksize") - rand_erode = kwargs.get("rand_erode") or random.random() - - if rand_erode > 0.5: - if ksize is None: - ksize = random.randint(1, 21) - if ksize % 2 == 0: - ksize += 1 - mask = np.array(mask).astype(np.uint8) * 255 - kernel = np.ones((ksize, ksize), np.uint8) - mask = cv2.erode(mask, kernel, 1) / 255 - else: - if ksize is None: - ksize = random.randint(1, 5) - if ksize % 2 == 0: - ksize += 1 - mask = np.array(mask).astype(np.uint8) * 255 - kernel = np.ones((ksize, ksize), np.uint8) - mask = cv2.dilate(mask, kernel, 1) / 255 - return mask, ksize, rand_erode - - -# borrow from https://github.com/MarekKowalski/FaceSwap -def blendImages(src, dst, mask, featherAmount=0.2, **kwargs): - if kwargs.get("blend_ratio") is None: - blend_list = [0.25, 0.5, 0.75, 1, 1, 1] - blend_ratio = blend_list[np.random.randint(len(blend_list))] - else: - blend_ratio = kwargs.get("blend_ratio") - - # mask = blend_ratio * mask # Applying a blending ratio from SBI to BI blending weights - maskIndices = np.where(mask != 0) - - src_mask = np.ones_like(mask) - dst_mask = np.zeros_like(mask) - - maskPts = np.hstack((maskIndices[1][:, np.newaxis], maskIndices[0][:, np.newaxis])) - faceSize = np.max(maskPts, axis=0) - np.min(maskPts, axis=0) - featherAmount = featherAmount * np.max(faceSize) - - hull = cv2.convexHull(maskPts) - dists = np.zeros(maskPts.shape[0]) - - for i in range(maskPts.shape[0]): - dists[i] = cv2.pointPolygonTest(hull, (maskPts[i, 0], maskPts[i, 1]), True) - - weights = np.clip(dists / featherAmount, 0, 1) - - composedImg = np.copy(dst) - composedImg[maskIndices[0], maskIndices[1]] = ( - weights[:, np.newaxis] * src[maskIndices[0], maskIndices[1]] - + (1 - weights[:, np.newaxis]) * dst[maskIndices[0], maskIndices[1]] - ) - - composedMask = np.copy(dst_mask) - composedMask[maskIndices[0], maskIndices[1]] = ( - weights[:, np.newaxis] * src_mask[maskIndices[0], maskIndices[1]] - + (1 - weights[:, np.newaxis]) * dst_mask[maskIndices[0], maskIndices[1]] - ) - - blend_params = {"blend_ratio": blend_ratio} - - return composedImg, composedMask, blend_params - - -# borrow from https://github.com/MarekKowalski/FaceSwap -def colorTransfer(src, dst, mask): - transferredDst = np.copy(dst) - - maskIndices = np.where(mask != 0) - - maskedSrc = src[maskIndices[0], maskIndices[1]].astype(np.int32) - maskedDst = dst[maskIndices[0], maskIndices[1]].astype(np.int32) - - meanSrc = np.mean(maskedSrc, axis=0) - meanDst = np.mean(maskedDst, axis=0) - - maskedDst = maskedDst - meanDst - maskedDst = maskedDst + meanSrc - maskedDst = np.clip(maskedDst, 0, 255) - - transferredDst[maskIndices[0], maskIndices[1]] = maskedDst - - return transferredDst - - -class BIOnlineGeneration: - def __init__( - self, data_record, queue_size=1024, mlprocess=False, number=1, fake_type=None - ): - self.landmarks_record = {} - self.data_record = data_record["data"] - self.mlprocess = mlprocess - self.number = number - self.fake_type = fake_type - - if self.fake_type is not None: - self.data_record = self._filter_data() - if not len(self.data_record): - raise ValueError("DataList can not be Empty!") - - print( - f"You are generating data for --- {self.fake_type} --- {len(self.data_record)} images" - ) - - for item in self.data_record: - if "aligned_lms" in item.keys() and len(item["aligned_lms"]): - self.landmarks_record[item["image_path"]] = np.array( - item["aligned_lms"] - ) - else: - self.landmarks_record[item["image_path"]] = np.array(item["orig_lms"]) - - # extract all frame from all video in the name of {videoid}_{frameid} - self.data_list = [item["image_path"] for item in self.data_record] - self.file_names = [item["file_name"] for item in self.data_record] - - if COMPRESSION != "c23": - self.labels = [ - item["image_path"].split("/")[-3] for item in self.data_record - ] - else: - self.labels = [ - item["image_path"].split("/")[-2] for item in self.data_record - ] - self.vid_ids = [item["image_path"].split("/")[-2] for item in self.data_record] - - # predefine mask distortion - self.distortion = iaa.Sequential([iaa.PiecewiseAffine(scale=(0.01, 0.15))]) - - self.result_queue = mp.Queue(maxsize=queue_size) - self.final_results = [] - - def register_task(self, target): - if self.mlprocess: - p = mp.Process(target=target, args=()) - else: - p = Thread(target=target, args=()) - return p - - def start(self, p): - self.result_worker = p - self.result_worker.start() - - def wait_n_put(self, item): - self.result_queue.put(item) - - def wait_n_get(self): - return self.result_queue.get() - - def count(self): - return self.result_queue.qsize() - - def stop(self): - self.result_worker.join() - - def running(self): - return not self.result_queue.empty() - - def terminate(self): - self.result_worker.terminate() - - def clear(self): - while not self.result_queue.empty(): - self.result_queue.get() - - def clear_sequences(self): - self.clear() - - def get_results(self): - all_objs = [] - - while not self.final_results.empty(): - all_objs.append(self.final_results.get()) - return all_objs - - def _filter_data(self): - assert self.fake_type is not None, "Fake type is require to filter data!" - assert self.fake_type in [ - "Deepfakes", - "Face2Face", - "FaceSwap", - "NeuralTextures", - ] - - self.data_record = [ - item for item in self.data_record if item["fake_type"] == self.fake_type - ] - return self.data_record - - def gen_one_datapoint(self, idx): - background_face_path = self.data_list[idx] - label = self.labels[idx] - - # Choose Blending type - if BLENDING_TYPE != "SBI": - data_type = "real" if random.randint(0, 1) else "fake" - else: - data_type = "fake" - - # Handle for the cases of blank landmarks, auto real if real label is real image, otherwise return - if not self.landmarks_record[background_face_path].any(): - if not ("fake" == label): - data_type = "real" - else: - return None, None, None - - if data_type == "fake": - if BLENDING_TYPE != "SBI": - face_img, mask = self.get_blended_face( - background_face_path, self.landmarks_record[background_face_path] - ) - else: - face_img, mask, face_r, mask_r = gen_target( - os.path.join(IMAGE_ROOT, background_face_path), - self.landmarks_record[background_face_path], - margin=[MARGIN, MARGIN], - ) - else: - face_img, mask = gen_real_fimg_mask( - os.path.join(IMAGE_ROOT, background_face_path) - ) - - face_img = face_img[MARGIN : IMAGE_H - MARGIN, MARGIN : IMAGE_W - MARGIN, :] - mask = mask[MARGIN : IMAGE_H - MARGIN, MARGIN : IMAGE_W - MARGIN, :] - - return face_img, mask, data_type - - def get_blended_face(self, background_face_path, background_landmark): - background_face = io.imread(os.path.join(IMAGE_ROOT, background_face_path)) - - foreground_face_path = self.search_similar_face( - background_landmark, background_face_path, get_best=True - ) - foreground_face = io.imread(os.path.join(IMAGE_ROOT, foreground_face_path)) - - # down sample before blending - img_h, img_w = background_face.shape[:2] - aug_size = random.randint(img_h // 2, img_h) - background_landmark = background_landmark * (aug_size / img_h) - - foreground_face = sktransform.resize( - foreground_face, (aug_size, aug_size), preserve_range=True - ).astype(np.uint8) - background_face = sktransform.resize( - background_face, (aug_size, aug_size), preserve_range=True - ).astype(np.uint8) - - # get random type of initial blending mask - mask = random_get_hull(background_landmark, background_face) - - # random deform mask - mask = self.distortion.augment_image(mask) - mask = random_erode_dilate(mask) - - # filte empty mask after deformation - if np.sum(mask) == 0: - print( - f"There was an issue when doing blending with Image -- {background_face_path}" - ) - print(f"Reverting by returning a real image and mask...") - face_img, mask = gen_real_fimg_mask( - os.path.join(IMAGE_ROOT, background_face_path) - ) - return face_img, mask - - # apply color transfer - foreground_face = colorTransfer(background_face, foreground_face, mask * 255) - - # blend two face - blended_face, mask = blendImages(foreground_face, background_face, mask * 255) - blended_face = blended_face.astype(np.uint8) - - # resize back to default resolution - blended_face = sktransform.resize( - blended_face, (img_h, img_w), preserve_range=True - ).astype(np.uint8) - mask = sktransform.resize(mask, (img_h, img_w), preserve_range=True) - mask = mask[:, :, 0:1] - mask = (1 - mask) * mask * 4 - mask = np.repeat(mask, 3, 2) - mask = (mask * 255).astype(np.uint8) - - # randomly downsample after BI pipeline - face_img = Image.fromarray(blended_face) - if random.randint(0, 1): - aug_size = random.randint(img_h // 4, img_h) - if random.randint(0, 1): - face_img = face_img.resize((aug_size, aug_size), Image.BILINEAR) - else: - face_img = face_img.resize((aug_size, aug_size), Image.NEAREST) - face_img = face_img.resize((img_h, img_w), Image.BILINEAR) - face_img = np.array(face_img) - - # # random jpeg compression after BI pipeline - # if random.randint(0,1): - # quality = random.randint(60, 100) - # encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), quality] - # face_img_encode = cv2.imencode('.jpg', face_img, encode_param)[1] - # face_img = cv2.imdecode(face_img_encode, cv2.IMREAD_COLOR) - - # # random flip - # if random.randint(0,1): - # face_img = np.flip(face_img,1) - # mask = np.flip(mask,1) - - return face_img, mask - - def search_similar_face(self, this_landmark, background_face_path, get_best=False): - vid_id, frame_id = name_resolve(background_face_path) - min_dist = 99999999 - - # random sample 5000 frame from all frams: - all_candidate_path = random.sample(self.data_list, k=10000) - - # filter all frame that comes from the same video as background face - all_candidate_path = filter( - lambda k: name_resolve(k)[0] != vid_id, all_candidate_path - ) - all_candidate_path = list(all_candidate_path) - candidate_distance_list = {} - - # loop throungh all candidates frame to get best match - for candidate_path in all_candidate_path: - candidate_landmark = self.landmarks_record[candidate_path].astype( - np.float32 - ) - - if not candidate_landmark.any(): - continue - - candidate_distance = total_euclidean_distance( - candidate_landmark, this_landmark - ) - if candidate_distance < min_dist: - min_dist = candidate_distance - min_path = candidate_path - candidate_distance_list[candidate_path] = candidate_distance - if not get_best: - return candidate_distance_list - else: - return min_path - - def search_similar_faces(self): - while True: - item = self.wait_n_get() - if item is None: - obj_list = self.final_results - data = {"data": obj_list} - save_file( - data, f"processed_data/{COMPRESSION}/dynamic_trainBI_FFv4.json" - ) - return True - bg_path = item["image_path"] - if "aligned_lms" in item.keys() and len(item["aligned_lms"]): - f_lms = np.array(item["aligned_lms"]) - else: - f_lms = np.array(item["orig_lms"]) - best_match_paths = [] - - if f_lms.any(): - candidate_list = self.search_similar_face(f_lms, bg_path) - best_match_paths = sorted( - candidate_list.items(), key=lambda x: x[1], reverse=False - )[: self.number] - best_match_paths = [it[0] for it in best_match_paths] - item["best_match"] = best_match_paths - self.final_results.append(item) - - -if __name__ == "__main__": - if sys.argv[1:] is not None: - args = args_parse(sys.argv[1:]) - else: - args = sys.argv[:-1] - - task = args.task - anno_file = args.anno_file - mp_ = args.mp - fake_type = args.fake_type - assert len(anno_file), "Annotation file path can not be empty!" - assert os.access( - anno_file, os.R_OK - ), "Annotation file path must be valid to access!" - - print("Starting to load processed data...") - start = time.time() - data_record = load_file(anno_file) - print("Loading time --- {}".format(time.time() - start)) - ds = BIOnlineGeneration(data_record, mlprocess=mp_, number=30, fake_type=fake_type) - data = {} - - assert task in ["save_blending", "search_similar_lms"] - if task == "save_blending": - all_object = [] - - for i in tqdm(range(len(ds.data_list))): - img, mask, label = ds.gen_one_datapoint(i) - if img is None and mask is None and label is None: - continue - - if COMPRESSION == "c23": - image_path = os.path.join( - IMAGE_ROOT, DEST_DIR, "images", ds.file_names[i] - ) - mask_path = os.path.join( - IMAGE_ROOT, DEST_DIR, "masks", ds.file_names[i] - ) - else: - image_path = os.path.join( - IMAGE_ROOT, - SPLIT, - DATA_TYPE, - DEST_DIR, - "images", - f"{ds.vid_ids[i]}_{ds.file_names[i]}", - ) - mask_path = os.path.join( - IMAGE_ROOT, - SPLIT, - DATA_TYPE, - DEST_DIR, - "masks", - f"{ds.vid_ids[i]}_{ds.file_names[i]}", - ) - - try: - mask_pil = Image.fromarray(mask) - mask_pil.save(mask_path) - - image = Image.fromarray(img) - image.save(image_path) - except Exception as e: - print(e) - continue - - all_object.append( - { - "id": i, - "image_path": image_path, - "mask_path": mask_path, - "label": label, - } - ) - data["data"] = all_object - save_file( - data, - file_path=os.path.join(IMAGE_ROOT, SPLIT, DATA_TYPE, DEST_DIR, LABEL_FILE), - ) - elif task == "search_similar_lms": - p = ds.register_task(ds.search_similar_faces) - ds.start(p) - - try: - for i, item in enumerate(tqdm(ds.data_record, dynamic_ncols=True)): - ds.wait_n_put(item) - ds.wait_n_put(None) - - while ds.running(): - time.sleep(1) - print( - "===============> Rendering remaining " - + str(ds.count()) - + " images in the queue...", - end="\r", - ) - ds.stop() - except Exception as e: - print(repr(e)) - print("There is an exception during process! Please check it") - except KeyboardInterrupt: - ds.terminate() - ds.clear_sequences() - exit(0) - else: - raise ValueError("This task {} is not supported at the moment!") diff --git a/video/fake-stormer/model_code/package_utils/cam_vis.py b/video/fake-stormer/model_code/package_utils/cam_vis.py deleted file mode 100644 index 52c9b52a1fcd42051c2a0e2bd65883b91e5c853e..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/package_utils/cam_vis.py +++ /dev/null @@ -1,269 +0,0 @@ -# -*-coding: utf-8 -*- -import argparse -import math -import os -import sys -from copy import deepcopy - -if not os.getcwd() in sys.path: - sys.path.append(os.getcwd()) - -from glob import glob - -import matplotlib.pyplot as plt -import numpy as np -import torch -import torch.nn.functional as F -from configs.get_config import load_config -from image_utils import overlay_mask -from logs.logger import Logger -from models import MODELS, build_model -from models.utils import load_pretrained -from natsort import natsorted -from PIL import Image -from torchcam import methods -from torchvision.transforms.functional import resize, to_pil_image -from transform import final_transform - - -def main(): - argparser = argparse.ArgumentParser("Arguments for CAM visualization...") - argparser.add_argument("--cfg", help="Specify config to load", required=True) - argparser.add_argument( - "--target_layer", - "-t", - help="Specify layer names to visualize CAM", - required=False, - ) - argparser.add_argument( - "--method", "-m", type=str, default="GradCAM", help="CAM method to use" - ) - argparser.add_argument( - "--mode", - type=str, - choices=["image", "video"], - default="image", - help="Mode to visualize gradCAM", - ) - argparser.add_argument( - "--image", "-i", help="Specify image to overlay CAM", required=False - ) - argparser.add_argument( - "--video", "-v", help="Specify video to overlay CAM", required=False - ) - argparser.add_argument( - "--savefig", type=str, default=None, help="Path to save figure" - ) - argparser.add_argument( - "--rows", type=int, default=1, help="Number of rows for the layout" - ) - argparser.add_argument( - "--class-idx", type=int, default=0, help="Index of the class to inspect" - ) - argparser.add_argument( - "--alpha", type=float, default=0.5, help="Transparency of the heatmap" - ) - argparser.add_argument("--cuda", action="store_true", help="Running CAM with cuda") - argparser.add_argument( - "--save_inverse", action="store_true", help="Saving the inverse of CAM" - ) - args = argparser.parse_args() - print(args) - - # Loading configs - cfg = load_config(args.cfg) - - # Logger - logger = Logger(task="CAM_vis") - - # Loading model based on the config - model = build_model(cfg.MODEL, MODELS).to(torch.float) - logger.info("Loading weight ... {}".format(cfg.TEST.pretrained)) - model = load_pretrained(model, cfg.TEST.pretrained) - - if args.cuda: - model = model.cuda() - model.eval() - - # Freeze the model - for p in model.parameters(): - p.requires_grad_(False) - - # Loading image - img_list = [] - if args.mode == "image": - assert os.path.exists( - args.image - ), "Image path must be valid, please check the path again!" - img = Image.open(args.image) - H, W = img.size - img = img.crop((0, 0, W - 0, H - 0)) - img_list.append(img) - elif args.mode == "video": - assert os.path.exists( - args.video - ), "Video path must be valid, please check the path again!" - n_frames = cfg.DATASET.DATA.SAMPLES_PER_VIDEO.NUM_FRAMES - assert n_frames is not None, "Number of video frames can not be None!" - # Load first n_frames inside the video - img_paths = glob(f"{args.video}/*.png") - img_paths = natsorted(img_paths) # correct the order of image paths - img_paths = img_paths[:n_frames] - for img_path in img_paths: - img = Image.open(img_path) - H, W = img.size - img = img.crop((0, 0, W - 0, H - 0)) - img_list.append(img) - else: - raise ValueError( - "We only support GradCAM for image or video mode at the moment!" - ) - - # Preprocess image - transform = final_transform(cfg.DATASET) - image_size = (cfg.DATASET.IMAGE_SIZE[0], cfg.DATASET.IMAGE_SIZE[1]) - - # Transform images - transformed_imgs = torch.tensor([]) - for _i in img_list: - img_resize = _i.resize(image_size) - img_resize = np.array(img_resize) / 255 - img_tensor = transform(img_resize).to(torch.float) - if args.cuda: - img_tensor = img_tensor.cuda() - img_tensor.requires_grad_(True) - transformed_imgs = torch.cat((transformed_imgs, img_tensor.unsqueeze(0)), 0) - - # Hook the corresponding layer in the model - if isinstance(args.method, str): - cam_methods = args.method.split(",") - else: - cam_methods = [ - "CAM", - "GradCAM", - "GradCAMpp", - "SmoothGradCAMpp", - "ScoreCAM", - "SSCAM", - "ISCAM", - "XGradCAM", - "LayerCAM", - ] - cam_extractors = [ - methods.__dict__[name]( - model, target_layer=args.target_layer, enable_hooks=False - ) - for name in cam_methods - ] - - if args.mode == "image": - num_rows = args.rows - num_cols = math.ceil((len(cam_extractors)) / num_rows) + 1 - else: - num_cols = n_frames - num_rows = len(cam_extractors) + 1 - - _, axes = plt.subplots(num_rows, num_cols, figsize=(6, 4)) - # Display input - for idx, _i in enumerate(img_list): - ax = axes[0][idx] if num_rows > 1 else axes[0] if num_cols > 1 else axes - ax.imshow(_i) - ax.set_title("Input", size=8) - - for idx, extractor in zip(range(1, len(cam_extractors) + 1), cam_extractors): - extractor._hooks_enabled = True - model.zero_grad() - if args.mode == "image": - scores = model(transformed_imgs)[0]["cls"].sigmoid() - else: - transformed_imgs = transformed_imgs.transpose(0, 1).unsqueeze(0) - scores = ( - model(transformed_imgs)[0]["hm"] - .sigmoid() - .view(1, -1) - .max(1, keepdim=True) - .values - ) - # output, attn = model(transformed_imgs) # For visualizing the attn scores, will comeback later - # scores = output[0]['temp_loc'].sigmoid() - print("Classification Score -- {}".format(scores)) - - # Select the class index - class_idx = ( - scores.squeeze(0).argmax().item() - if args.class_idx is None - else args.class_idx - ) - # class_idx = img_idx - - # Use the hooked data to compute activation map - activation_map = ( - extractor(class_idx, scores)[0].to(torch.float).squeeze(0).cpu() - ) - # activation_map = torch.cat((activation_map, torch.zeros(4)), 0) - # activation_map = F.adaptive_avg_pool1d(activation_map.unsqueeze(0), 196).squeeze(0) - # activation_map = activation_map[class_idx, 1:].reshape((14, 14)) - - # Clean data - extractor.remove_hooks() - extractor._hooks_enabled = False - - for img_idx, i_ in enumerate(img_list): - # Convert it to PL image - # The indexing below means first image in batch - heatmap = to_pil_image(activation_map[img_idx].unsqueeze(0), mode="F") - # activation_map = attn[img_idx].mean(0)[0, 1:] - # activation_map = activation_map.reshape((14, 14)).detach() - # activation_map = (activation_map - activation_map.min()) / (activation_map.max() - activation_map.min()) - # heatmap = to_pil_image(activation_map.unsqueeze(0), mode='F') - - # Plot the result - result = overlay_mask(deepcopy(i_), heatmap, alpha=args.alpha) - - ax = ( - axes[idx][img_idx] - if num_rows > 1 - else axes[idx] if num_cols > 1 else axes - ) - - ax.imshow(result) - ax.set_title(extractor.__class__.__name__, size=8) - - # Compute the inverse heatmap - if args.save_inverse: - inverse_activation_map = torch.sub( - 1, activation_map[img_idx].unsqueeze(0) - ) - inverse_heatmap = to_pil_image(inverse_activation_map, mode="F") - result_inverse = overlay_mask( - deepcopy(img), inverse_heatmap, alpha=args.alpha - ) - ax = ( - axes[idx][img_idx] - if args.rows > 1 - else axes[idx] if num_cols > 1 else axes - ) - ax.imshow(result_inverse) - ax.set_title(f"{extractor.__class__.__name__}_inverse", size=8) - - # Clear axes - if num_cols > 1: - for _axes in axes: - if num_rows > 1: - for ax in _axes: - ax.axis("off") - else: - _axes.axis("off") - - else: - axes.axis("off") - - plt.tight_layout() - if args.savefig: - plt.savefig( - args.savefig, dpi=200, transparent=True, bbox_inches="tight", pad_inches=0 - ) - - -if __name__ == "__main__": - main() diff --git a/video/fake-stormer/model_code/package_utils/deepfake_mask.py b/video/fake-stormer/model_code/package_utils/deepfake_mask.py deleted file mode 100644 index 914376b2e72de3b82d01d9ae22ee9fbb00e1e145..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/package_utils/deepfake_mask.py +++ /dev/null @@ -1,303 +0,0 @@ -# -*- coding: utf-8 -*- -"""Masks functions for faceswap.py""" - -import inspect -import logging -import random -import sys - -import cv2 -import numpy as np - -logger = logging.getLogger(__name__) # pylint: disable=invalid-name - - -def get_available_masks(): - """Return a list of the available masks for cli""" - masks = sorted( - [ - name - for name, obj in inspect.getmembers(sys.modules[__name__]) - if inspect.isclass(obj) and name != "Mask" - ] - ) - masks.append("none") - logger.debug(masks) - return masks - - -def get_default_mask(): - """Set the default mask for cli""" - masks = get_available_masks() - default = "dfl_full" - default = default if default in masks else masks[0] - logger.debug(default) - return default - - -class Mask: - """Parent class for masks - the output mask will be .mask - channels: 1, 3 or 4: - 1 - Returns a single channel mask - 3 - Returns a 3 channel mask - 4 - Returns the original image with the mask in the alpha channel""" - - def __init__(self, landmarks, face, channels=4): - # logger.info("Initializing %s: (face_shape: %s, channels: %s, landmarks: %s)", - # self.__class__.__name__, face.shape, channels, landmarks) - self.landmarks = landmarks - self.face = face - self.channels = channels - - mask = self.build_mask() - self.mask = self.merge_mask(mask) - # logger.info("Initialized %s", self.__class__.__name__) - - def build_mask(self): - """Override to build the mask""" - raise NotImplementedError - - def merge_mask(self, mask): - """Return the mask in requested shape""" - # logger.info("mask_shape: %s", mask.shape) - assert self.channels in (1, 3, 4), "Channels should be 1, 3 or 4" - assert ( - mask.shape[2] == 1 and mask.ndim == 3 - ), "Input mask be 3 dimensions with 1 channel" - - if self.channels == 3: - retval = np.tile(mask, 3) - elif self.channels == 4: - retval = np.concatenate((self.face, mask), -1) - else: - retval = mask - - # logger.info("Final mask shape: %s", retval.shape) - return retval - - -class dfl_full(Mask): # pylint: disable=invalid-name - """DFL facial mask""" - - def build_mask(self): - mask = np.zeros(self.face.shape[0:2] + (1,), dtype=np.float32) - - nose_ridge = (self.landmarks[27:31], self.landmarks[33:34]) - jaw = ( - self.landmarks[0:17], - self.landmarks[48:68], - self.landmarks[0:1], - self.landmarks[8:9], - self.landmarks[16:17], - ) - eyes = ( - self.landmarks[17:27], - self.landmarks[0:1], - self.landmarks[27:28], - self.landmarks[16:17], - self.landmarks[33:34], - ) - parts = [jaw, nose_ridge, eyes] - - for item in parts: - merged = np.concatenate(item) - cv2.fillConvexPoly( - mask, cv2.convexHull(merged), 255.0 - ) # pylint: disable=no-member - return mask - - -class components(Mask): # pylint: disable=invalid-name - """Component model mask""" - - def build_mask(self): - mask = np.zeros(self.face.shape[0:2] + (1,), dtype=np.float32) - - r_jaw = (self.landmarks[0:9], self.landmarks[17:18]) - l_jaw = (self.landmarks[8:17], self.landmarks[26:27]) - r_cheek = (self.landmarks[17:20], self.landmarks[8:9]) - l_cheek = (self.landmarks[24:27], self.landmarks[8:9]) - nose_ridge = ( - self.landmarks[19:25], - self.landmarks[8:9], - ) - r_eye = ( - self.landmarks[17:22], - self.landmarks[27:28], - self.landmarks[31:36], - self.landmarks[8:9], - ) - l_eye = ( - self.landmarks[22:27], - self.landmarks[27:28], - self.landmarks[31:36], - self.landmarks[8:9], - ) - nose = (self.landmarks[27:31], self.landmarks[31:36]) - parts = [r_jaw, l_jaw, r_cheek, l_cheek, nose_ridge, r_eye, l_eye, nose] - - for item in parts: - merged = np.concatenate(item) - cv2.fillConvexPoly( - mask, cv2.convexHull(merged), 255.0 - ) # pylint: disable=no-member - return mask - - -class extended(Mask): # pylint: disable=invalid-name - """Extended mask - Based on components mask. Attempts to extend the eyebrow points up the forehead - """ - - def build_mask(self): - mask = np.zeros(self.face.shape[0:2] + (1,), dtype=np.float32) - - landmarks = self.landmarks.copy() - # mid points between the side of face and eye point - ml_pnt = (landmarks[36] + landmarks[0]) // 2 - mr_pnt = (landmarks[16] + landmarks[45]) // 2 - - # mid points between the mid points and eye - ql_pnt = (landmarks[36] + ml_pnt) // 2 - qr_pnt = (landmarks[45] + mr_pnt) // 2 - - # Top of the eye arrays - bot_l = np.array( - (ql_pnt, landmarks[36], landmarks[37], landmarks[38], landmarks[39]) - ) - bot_r = np.array( - (landmarks[42], landmarks[43], landmarks[44], landmarks[45], qr_pnt) - ) - - # Eyebrow arrays - top_l = landmarks[17:22] - top_r = landmarks[22:27] - - # Adjust eyebrow arrays - landmarks[17:22] = top_l + ((top_l - bot_l) // 2) - landmarks[22:27] = top_r + ((top_r - bot_r) // 2) - - r_jaw = (landmarks[0:9], landmarks[17:18]) - l_jaw = (landmarks[8:17], landmarks[26:27]) - r_cheek = (landmarks[17:20], landmarks[8:9]) - l_cheek = (landmarks[24:27], landmarks[8:9]) - nose_ridge = ( - landmarks[19:25], - landmarks[8:9], - ) - r_eye = (landmarks[17:22], landmarks[27:28], landmarks[31:36], landmarks[8:9]) - l_eye = (landmarks[22:27], landmarks[27:28], landmarks[31:36], landmarks[8:9]) - nose = (landmarks[27:31], landmarks[31:36]) - parts = [r_jaw, l_jaw, r_cheek, l_cheek, nose_ridge, r_eye, l_eye, nose] - - for item in parts: - merged = np.concatenate(item) - cv2.fillConvexPoly( - mask, cv2.convexHull(merged), 255.0 - ) # pylint: disable=no-member - return mask - - -class facehull(Mask): # pylint: disable=invalid-name - """Basic face hull mask""" - - def build_mask(self): - mask = np.zeros(self.face.shape[0:2] + (1,), dtype=np.float32) - hull = cv2.convexHull( # pylint: disable=no-member - np.array(self.landmarks).reshape((-1, 2)) - ) - cv2.fillConvexPoly( - mask, hull, 255.0, lineType=cv2.LINE_AA - ) # pylint: disable=no-member - return mask - - -def random_get_hull(landmark, img1, hull_type=None): - if hull_type is None: - hull_type = random.choice([0, 1, 2, 3]) - - if hull_type == 0: - mask = dfl_full(landmarks=landmark.astype("int32"), face=img1, channels=3).mask - return mask / 255, hull_type - elif hull_type == 1: - mask = extended(landmarks=landmark.astype("int32"), face=img1, channels=3).mask - return mask / 255, hull_type - elif hull_type == 2: - mask = components( - landmarks=landmark.astype("int32"), face=img1, channels=3 - ).mask - return mask / 255, hull_type - elif hull_type == 3: - mask = facehull(landmarks=landmark.astype("int32"), face=img1, channels=3).mask - return mask / 255, hull_type - - -def dynamic_blend(source, target, mask, **kwargs): - mask_blured, size_h, size_w, kernel_1, kernel_2, sigma_rand = get_blend_mask( - mask, **kwargs - ) - - if kwargs.get("blend_ratio") is None: - blend_list = [0.25, 0.5, 0.75, 1, 1, 1] - blend_ratio = blend_list[np.random.randint(len(blend_list))] - else: - blend_ratio = kwargs.get("blend_ratio") - - mask_blured_ = mask_blured * blend_ratio - - img_blended = mask_blured_ * source + (1 - mask_blured_) * target - - blend_params = { - "blend_ratio": blend_ratio, - "size_h": size_h, - "size_w": size_w, - "kernel_1": kernel_1, - "kernel_2": kernel_2, - "sigma_rand": sigma_rand, - } - return img_blended, mask_blured, blend_params - - -def get_blend_mask(mask, **kwargs): - H, W = mask.shape - - if kwargs.get("size_h") is None and kwargs.get("size_w") is None: - size_h = np.random.randint(H * 0.8, H / 0.8) - size_w = np.random.randint(W * 0.8, W / 0.8) - else: - size_h = kwargs.get("size_h") - size_w = kwargs.get("size_w") - - mask = cv2.resize(mask, (size_w, size_h)) - - if kwargs.get("kernel_1") is None and kwargs.get("kernel_2") is None: - kernel_1 = random.randrange(5, 26, 2) - kernel_2 = random.randrange(5, 26, 2) - kernel_1 = (kernel_1, kernel_1) - kernel_2 = (kernel_2, kernel_2) - else: - kernel_1 = kwargs.get("kernel_1") - kernel_2 = kwargs.get("kernel_2") - - mask_blured = cv2.GaussianBlur(mask, kernel_1, 0) - mask_blured = mask_blured / (mask_blured.max()) - mask_blured[mask_blured < 1] = 0 - - if kwargs.get("sigma_rand") is None: - sigma_rand = np.random.randint(5, 46) - else: - sigma_rand = kwargs.get("sigma_rand") - mask_blured = cv2.GaussianBlur(mask_blured, kernel_2, sigma_rand) - mask_blured = mask_blured / (mask_blured.max()) - - mask_blured = cv2.resize(mask_blured, (W, H)) - - return ( - mask_blured.reshape((mask_blured.shape + (1,))), - size_h, - size_w, - kernel_1, - kernel_2, - sigma_rand, - ) diff --git a/video/fake-stormer/model_code/package_utils/geo_landmarks_extraction.py b/video/fake-stormer/model_code/package_utils/geo_landmarks_extraction.py deleted file mode 100644 index 50ea211ad696c36fb969c0c36f3bf6022c5dd556..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/package_utils/geo_landmarks_extraction.py +++ /dev/null @@ -1,348 +0,0 @@ -# -*- coding: utf-8 -*- -import argparse -import math -import os -import sys -import time - -if not os.getcwd() in sys.path: - sys.path.append(os.getcwd()) -import random -from glob import glob - -import cv2 -import dlib -import numpy as np -import simplejson as json -from box import Box as edict -from configs.get_config import load_config -from imutils import face_utils -from tqdm import tqdm -from transform import affine_transform - -from utils import draw_landmarks - - -class LandmarkUtility(object): - def __init__(self, cfg, load_imgs=False, **kwargs): - super().__init__() - - assert "DATASET" in cfg, "Dataset can not be None!" - assert "ROOT" in cfg, "Image Directory need to be provided!" - - if not isinstance(cfg, edict): - cfg = edict(cfg) - - self.load_imgs = load_imgs - self.image_root = cfg.ROOT - self.image_suffix = cfg.IMAGE_SUFFIX or "jpg" - self.dataset = cfg.DATASET - self.split = cfg.SPLIT or "train" - self.data_type = cfg.DATA_TYPE or "images" - self.fol_label = cfg.LABEL or ["real"] - self.debug = cfg.DEBUG - self.fake_types = cfg.FAKETYPE - self.compression = cfg.COMPRESSION - - if kwargs is not None: - for k, v in kwargs.items(): - if v is None: - raise ValueError(f"{k}:{v} recieve a None value!") - self.__setattr__(k, v) - - def __contain__(self, key): - return hasattr(self, key) - - def _load_data(self): - img_paths = [] - file_names = [] - - print(f"Loading data from dataset --- {self.dataset}") - if self.load_imgs: - img_paths, file_names = self._load_data_from_path() - else: - assert self.__contain__( - "file_path" - ), "Loading data from file need a file path" - img_paths, file_names = self._load_data_from_file( - self.__getattribute__("file_path") - ) - - assert ( - len(img_paths) != 0 - ), "Image paths have not been loaded! Please check image directory!" - assert ( - len(file_names) != 0 - ), "Image files have not been loaded! Please check image suffixes!" - return img_paths, file_names - - def _load_data_from_path(self): - """ - Currenly, Using Glob for loading file with regex - It might be changed for better performance in large datasets - """ - assert os.path.exists(self.image_root), "Root path to dataset can not be None!" - data_type = self.data_type - fake_types = self.fake_types - img_paths = [] - - # Load image data for each type of fake techniques - for idx, ft in enumerate(fake_types): - data_dir = os.path.join(self.image_root, self.split, data_type, ft) - if not os.path.exists(data_dir): - raise ValueError("Data Directory can not be invalid!") - - for sub_dir in os.listdir(data_dir): - sub_dir_path = os.path.join(data_dir, sub_dir) - img_paths_ = glob(f"{sub_dir_path}/*.{self.image_suffix}") - - img_paths.extend(img_paths_) - - print( - "{} image paths have been loaded from {}!".format( - len(img_paths), self.dataset - ) - ) - file_names = [ip.split("/")[-1] for ip in img_paths] - - return img_paths, file_names - - def _load_data_from_file(self, file_path): - """ - Each extension will be treated with particular extension loader - """ - filename, file_extension = os.path.splitext(file_path) - img_paths, file_names = [], [] - if file_extension == ".json": - f = open(file_path) - data = json.load(f) - obj_data = data["data"] - - for item in obj_data: - img_paths.append(item["image_path"]) - file_names.append(item["file_name"]) - return img_paths, file_names - - def _img_obj(self, img_path, file_name, **kwargs): - img_path = img_path.replace(self.image_root, "") - obj = dict(image_path=img_path, file_name=file_name, **kwargs) - return obj - - def _load_image(self, img_path): - image = cv2.imread(os.path.join(self.image_root, img_path)) - return image - - def _facial_landmark(self, image, detector, lm_predictor): - try: - gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) - except: - gray = image - - f_rect = detector(gray, 1) - if len(f_rect) > 0: - f_lms = lm_predictor(gray, f_rect[0]) - f_lms = face_utils.shape_to_np(f_lms) - return f_lms - else: - return None - - def _align_face(self, image, f_lms): - assert f_lms is not None, "Facial Landmarks can not be None!" - eyepoints = f_lms[39], f_lms[42] - le_x, le_y = eyepoints[0] - re_x, re_y = eyepoints[1] - - angle = math.atan((le_y - re_y) / (le_x - re_x)) * (180 / math.pi) - origin_point = tuple(np.array(image.shape[1::-1]) / 2) - - rot_mat = cv2.getRotationMatrix2D(origin_point, angle, 1.0) - rot_img = cv2.warpAffine( - image, rot_mat, image.shape[1::-1], flags=cv2.INTER_LINEAR - ) - - # Aligning face landmarks by the rotation matrix - rot_f_lms = None - if f_lms is not None: - rot_f_lms = np.empty_like(f_lms) - for i, p in enumerate(f_lms): - rot_f_lms[i] = affine_transform(p, rot_mat) - - return rot_img, f_lms, rot_f_lms - - def facial_landmarks(self, img_paths, detector, lm_predictor): - rot_imgs, f_lmses, rot_f_lmses = [], [], [] - - for i, ip in enumerate(tqdm(img_paths, dynamic_ncols=True)): - image = self._load_image(ip) - - # Checking time processing for each item - s_t = time.time() - f_lms = None - try: - f_lms = self._facial_landmark(image, detector, lm_predictor) - if f_lms is None: - if self.debug: - cv2.imwrite(f"samples/exception_img_{i}.jpg", image) - print(f"Image {i}--{ip} did not find any landmarks!") - except Exception as e: - print(e) - - if i == 1: - print( - "Landmark detection processing time ---- {}".format( - time.time() - s_t - ) - ) - - if f_lms is not None: - rot_img, _f_lms, rot_f_lms = self._align_face(image, f_lms) - else: - rot_img, _f_lms, rot_f_lms = image, [], [] - rot_imgs.append(rot_img) - f_lmses.append(_f_lms) - rot_f_lmses.append(rot_f_lms) - - # Visualizing landmarks to test - if i < 10 and self.debug: - rot_img = draw_landmarks(rot_img, rot_f_lms) - cv2.imwrite(f"samples/test_{i}.jpg", rot_img) - - if i % 100 == 0: - print(f"Landmarks have been detected for {i} images") - return rot_imgs, f_lmses, rot_f_lmses - - def build_data(self, img_paths, file_names, **kwargs): - data = dict(data=[]) - - if "orig_lmses" in kwargs.keys(): - if not bool(kwargs["orig_lmses"]): - raise ValueError("Original Landmarks cannot be None!") - else: - orig_lmses = kwargs["orig_lmses"] - assert len(orig_lmses) == len( - img_paths - ), "The length of images and landmarks is not compatible!" - - if "aligned_lmses" in kwargs.keys(): - if not bool(kwargs["aligned_lmses"]): - raise ValueError("Aligned Landmarks cannot be None!") - else: - aligned_lmses = kwargs["aligned_lmses"] - assert len(aligned_lmses) == len( - img_paths - ), "The length of images and aligned landmarks is not compatible!" - - for i, (p, f) in enumerate(zip(img_paths, file_names)): - fake_type = ( - p.split("/")[-2] - if self.fake_types != ["original"] - else self.fake_types[0] - ) - img_obj = self._img_obj(p, f, id=i, fake_type=fake_type) - - if "orig_lmses" in kwargs.keys(): - img_obj["orig_lms"] = ( - orig_lmses[i].tolist() - if isinstance(orig_lmses[i], np.ndarray) - else orig_lmses[i] - ) # To save to JSON - if "aligned_lmses" in kwargs.keys(): - img_obj["aligned_lms"] = ( - aligned_lmses[i].tolist() - if isinstance(aligned_lmses[i], np.ndarray) - else aligned_lmses[i] - ) # To save to JSON - data["data"].append(img_obj) - return data - - def save2json(self, data, fn="faceforensics_processed.json"): - assert len(data), "Data can not be empty!" - target = "processed_data/{}".format(self.compression) - if not os.path.exists(target): - os.mkdir(target) - fp = os.path.join(target, fn) - with open(fp, "w") as f: - json.dump(data, f) - - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description="Landmarks preprocessing!") - parser.add_argument("--config", help="Config file to proceed preprocessing") - parser.add_argument("--file_path", help="File to load processed data") - parser.add_argument( - "--extract_landmark", help="Use Dlib to extract landmarks", action="store_true" - ) - parser.add_argument( - "--save_aligned", help="Save aligned images", action="store_true" - ) - args = parser.parse_args() - print(args) - - cfg = load_config(args.config) - extract_landmark = args.extract_landmark - save_aligned = args.save_aligned - - kwargs = {} - if extract_landmark: - kwargs["extract_landmark"] = extract_landmark - - # Initialize Landmark Utility instance - if args.file_path: - lm_ins = LandmarkUtility( - cfg.PREPROCESSING, load_imgs=False, file_path=args.file_path, **kwargs - ) - else: - lm_ins = LandmarkUtility(cfg.PREPROCESSING, load_imgs=True, **kwargs) - img_paths, file_names = lm_ins._load_data() - print(f"{len(img_paths)} images have been loaded for processing!") - - if extract_landmark: - assert ( - cfg.PREPROCESSING.facial_lm_pretrained is not None - ), "Landmark pretrained can not be None!" - f_detector = dlib.get_frontal_face_detector() - f_lm_detector = dlib.shape_predictor(cfg.PREPROCESSING.facial_lm_pretrained) - rot_imgs, f_lmses, rot_f_lmses = lm_ins.facial_landmarks( - img_paths, f_detector, f_lm_detector - ) - - if save_aligned: - os.makedirs( - f"{lm_ins.image_root}{lm_ins.split}/{lm_ins.data_type}/aligned_{lm_ins.fake_types[0]}_{cfg.PREPROCESSING.N_LANDMARKS}", - exist_ok=True, - ) - for i, img_p in enumerate(tqdm(img_paths, dynamic_ncols=True)): - rot_img = rot_imgs[i] - fn = file_names[i] - vid_id = img_p.split("/")[-2] - os.makedirs( - f"{lm_ins.image_root}{lm_ins.compression}/{lm_ins.split}/{lm_ins.data_type}/aligned_{lm_ins.fake_types[0]}_{cfg.PREPROCESSING.N_LANDMARKS}/{vid_id}", - exist_ok=True, - ) - - aligned_img_p = img_p.replace( - lm_ins.fake_types[0], - f"aligned_{lm_ins.fake_types[0]}_{cfg.PREPROCESSING.N_LANDMARKS}", - ) - cv2.imwrite(os.path.join(lm_ins.image_root, aligned_img_p), rot_img) - img_paths[i] = aligned_img_p - - print("All landmarks have been detected and stored in memory!") - print("Ready to save to file...") - - if args.file_path is None: - if extract_landmark: - data = lm_ins.build_data( - img_paths, file_names, orig_lmses=f_lmses, aligned_lmses=rot_f_lmses - ) - else: - data = lm_ins.build_data(img_paths, file_names) - - try: - lm_ins.save2json( - data, - fn=f"{lm_ins.split}_{lm_ins.dataset}_{lm_ins.data_type}_{cfg.PREPROCESSING.N_LANDMARKS}.json", - ) - except Exception as e: - print(e) - print("Processed Data has been saved successfully!") diff --git a/video/fake-stormer/model_code/package_utils/image_augmentation.py b/video/fake-stormer/model_code/package_utils/image_augmentation.py deleted file mode 100644 index 1354db8602ce5a207d7417ca8f61eacb0229c4e1..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/package_utils/image_augmentation.py +++ /dev/null @@ -1,96 +0,0 @@ -# -*- coding: utf-8 -*- -import argparse -import glob -import os -import random - -import numpy as np -import torch -from image_utils import ( - block_wise, - color_contrast, - color_saturation, - gaussian_blur, - gaussian_noise_color, - jpeg_compression, - load_image, - video_compression, -) -from PIL import Image - -# DIST_LEVEL = 3 - - -def get_distortion_parameter(type, level): - param_dict = dict() # a dict of list - param_dict["CS"] = [0.4, 0.3, 0.2, 0.1, 0.0] # smaller, worse - param_dict["CC"] = [0.85, 0.725, 0.6, 0.475, 0.35] # smaller, worse - param_dict["BW"] = [16, 32, 48, 64, 80] # larger, worse - param_dict["GNC"] = [0.001, 0.002, 0.005, 0.01, 0.05] # larger, worse - param_dict["GB"] = [7, 9, 13, 17, 21] # larger, worse - param_dict["JPEG"] = [2, 3, 4, 5, 6] # larger, worse - param_dict["VC"] = [30, 32, 35, 38, 40] # larger, worse - - # level starts from 1, list starts from 0 - return param_dict[type][level - 1] - - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument("-i", dest="path", type=str, default="") - parser.add_argument( - "-t", - dest="task", - choices=[ - "noise", - "block", - "saturation", - "contrast", - "blur", - "pixel", - "compression", - ], - default="noise", - ) - args = parser.parse_args() - # Setting device - device = torch.device("cuda") - dest = args.path + "_" + args.task + "_" + "random" + "/" - - if not os.path.exists(dest): - os.makedirs(dest) - - for dirpath, dirnames, filenames in os.walk(args.path): - possible_files = os.path.join(dirpath, "*.png") - - for file in glob.glob(possible_files): - img = load_image(file) - dist_level = random.randint(1, 5) - - if args.task == "noise": - params = get_distortion_parameter("GNC", dist_level) - img = gaussian_noise_color(img, params) - elif args.task == "block": - params = get_distortion_parameter("BW", dist_level) - img = block_wise(img, params) - elif args.task == "saturation": - params = get_distortion_parameter("CS", dist_level) - img = color_saturation(img, params) - elif args.task == "contrast": - params = get_distortion_parameter("CC", dist_level) - img = color_contrast(img, params) - elif args.task == "blur": - params = get_distortion_parameter("GB", dist_level) - img = gaussian_blur(img, params) - elif args.task == "pixel": - params = get_distortion_parameter("JPEG", dist_level) - img = jpeg_compression(img, params) - elif args.task == "compression": - params = get_distortion_parameter("VC", dist_level) - img = video_compression(img, params) - res = dest + file.split("/")[-2] - - if not os.path.exists(res): - os.makedirs(res) - # print(dest+('/').join(file.split('/')[-2:])) - Image.fromarray(img).save(res + "/" + file.split("/")[-1]) diff --git a/video/fake-stormer/model_code/package_utils/image_utils.py b/video/fake-stormer/model_code/package_utils/image_utils.py deleted file mode 100644 index 126d944f958e285e6c50cc84f98b2ef25a51c85e..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/package_utils/image_utils.py +++ /dev/null @@ -1,214 +0,0 @@ -# -*- coding: utf-8 -*- -import math -import os -import random - -import cv2 -import numpy as np -from matplotlib import cm -from PIL import Image - - -def load_image(image_path): - """Loading image""" - img = Image.open(image_path) - # Fix bug RGBA - if img.mode != "RGB": - img = img.convert("RGB") - img = np.array(img) - return img - - -def crop_by_margin(image, margin=[0, 0]): - """Cropping images by margins as a step of preprocessing""" - H, W = image.shape[:2] - margin_x, margin_y = margin - image = image[margin_y : H - margin_y, margin_x : W - margin_x, :] - return image - - -def gaussian_radius(det_size, min_overlap=0.7): - """Calculating gaussian radius to compute std for Unnormalized Gaussian Mask""" - height, width = det_size - - a1 = 1 - b1 = height + width - c1 = width * height * (1 - min_overlap) / (1 + min_overlap) - sq1 = np.sqrt(b1**2 - 4 * a1 * c1) - r1 = (b1 + sq1) / 2 - - a2 = 4 - b2 = 2 * (height + width) - c2 = (1 - min_overlap) * width * height - sq2 = np.sqrt(b2**2 - 4 * a2 * c2) - r2 = (b2 + sq2) / 2 - - a3 = 4 * min_overlap - b3 = -2 * min_overlap * (height + width) - c3 = (min_overlap - 1) * width * height - sq3 = np.sqrt(b3**2 - 4 * a3 * c3) - r3 = (b3 + sq3) / 2 - return min(r1, r2, r3) - - -def cal_mask_wh(p, mask): - """Adaptively calculating blending mask W, H at the most vulnerable points perspective""" - cy, cx = p - mask_h, mask_w = mask.shape - w = 0 - h = 0 - - for i in [-1, 1]: - shift_y = 0 - while ( - (cy + shift_y > -mask_h) - and (cy + shift_y < mask_h) - and (mask[cy + shift_y, cx] > 128) - ): - w += 1 - shift_y += i - - shift_x = 0 - while ( - (cx + shift_x > -mask_w) - and (cx + shift_x < mask_w) - and (mask[cy, cx + shift_x] > 128) - ): - h += 1 - shift_x += i - - return w, h - - -def overlay_mask( - img: Image.Image, mask: Image.Image, colormap: str = "jet", alpha: float = 0.7 -) -> Image.Image: - """Overlay a colormapped mask on a background image - - >>> from PIL import Image - >>> import matplotlib.pyplot as plt - >>> from torchcam.utils import overlay_mask - >>> img = ... - >>> cam = ... - >>> overlay = overlay_mask(img, cam) - - Args: - img: background image - mask: mask to be overlayed in grayscale - colormap: colormap to be applied on the mask - alpha: transparency of the background image - - Returns: - overlayed image - - Raises: - TypeError: when the arguments have invalid types - ValueError: when the alpha argument has an incorrect value - """ - - if not isinstance(img, Image.Image) or not isinstance(mask, Image.Image): - raise TypeError("img and mask arguments need to be PIL.Image") - - if not isinstance(alpha, float) or alpha < 0 or alpha >= 1: - raise ValueError( - "alpha argument is expected to be of type float between 0 and 1" - ) - - cmap = cm.get_cmap(colormap) - # Resize mask and apply colormap - overlay = mask.resize(img.size, resample=Image.BICUBIC) - overlay = (255 * cmap(np.asarray(overlay) ** 1)[:, :, :3]).astype(np.uint8) - # Overlay the image with the mask - overlayed_img = Image.fromarray( - (alpha * np.asarray(img) + (1 - alpha) * overlay).astype(np.uint8) - ) - - return overlayed_img - - -def bgr2ycbcr(img_bgr): - img_bgr = img_bgr.astype(np.float32) - img_ycrcb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2YCR_CB) - img_ycbcr = img_ycrcb[:, :, (0, 2, 1)].astype(np.float32) - # to [16/255, 235/255] - img_ycbcr[:, :, 0] = (img_ycbcr[:, :, 0] * (235 - 16) + 16) / 255.0 - # to [16/255, 240/255] - img_ycbcr[:, :, 1:] = (img_ycbcr[:, :, 1:] * (240 - 16) + 16) / 255.0 - - return img_ycbcr - - -def ycbcr2bgr(img_ycbcr): - img_ycbcr = img_ycbcr.astype(np.float32) - # to [0, 1] - img_ycbcr[:, :, 0] = (img_ycbcr[:, :, 0] * 255.0 - 16) / (235 - 16) - # to [0, 1] - img_ycbcr[:, :, 1:] = (img_ycbcr[:, :, 1:] * 255.0 - 16) / (240 - 16) - img_ycrcb = img_ycbcr[:, :, (0, 2, 1)].astype(np.float32) - img_bgr = cv2.cvtColor(img_ycrcb, cv2.COLOR_YCR_CB2BGR) - - return img_bgr - - -def gaussian_noise_color(img, param=None): - if param is None: - param = [0.001, 0.002, 0.005, 0.01, 0.05] - ycbcr = bgr2ycbcr(img) / 255 - size_a = ycbcr.shape - b = ( - ycbcr + math.sqrt(param) * np.random.randn(size_a[0], size_a[1], size_a[2]) - ) * 255 - b = ycbcr2bgr(b) - img = np.clip(b, 0, 255).astype(np.uint8) - return img - - -def block_wise(img, param): - width = 8 - block = np.ones((width, width, 3)).astype(int) * 128 - param = min(img.shape[0], img.shape[1]) // 256 * param - for i in range(param): - r_w = random.randint(0, img.shape[1] - 1 - width) - r_h = random.randint(0, img.shape[0] - 1 - width) - img[r_h : r_h + width, r_w : r_w + width, :] = block - - return img - - -def color_saturation(img, param): - ycbcr = bgr2ycbcr(img) - ycbcr[:, :, 1] = 0.5 + (ycbcr[:, :, 1] - 0.5) * param - ycbcr[:, :, 2] = 0.5 + (ycbcr[:, :, 2] - 0.5) * param - img = ycbcr2bgr(ycbcr).astype(np.uint8) - - return img - - -def color_contrast(img, param): - img = img.astype(np.float32) * param - img = img.astype(np.uint8) - - return img - - -def gaussian_blur(img, param): - img = cv2.GaussianBlur(img, (param, param), param * 1.0 / 6) - - return img - - -def jpeg_compression(img, param): - h, w, _ = img.shape - s_h = h // param - s_w = w // param - img = cv2.resize(img, (s_w, s_h)) - img = cv2.resize(img, (w, h)) - - return img - - -def video_compression(vid_in, vid_out, param): - cmd = f"ffmpeg -i {vid_in} -crf {param} -y {vid_out}" - os.system(cmd) - - return diff --git a/video/fake-stormer/model_code/package_utils/images_crop.py b/video/fake-stormer/model_code/package_utils/images_crop.py deleted file mode 100644 index e01e095d2d93e71972fee0231e8b9a447020e918..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/package_utils/images_crop.py +++ /dev/null @@ -1,444 +0,0 @@ -# -*- coding: utf-8 -*- -import argparse -import csv -import json -import os -import shutil -from glob import glob - -import cv2 -import numpy as np -import pandas as pd -import torch -from imutils import face_utils -from retinaface.pre_trained_models import get_model -from retinaface.utils import vis_annotations -from sklearn.utils import shuffle -from tqdm import tqdm - -ROOT = "/data/deepfake_cluster/datasets_df" -SAVE_DIR = f"{ROOT}/FGN" -IMAGE_H, IMAGE_W, IMAGE_C = 256, 256, 3 -PADDING = 0.25 -DATA_TYPE = "frames" # frames or videos - - -def facecrop( - model, - org_path, - save_path, - period=1, - num_frames=10, - dataset="original", - label=None, - mask_path=None, - padding=PADDING, -): - print(f"Processing video --- {org_path}") - cap_org = cv2.VideoCapture(org_path) - if mask_path is not None: - mask_cap = cv2.VideoCapture(mask_path) - croppedfaces = [] - frame_count_org = int(cap_org.get(cv2.CAP_PROP_FRAME_COUNT)) - print("N frame count --- ", frame_count_org) - - if label is not None: - # Custom org_path for ForgeryNet - if dataset == "ForgeryNet": - org_path_ = org_path.split("/") - org_path = "/".join(org_path_[:7] + ["_".join(org_path_[8:])]) - save_path_ = ( - save_path - + f"/{DATA_TYPE}/{str(label)}/" - + os.path.basename(org_path).replace(".mp4", "/") - ) - else: - save_path_ = ( - save_path - + f"/{DATA_TYPE}/{dataset}/" - + os.path.basename(org_path).replace(".mp4", "/") - ) - os.makedirs(save_path_, exist_ok=True) - - if mask_path is not None: - save_mask_path_ = ( - save_path - + f"/masks/{dataset}/" - + os.path.basename(mask_path).replace(".mp4", "/") - ) - os.makedirs(save_mask_path_, exist_ok=True) - - if DATA_TYPE == "frames": - frame_idxs = np.linspace( - 0, frame_count_org - 1, num_frames, endpoint=True, dtype=np.int64 - ) - else: - frame_idxs = range(0, num_frames) - - for cnt_frame in range(frame_count_org): - image_path = save_path_ + str(cnt_frame).zfill(3) + ".png" - if os.path.isfile(image_path): - continue - if mask_path is not None: - mask_f_path = save_mask_path_ + str(cnt_frame).zfill(3) + ".png" - if os.path.isfile(mask_f_path): - continue - - try: - ret_org, frame_org = cap_org.read() - if mask_path is not None: - ret_m_org, mask_org = mask_cap.read() - height, width = frame_org.shape[:-1] - if not ret_org: - tqdm.write( - "Frame read {} Error! : {}".format( - cnt_frame, os.path.basename(org_path) - ) - ) - continue - - if cnt_frame not in frame_idxs: - continue - - frame = cv2.cvtColor(frame_org, cv2.COLOR_BGR2RGB) - faces = model.predict_jsons(frame) - try: - if len(faces) == 0: - print(faces) - tqdm.write( - "No faces in {}:{}".format( - cnt_frame, os.path.basename(org_path) - ) - ) - continue - - face_s_max = -1 - landmarks = [] - face_crop = None - score_max = -1 - for face_idx in range(len(faces)): - x0, y0, x1, y1 = faces[face_idx]["bbox"] - # landmark = np.array([[x0,y0],[x1,y1]] + faces[face_idx]['landmarks']) - face_w = x1 - x0 - face_h = y1 - y0 - face_s = face_w * face_h - score = faces[face_idx]["score"] - - if face_s > face_s_max and score > score_max: - f_c_x0 = max(0, x0 - int(face_w * padding)) - f_c_x1 = min(width, x1 + int(face_w * padding)) - f_c_y0 = max(0, y0 - int(face_h * padding)) - f_c_y1 = min(height, y1 + int(face_h * padding)) - - face_crop = frame_org[f_c_y0:f_c_y1, f_c_x0:f_c_x1, :] - if mask_path is not None: - mask_crop = mask_org[f_c_y0:f_c_y1, f_c_x0:f_c_x1, :] - face_s_max = face_s - score_max = score - # size_list.append(face_s) - # # landmarks.append(landmark) - except Exception as e: - print(f"error in {cnt_frame}:{org_path}") - print(e) - continue - except Exception as e1: - print(e1) - continue - - # landmarks=np.concatenate(landmarks).reshape((len(size_list),) + landmark.shape) - # landmarks=landmarks[np.argsort(np.array(size_list))[::-1]] - - # land_path=save_path_+str(cnt_frame).zfill(3) - # land_path=land_path.replace('/frames','/retina') - # os.makedirs(os.path.dirname(land_path),exist_ok=True) - # np.save(land_path, landmarks) - # if not os.path.isfile(image_path): - face_crop = cv2.resize( - face_crop, (IMAGE_H, IMAGE_W), interpolation=cv2.INTER_LINEAR - ) - cv2.imwrite(image_path, face_crop) - - if mask_path is not None: - mask_crop = cv2.resize( - mask_crop, (IMAGE_H, IMAGE_W), interpolation=cv2.INTER_LINEAR - ) - cv2.imwrite(mask_f_path, mask_crop) - - cap_org.release() - return - - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument( - "-d", - dest="dataset", - choices=[ - "FaceShifter", - "Face2Face", - "Deepfakes", - "FaceSwap", - "NeuralTextures", - "Original", - "Celeb-real", - "Celeb-synthesis", - "YouTube-real", - "DFDC", - "DFDCP", - "method_A", - "method_B", - "original_videos", - "DFo_source_videos", - "DFo_manipulated_videos", - "ForgeryNet", - ], - ) - parser.add_argument("-c", dest="comp", choices=["raw", "c23", "c40"], default="raw") - parser.add_argument("-n", dest="num_frames", type=int, default=32) - parser.add_argument( - "-t", dest="task", choices=["train", "val", "test"], default="train" - ) - parser.add_argument("--save_mask", "-sm", action="store_true") - parser.add_argument( - "--alloc_mem", "-a", help="Pre allocating GPU memory", action="store_true" - ) - args = parser.parse_args() - - # Allocate memory - if args.alloc_mem: - mem_all_tensors = torch.rand(60, 10000, 10000) - mem_all_tensors.to("cuda:0") - - # Setting device - device = torch.device("cuda") - - # Setting the dataset path based on the dataset name - if args.dataset == "Original": - dataset_path = ( - "{}/FaceForensics++/original_download/original_sequences/youtube/".format( - ROOT - ) - ) - elif args.dataset == "DeepFakeDetection_original": - dataset_path = "/data/FaceForensics++/original_sequences/actors/{}/".format( - args.comp - ) - elif args.dataset in [ - "DeepFakeDetection", - "FaceShifter", - "Face2Face", - "Deepfakes", - "FaceSwap", - "NeuralTextures", - ]: - dataset_path = ( - "{}/FaceForensics++/original_download/manipulated_sequences/{}/".format( - ROOT, args.dataset - ) - ) - elif args.dataset in ["Celeb-real", "Celeb-synthesis", "YouTube-real"]: - if "v1" in SAVE_DIR: - dataset_path = "{}/Celeb-DFv1/".format(ROOT) - else: - dataset_path = "{}/Celeb-DFv2/Celeb-DF-v2/".format(ROOT) - elif args.dataset in ["method_A", "method_B", "original_videos"]: - dataset_path = "{}/DFDCP/".format(ROOT) - elif args.dataset in ["DFDC"]: - dataset_path = "{}/DFDC/".format(ROOT) - elif args.dataset in ["DFo_source_videos", "DFo_manipulated_videos"]: - dataset_path = "{}/DeeperForensics/".format(ROOT) - elif args.dataset in ["ForgeryNet"]: - dataset_path = "{}/FGN/".format(ROOT) - else: - raise NotImplementedError - - # Loading model - model = get_model("resnet50_2020-07-20", max_size=2048, device=device) - model.eval() - - labels = [] - if args.dataset in [ - "Original", - "DeepFakeDetection", - "FaceShifter", - "Face2Face", - "Deepfakes", - "FaceSwap", - "NeuralTextures", - ]: - movies_path = os.path.join(dataset_path, args.comp, "videos/") - mask_mov_paths = os.path.join(dataset_path, "masks", "videos/") - - # Annotation file for FF++ - with open(f"{ROOT}/FaceForensics++/original_download/{args.task}.json") as f: - vid_ids = json.load(f) - elif args.dataset in ["Celeb-real", "Celeb-synthesis", "YouTube-real"]: - if "v1" in SAVE_DIR: - movies_path = dataset_path - else: - movies_path = os.path.join(dataset_path, args.dataset, "videos") - - # Annotation file for Celeb-DF - with open(f"{dataset_path}List_of_{args.task}ing_videos.txt") as f: - vid_ids = pd.read_csv(f).values.reshape(-1) - elif args.dataset in ["DFDC"]: - movies_path = os.path.join(dataset_path, args.task, "download_videos") - - # Annotation file for DFDC - with open(os.path.join(dataset_path, args.task, "labels.csv")) as f: - df = pd.read_csv(f) - # df['path'] = df['label'].astype(str) + '/' + df['filename'] - vid_ids = df["filename"].values.reshape(-1) - labels = df["label"].values.reshape(-1) - elif args.dataset in ["DFo_source_videos", "DFo_manipulated_videos"]: - movies_path = dataset_path - - with open(f"{dataset_path}lists/splits/{args.task}.txt") as f: - vid_ids = pd.read_csv(f).values.reshape(-1) - - if args.dataset == "DFo_source_videos": - vid_ids = list( - set([vid_id.split("_")[1].split(".")[0] for vid_id in vid_ids]) - ) - elif args.dataset in ["ForgeryNet"]: - movies_path = os.path.join(dataset_path, args.task, "video") - - # Annotation file for FGN - vid_ids = [] - with open( - os.path.join(dataset_path, args.task, "video_list.txt"), encoding="utf-8" - ) as f: - df = csv.reader(f, delimiter="\n") - - for idx, row in enumerate(df): - row_data = row[0].split(" ") - if int(row_data[-1]) in [0, 7]: - vid_ids.append(row_data[1]) - label = ( - f"fake_{args.task}" - if int(row_data[-1]) == 7 - else f"real_{args.task}" - ) - labels.append(label) - else: - movies_path = dataset_path - - # Annotation file for DFDCP - with open(f"{ROOT}/DFDCP/dataset.json") as f: - movie_data = json.load(f) - vid_ids = [] - for mv_id, item_data in movie_data.items(): - if item_data["set"] == args.task: - vid_ids.append(mv_id) - - movies_path_list = [] - mask_mov_path_list = [] - file_list = [] - file_path = None - vid_id_count = {} - - # Loading the list of specific video's names for an invidual task 'train/val/test - for i in range(len(vid_ids)): - if args.dataset == "Original": - file_list += vid_ids[i] - elif args.dataset in [ - "Face2Face", - "Deepfakes", - "FaceSwap", - "NeuralTextures", - "FaceShifter", - ]: - file_list.append("_".join([vid_ids[i][0], vid_ids[i][1]])) - file_list.append("_".join([vid_ids[i][1], vid_ids[i][0]])) - elif args.dataset in ["method_A", "method_B", "original_videos"]: - if args.dataset in vid_ids[i]: - file_list.append(vid_ids[i]) - elif args.dataset in ["DFDC", "ForgeryNet"]: - file_list.append(vid_ids[i]) - elif args.dataset in ["DFo_source_videos", "DFo_manipulated_videos"]: - sub_dataset = args.dataset.replace("DFo_", "") - file_list_path = os.path.join(dataset_path, "lists", f"{sub_dataset}_lists") - - if i == 0: - if sub_dataset == "source_videos": - file_path = f"{file_list_path}/{sub_dataset}_list.txt" - else: - file_path = f"{file_list_path}/{sub_dataset}_end_to_end_list.txt" - with open(file_path) as f: - full_file_list = pd.read_csv(f).values.reshape(-1) - full_file_list = shuffle(full_file_list, random_state=259) - - for item in full_file_list: - if vid_ids[i] in vid_id_count.keys() and vid_id_count[vid_ids[i]] > 10: - break - if vid_ids[i] in item: - file_list.append(item) - - if vid_ids[i] in vid_id_count.keys(): - vid_id_count[vid_ids[i]] += 1 - else: - vid_id_count[vid_ids[i]] = 1 - else: - if args.dataset in vid_ids[i]: - file_list.append(vid_ids[i].split(" ")[-1]) - - # movies_path_list = sorted(glob(movies_path+'*.mp4')) - if args.dataset in [ - "Original", - "DeepFakeDetection", - "FaceShifter", - "Face2Face", - "Deepfakes", - "FaceSwap", - "NeuralTextures", - ]: - [movies_path_list.append(movies_path + i + ".mp4") for i in file_list] - if args.save_mask: - [mask_mov_path_list.append(mask_mov_paths + i + ".mp4") for i in file_list] - else: - if "v2" in SAVE_DIR: - [ - movies_path_list.append(os.path.join(movies_path, i.split("/")[-1])) - for i in file_list - ] - else: - [movies_path_list.append(os.path.join(movies_path, i)) for i in file_list] - - print("{} : videos are exist in {}".format(len(movies_path_list), args.dataset)) - n_sample = len(movies_path_list) - print(f"number of video samples -- {n_sample}") - - # Defining the path to store the images - save_path = os.path.join(SAVE_DIR, args.task) - os.makedirs(save_path, exist_ok=True) - - for i in tqdm(range(0, n_sample)): - # folder_path=movies_path_list[i].replace('videos/','frames/').replace('.mp4','/') - # if len(glob(folder_path.replace('/frames/','/retina/')+'*.npy')) < args.num_frames: - if len(labels): - facecrop( - model, - movies_path_list[i], - save_path=save_path, - num_frames=args.num_frames, - dataset=args.dataset, - label=labels[i], - ) - else: - if not args.save_mask: - facecrop( - model, - movies_path_list[i], - save_path=save_path, - num_frames=args.num_frames, - dataset=args.dataset, - ) - else: - facecrop( - model, - movies_path_list[i], - save_path=save_path, - num_frames=args.num_frames, - dataset=args.dataset, - mask_path=mask_mov_path_list[i], - ) diff --git a/video/fake-stormer/model_code/package_utils/metrics_based_preds.py b/video/fake-stormer/model_code/package_utils/metrics_based_preds.py deleted file mode 100644 index a821c48a0d7ad367027efb4680c1c206ead6662c..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/package_utils/metrics_based_preds.py +++ /dev/null @@ -1,149 +0,0 @@ -# -*- coding: utf-8 -*- -import os -import sys - -if not os.getcwd() in sys.path: - sys.path.insert(0, os.getcwd()) -import argparse - -import numpy as np -import torch -from lib.metrics import ( - apply_cdf_transform, - bin_calculate_auc_ap_ar, - get_acc_mesure_func, -) -from scipy.stats import wasserstein_distance - -from utils import load_file - - -def sigmoid(z): - return 1 / (1 + np.exp(-z)) - - -if __name__ == "__main__": - parser = argparse.ArgumentParser( - description="Reporting metrics based on saved predictions!" - ) - parser.add_argument("--saved_preds", "-f", help="Path to saved prediction file") - parser.add_argument( - "--model_base", - "-m", - help="The input model is image-level or video-level", - default="image", - ) - parser.add_argument( - "--metric_level", - "-ml", - help="Report metrics at image-level or video level", - default="image", - ) - parser.add_argument( - "--apr", - help="Report average metrics instead of simple ones", - action="store_true", - ) - args = parser.parse_args() - - file = args.saved_preds - model_base = args.model_base - metric_level = args.metric_level - apr = args.apr - # Load data - data = load_file(file_path=file) - - if "data" in data.keys(): - data = data["data"] - - total_preds = [] - total_labels = [] - neg_preds = [] - pos_preds = [] - vid_preds = {} - vid_labels = {} - - if model_base == "image": - for ip in data.keys(): - vid_id = os.path.dirname(ip) - pred = data[ip][0] - label = data[ip][1] - - # Just append to total preds - total_preds.append(pred) - total_labels.append(label) - - if vid_id in vid_preds.keys(): - vid_preds[vid_id].append(pred) - else: - vid_preds[vid_id] = [pred] - vid_labels[vid_id] = [label] - - if metric_level == "video": - total_preds = [ - np.mean(vid_preds[k], keepdims=True) for k in vid_preds.keys() - ] - total_labels = [vid_labels[k] for k in vid_labels.keys()] - else: - for ip in data.keys(): - vid_id = ip.split("/")[-1] - pred = [v for idx, v in enumerate(data[ip]) if idx % 2 == 0] - pred = [np.array(pred).mean()] - label = [data[ip][1]] - - # Just append to total preds - total_preds.append(pred) - total_labels.append(label) - - total_preds = sigmoid(np.array(total_preds)) - total_labels = np.array(total_labels) - - # Assigning predictions to neg/pos groups - neg_preds = total_preds[total_labels < 1].squeeze() - pos_preds = total_preds[total_labels == 1].squeeze() - - # Computing metric section - acc_measure = get_acc_mesure_func("binary") - acc_ = acc_measure(total_preds, targets=None, labels=total_labels) - metrics = bin_calculate_auc_ap_ar(total_preds, total_labels, apr=apr) - best_thr = metrics["best_thr"] - thr_var = metrics["thr_var"] - - if apr: - auc_, ap_, ar_, mf1_ = ( - metrics["auc"], - metrics["ap"], - metrics["ar"], - metrics["mf1"], - ) - print( - f"Current ACC, AUC, AP, AR, mF1, THR --- {acc_*100} -- {auc_*100} -- {ap_*100} -- {ar_*100} -- {mf1_*100} -- {best_thr}" - ) - else: - bacc_, auc_, p_, r_, s_, f1_, eer_ = ( - metrics["bacc"], - metrics["auc"], - metrics["p"], - metrics["r"], - metrics["s"], - metrics["f1"], - metrics["eer"], - ) - print( - f"Current ACC, BACC, AUC, P, R, S, F1, EER, THR, THR_VAR -- {acc_*100} -- {bacc_*100} -- {auc_*100} -- {p_*100} -- {r_*100} -- {s_*100} -- {f1_*100} -- {eer_*100} -- {best_thr:.3f} -- {thr_var:.6f}" - ) - - # Computing Wasserstein distance - for cdf_type in ["empirical", "kde", "para", "quantile"]: - cdf1, cdf2 = apply_cdf_transform( - neg_data=neg_preds, pos_data=pos_preds, cdf_type=cdf_type - ) - - # Customize the calculation of quantile - if cdf_type != "quantile": - wd = wasserstein_distance(cdf1, cdf2) - else: - q = np.linspace(0, 1, min(len(neg_preds), len(pos_preds))) - wd = np.trapz(np.abs(cdf1 - cdf2), q) - - print(f"Wasserstein Distance --- {cdf_type} --- {wd:.6f}") diff --git a/video/fake-stormer/model_code/package_utils/misc.py b/video/fake-stormer/model_code/package_utils/misc.py deleted file mode 100644 index 2cf8addd71b82a0d60864af10a73536e2c4cf377..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/package_utils/misc.py +++ /dev/null @@ -1,74 +0,0 @@ -# -*- coding:utf-8 -*- -import torch -from torch._six import inf - - -class NativeScalerWithGradNormCount: - state_dict_key = "amp_scaler" - - def __init__(self): - self._scaler = torch.cuda.amp.GradScaler() - - def __call__( - self, - cfg, - loss, - optimizer, - clip_grad=None, - parameters=None, - create_graph=False, - update_grad=True, - step=0, - ): - self._scaler.scale(loss).backward(create_graph=create_graph) - - if update_grad: - if clip_grad is not None: - assert parameters is not None - self._scaler.unscale_( - optimizer - ) # unscale the gradients of optimizer's assigned params in-place - norm = torch.nn.utils.clip_grad_norm_(parameters, clip_grad) - else: - self._scaler.unscale_(optimizer) - norm = get_grad_norm_(parameters) - - if cfg.TRAIN.optimizer != "SAM": - self._scaler.step(optimizer) - else: - if step == 0: - optimizer.first_step(zero_grad=True) - else: - self._scaler = optimizer.second_step( - zero_grad=False, scaler=self._scaler - ) - self._scaler.update() - else: - norm = None - return norm - - def state_dict(self): - return self._scaler.state_dict() - - def load_state_dict(self, state_dict): - self._scaler.load_state_dict(state_dict) - - -def get_grad_norm_(parameters, norm_type: float = 2.0) -> torch.Tensor: - if isinstance(parameters, torch.Tensor): - parameters = [parameters] - parameters = [p for p in parameters if p.grad is not None] - norm_type = float(norm_type) - if len(parameters) == 0: - return torch.tensor(0.0) - device = parameters[0].grad.device - if norm_type == inf: - total_norm = max(p.grad.detach().abs().max().to(device) for p in parameters) - else: - total_norm = torch.norm( - torch.stack( - [torch.norm(p.grad.detach(), norm_type).to(device) for p in parameters] - ), - norm_type, - ) - return total_norm diff --git a/video/fake-stormer/model_code/package_utils/tensors.py b/video/fake-stormer/model_code/package_utils/tensors.py deleted file mode 100644 index 046344eca868ba6ee2da75bb6ef885ad1e728a91..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/package_utils/tensors.py +++ /dev/null @@ -1,93 +0,0 @@ -# -*- coding:utf-8 -*- -import cv2 -import numpy as np -import torch -import torch.nn.functional as F -from PIL import Image - - -def masked_inputs( - inputs: torch.tensor, - hm_preds: torch.tensor, - cfg: dict, - patch_size: int = 16, - prev_pos_mask: torch.tensor = None, - debug=False, - shot=0, - vid_ids=None, -): - """ - Masked out inputs given positions extracted from Heatmap_preds for multi-shot predictions. - args: - inputs of shape (B, 3, T, H, W) - hm of shape (B, 1, T, Hp, Wp) where Hp, Wp = H//patch_size, W//patch_size - """ - # Prepare positions to mask - batch_size = inputs.shape[0] - Hp, Wp = hm_preds.shape[-2:] - H, W = inputs.shape[-2:] - - hm_preds = hm_preds.reshape(batch_size, hm_preds.shape[1], hm_preds.shape[2], -1) - max_vals = hm_preds.max(axis=-1, keepdim=True)[0] - # pos_ = hm_preds.eq(max_vals).float()[:,:,0,:].unsqueeze(2).repeat(1,1,hm_preds.shape[2],1).unsqueeze(-1) #Take the first pos matrix - # pos_ = pos_.repeat(1,1,1,1,patch_size*patch_size).reshape(batch_size, pos_.shape[1], pos_.shape[2], H, W) - pos_ = ( - hm_preds.eq(max_vals) - .float() - .reshape(batch_size, hm_preds.shape[1], hm_preds.shape[2], Hp, Wp) - ) - pos_ = pos_[:, :, 1, :, :].unsqueeze(2).repeat(1, 1, hm_preds.shape[2], 1, 1) - pos_ = F.interpolate(pos_, size=(hm_preds.shape[2], H, W), mode="nearest") - - # Prepare values to fill up - hard_vals = torch.zeros((1, 1, 1, 1, 3), dtype=torch.float) - mean = torch.as_tensor(cfg.TRANSFORM.normalize.mean) - std = torch.as_tensor(cfg.TRANSFORM.normalize.std) - normalized_vals = hard_vals.sub_(mean).div_(std).to(dtype=torch.float).cuda() - - inputs_ = inputs.permute(0, 2, 3, 4, 1) - pos = pos_.permute(0, 2, 3, 4, 1) - - if prev_pos_mask is not None: - pos = torch.logical_or(pos, prev_pos_mask).int() - - outs = torch.where(pos.repeat(1, 1, 1, 1, 3).bool(), normalized_vals, inputs_) - inputs = outs.permute(0, 4, 1, 2, 3) - - if debug: - if vid_ids is not None: - vis_input_tensor(inputs[0], file_name=f"test_{vid_ids[0]}_{shot+1}.png") - else: - vis_input_tensor(inputs[0], file_name=f"test_{shot+1}.png") - - return inputs, pos - - -def vis_input_tensor(tensor, file_name, normalize=True): - """ - Visualize input tensor for debugging - args: - tensor of shape (3, H, W) or (3, T, H, W) - """ - assert tensor.ndim in [3, 4] - H, W = tensor.shape[-2:] - - if normalize: - tensor = tensor.clone() - min = float(tensor.min()) - max = float(tensor.max()) - tensor.add_(-min).div_(max - min + 1e-5) - - if tensor.ndim == 4: - depth = tensor.shape[1] - inputs = tensor.mul(255).clamp(0, 255).byte().permute(1, 2, 3, 0).cpu().numpy() - else: - inputs = tensor.mul(255).clamp(0, 255).byte().permute(1, 2, 0).cpu().numpy() - depth = 1 - - grid_image = np.zeros((H, depth * W, 3), dtype=np.uint8) - for i in range(depth): - image = inputs[i] - grid_image[0:H, i * W : (i + 1) * W, :] = image - - Image.fromarray(grid_image).save(file_name) diff --git a/video/fake-stormer/model_code/package_utils/transform.py b/video/fake-stormer/model_code/package_utils/transform.py deleted file mode 100644 index 76b44718c4bb5e1a648ff578e6448817be11c87d..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/package_utils/transform.py +++ /dev/null @@ -1,167 +0,0 @@ -# -*- coding: utf-8 -*- -from copy import deepcopy - -import albumentations as alb -import cv2 -import numpy as np -from torchvision import transforms - - -def get_dir(src_point, rot_rad): - sn, cs = np.sin(rot_rad), np.cos(rot_rad) - - src_result = [0, 0] - src_result[0] = src_point[0] * cs - src_point[1] * sn - src_result[1] = src_point[0] * sn + src_point[1] * cs - - return src_result - - -def get_3rd_point(a, b): - direct = a - b - return b + np.array([-direct[1], direct[0]], dtype=np.float32) - - -def get_affine_transform( - center, - scale, - rot, - output_size, - shift=np.array([0, 0], dtype=np.float32), - inv=0, - pixel_std=200, -): - if not isinstance(scale, np.ndarray) and not isinstance(scale, list): - print(scale) - scale = np.array([scale, scale]) - - scale_tmp = scale * pixel_std - src_w = scale_tmp[0] - dst_w = output_size[0] - dst_h = output_size[1] - - rot_rad = np.pi * rot / 180 - - src_dir = get_dir([0, (src_w - 1) * -0.5], rot_rad) - dst_dir = np.array([0, (dst_w - 1) * -0.5], np.float32) - src = np.zeros((3, 2), dtype=np.float32) - dst = np.zeros((3, 2), dtype=np.float32) - src[0, :] = center + scale_tmp * shift - src[1, :] = center + src_dir + scale_tmp * shift - dst[0, :] = [(dst_w - 1) * 0.5, (dst_h - 1) * 0.5] - dst[1, :] = np.array([(dst_w - 1) * 0.5, (dst_h - 1) * 0.5]) + dst_dir - - src[2:, :] = get_3rd_point(src[0, :], src[1, :]) - dst[2:, :] = get_3rd_point(dst[0, :], dst[1, :]) - - if inv: - trans = cv2.getAffineTransform(np.float32(dst), np.float32(src)) - else: - trans = cv2.getAffineTransform(np.float32(src), np.float32(dst)) - - return trans - - -def affine_transform(pt, t): - """ - This function apply the affine transform to each point given by an affine matrix - """ - new_pt = np.array([pt[0], pt[1], 1.0]).T - new_pt = np.dot(t, new_pt) - return new_pt[:2] - - -def get_center_scale(shape, aspect_ratio, pixel_std=200): - h, w = shape[0], shape[1] - center = np.zeros((2), dtype=np.float32) - center[0] = (shape[1] - 1) / 2 - center[1] = (shape[0] - 1) / 2 - - if w > h * aspect_ratio: - h = w * 1.0 / aspect_ratio - else: - w = h * 1.0 / aspect_ratio - scale = np.array([w * 1.0 / pixel_std, h * 1.0 / pixel_std], dtype=np.float32) - - return center, scale - - -def final_transform(_cfg): - return transforms.Compose( - [ - transforms.ToTensor(), - transforms.Normalize( - mean=_cfg.TRANSFORM.normalize.mean, - std=_cfg.TRANSFORM.normalize.std, - ), - ] - ) - - -def randaffine(img, mask, index=0, data_type="image", **kwargs): - assert data_type in ["image", "video"] - assert mask.ndim == 2 - - if data_type == "image": - f = alb.Affine( - translate_percent={"x": (-0.03, 0.03), "y": (-0.015, 0.015)}, - scale=[0.95, 1 / 0.95], - fit_output=False, - p=1, - ) - - g = alb.ElasticTransform(alpha=50, sigma=7, alpha_affine=0, p=1) - else: - f = alb.ReplayCompose( - [ - alb.Affine( - translate_percent={"x": (-0.03, 0.03), "y": (-0.015, 0.015)}, - scale=[0.95, 1 / 0.95], - fit_output=False, - p=1, - ) - ], - p=1, - ) - - g = alb.ReplayCompose( - [alb.ElasticTransform(alpha=50, sigma=7, alpha_affine=0, p=1)], p=1 - ) - - if index == 0 or data_type == "image": - data_f = f(image=img, mask=mask) - img = data_f["image"] - mask = data_f["mask"] - - data_g = g(image=img, mask=mask) - mask = data_g["mask"] - - if data_type == "image": - return img, mask, None - else: - f_replay_params = data_f["replay"] - g_replay_params = data_g["replay"] - return ( - img, - mask, - { - "f_replay_params": f_replay_params, - "g_replay_params": g_replay_params, - }, - ) - else: - f_replay_params = kwargs.get("f_replay_params") - g_replay_params = kwargs.get("g_replay_params") - assert f_replay_params is not None and g_replay_params is not None - - data_f = alb.ReplayCompose.replay(f_replay_params, image=img, mask=mask) - img = data_f["image"] - mask = data_f["mask"] - - data_g = alb.ReplayCompose.replay(g_replay_params, image=img, mask=mask) - mask = data_g["mask"] - return ( - img, - mask, - {"f_replay_params": f_replay_params, "g_replay_params": g_replay_params}, - ) diff --git a/video/fake-stormer/model_code/package_utils/utils.py b/video/fake-stormer/model_code/package_utils/utils.py deleted file mode 100644 index 637ac9452b89aa6074fd6ea46ae11e3940a50870..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/package_utils/utils.py +++ /dev/null @@ -1,267 +0,0 @@ -# -*- coding: utf-8 -*- -import logging -import os -from copy import deepcopy - -import cv2 -import numpy as np -import plotly.graph_objects as go -import simplejson as json -import torch -from losses.losses import _sigmoid - - -def file_extention(file_path): - f_name, f_extension = os.path.splitext(file_path) - return f_name, f_extension - - -def make_dir(dir_path): - if not os.path.exists(dir_path): - os.mkdir(dir_path) - - -def vis_heatmap(images, heatmaps, file_name, **kwargs): - temp_locs = kwargs.get("temp_loc_preds") - - # hm_h, hm_w = heatmaps.shape[1:] - hm_h, hm_w = np.array(images[0]).shape[:2] - - masked_image = np.zeros((hm_h, hm_w * heatmaps.shape[0], 3), dtype=np.uint8) - - for i in range(heatmaps.shape[0]): - heatmap = heatmaps[i] - heatmap = np.clip(heatmap * 255, 0, 255).astype(np.uint8) - heatmap = np.squeeze(heatmap) - - # heatmap_h = heatmap.shape[0] - # heatmap_w = heatmap.shape[1] - - if isinstance(images, list): - # resized_image = cv2.resize(np.array(images[i]), (int(heatmap_h), int(heatmap_w))) - heatmap = cv2.resize( - heatmap, np.array(images[i]).shape[:2], interpolation=cv2.INTER_LINEAR - ) - colored_heatmap = cv2.applyColorMap(heatmap, cv2.COLORMAP_JET) - masked_image[:, hm_w * i : hm_w * (i + 1), :] = ( - colored_heatmap * 0.7 + np.array(images[i]) * 0.3 - ) - else: - # resized_image = cv2.resize(images, (int(heatmap_h), int(heatmap_w))) - heatmap = cv2.resize( - heatmap, images.shape[:2], interpolation=cv2.INTER_LINEAR - ) - colored_heatmap = cv2.applyColorMap(heatmap, cv2.COLORMAP_JET) - masked_image[:, hm_w * i : hm_w * (i + 1), :] = ( - colored_heatmap * 0.7 + images * 0.3 - ) - - if temp_locs is not None: - font = cv2.FONT_HERSHEY_SIMPLEX - font_scale = 1 - color = (255, 255, 255) # White color in BGR - thickness = 2 - position = (20, 30) - - temp_loc = temp_locs[i] - text = f"{temp_loc:.5f}" - cv2.putText( - masked_image[:, hm_w * i : hm_w * (i + 1), :], - text, - position, - font, - font_scale, - color, - thickness, - ) - cv2.imwrite(file_name, masked_image) - - -def vis_3d_heatmap(heatmap, file_name): - # Define the dimensions of the cuboid - z_dim, y_dim, x_dim = heatmap.shape - - Z, Y, X = np.mgrid[:z_dim, :y_dim, :x_dim] - - fig = go.Figure( - data=go.Volume( - x=X.flatten(), - y=Y.flatten(), - z=Z.flatten(), - value=heatmap.flatten(), - isomin=0.0, - isomax=0.999, - opacity=0.1, - surface_count=25, - ) - ) - fig.update_layout( - scene_xaxis_showticklabels=False, - scene_yaxis_showticklabels=False, - scene_zaxis_showticklabels=False, - ) - fig.write_image(file_name) - - -def save_batch_heatmaps( - batch_image, batch_heatmaps, file_name, normalize=True, batch_cls=None -): - """ - batch_image: [batch_size, channel, height, width] - batch_heatmaps: ['batch_size, num_joints, height, width] - batch_cls: ['batch_size, num_joints, 1] - file_name: saved file name - """ - if normalize: - batch_image = batch_image.clone() - min = float(batch_image.min()) - max = float(batch_image.max()) - - batch_image.add_(-min).div_(max - min + 1e-5) - - batch_size = batch_heatmaps.size(0) - num_joints = batch_heatmaps.size(1) - heatmap_height = batch_heatmaps.size(2) - heatmap_width = batch_heatmaps.size(3) - - grid_image = np.zeros( - (batch_size * heatmap_height, (num_joints + 1) * heatmap_width, 3), - dtype=np.uint8, - ) - - for i in range(batch_size): - if batch_image.dim() == 4: - image = ( - batch_image[i] - .mul(255) - .clamp(0, 255) - .byte() - .permute(1, 2, 0) - .cpu() - .numpy() - ) - else: - image = ( - batch_image[i] - .mul(255) - .clamp(0, 255) - .byte() - .permute(1, 2, 3, 0) - .cpu() - .numpy() - ) - heatmaps = batch_heatmaps[i].mul(255).clamp(0, 255).byte().cpu().numpy() - - height_begin = heatmap_height * i - height_end = heatmap_height * (i + 1) - for j in range(num_joints): - if image.ndim == 4: - image = image[j, :, :, :] - - resized_image = cv2.resize(image, (int(heatmap_width), int(heatmap_height))) - - heatmap = heatmaps[j, :, :] - colored_heatmap = cv2.applyColorMap(heatmap, cv2.COLORMAP_JET) - - if batch_cls is not None: - cls = batch_cls[i][j].detach().cpu().numpy() - colored_heatmap = cv2.putText( - colored_heatmap, - f"Cls Pred: {cls}", - (heatmap_width * (j + 1) - 15, 10), - cv2.FONT_HERSHEY_SIMPLEX, - 1, - 1, - cv2.LINE_AA, - ) - masked_image = colored_heatmap * 0.7 + resized_image * 0.3 - - width_begin = heatmap_width * (j + 1) - width_end = heatmap_width * (j + 2) - - grid_image[height_begin:height_end, width_begin:width_end, :] = masked_image - - grid_image[height_begin:height_end, 0:heatmap_width, :] = resized_image - cv2.imwrite(file_name, grid_image) - - -def debugging_panel( - debug_cfg, - batch_image, - batch_heatmaps_gt, - batch_heatmaps_pred, - idx, - normalize=True, - batch_cls_gt=None, - batch_cls_pred=None, - split="train", -): - if debug_cfg.save_hm_gt: - save_batch_heatmaps( - batch_image, - batch_heatmaps_gt, - f"samples/{split}_debugs/hm_gt_{idx}.jpg", - normalize=normalize, - ) - - if debug_cfg.save_hm_pred: - batch_heatmaps_pred_ = _sigmoid(batch_heatmaps_pred.clone()) - save_batch_heatmaps( - batch_image, - batch_heatmaps_pred_, - f"samples/{split}_debugs/hm_pred_{idx}.jpg", - normalize=normalize, - ) - - -def save_file(data, file_path): - f_name, f_extention = file_extention(file_path) - - if f_extention == ".json": - with open(file_path, "w") as f: - json.dump(data, f) - print(f"Data has been saved to --- {file_path}") - else: - raise ValueError(f"{f_extention} is not supported now!") - - -def load_file(file_path): - f_name, f_extention = file_extention(file_path) - - if f_extention == ".json": - with open(file_path, "r") as f: - data = json.load(f) - print(f"Data has been loaded from --- {file_path}") - else: - raise ValueError(f"{f_extention} is not supported now!") - - return data - - -def draw_landmarks(image, landmarks): - """This function is to draw facial landmarks into transformed images""" - assert landmarks is not None, "Landmarks can not be None!" - - img_cp = deepcopy(image) - landmarks = landmarks.astype(int) - - for i, p in enumerate(landmarks): - img_cp = cv2.circle(img_cp, (p[0], p[1]), 2, (0, 255, 0), 1) - - return img_cp - - -def draw_most_vul_points(blended_mask): - """Detecting and Drawing the most vulnerable points for visualization purpose""" - b_mask_cp = deepcopy(blended_mask) - target_H, target_W, target_C = b_mask_cp.shape - - max_val = b_mask_cp[..., 0].max() - max_val = max_val if max_val > 0 else 1 - - m_v_indices = np.where(b_mask_cp == max_val) - - for j, i in zip(m_v_indices[0], m_v_indices[1]): - b_mask_cp[j, i] = (255, 0, 0) - - return b_mask_cp diff --git a/video/fake-stormer/model_code/register/misc.py b/video/fake-stormer/model_code/register/misc.py deleted file mode 100644 index 179c8a1bcbb078350cf84a3a170ab61fd174661d..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/register/misc.py +++ /dev/null @@ -1,359 +0,0 @@ -# -*- coding: utf-8 -*- -import collections.abc -import functools -import itertools -import subprocess -import warnings -from collections import abc -from importlib import import_module -from inspect import getfullargspec -from itertools import repeat - - -# From PyTorch internals -def _ntuple(n): - - def parse(x): - if isinstance(x, collections.abc.Iterable): - return x - return tuple(repeat(x, n)) - - return parse - - -to_1tuple = _ntuple(1) -to_2tuple = _ntuple(2) -to_3tuple = _ntuple(3) -to_4tuple = _ntuple(4) -to_ntuple = _ntuple - - -def is_str(x): - """Whether the input is an string instance. - Note: This method is deprecated since python 2 is no longer supported. - """ - return isinstance(x, str) - - -def import_modules_from_strings(imports, allow_failed_imports=False): - """Import modules from the given list of strings. - Args: - imports (list | str | None): The given module names to be imported. - allow_failed_imports (bool): If True, the failed imports will return - None. Otherwise, an ImportError is raise. Default: False. - Returns: - list[module] | module | None: The imported modules. - Examples: - >>> osp, sys = import_modules_from_strings( - ... ['os.path', 'sys']) - >>> import os.path as osp_ - >>> import sys as sys_ - >>> assert osp == osp_ - >>> assert sys == sys_ - """ - if not imports: - return - single_import = False - if isinstance(imports, str): - single_import = True - imports = [imports] - if not isinstance(imports, list): - raise TypeError(f"custom_imports must be a list but got type {type(imports)}") - imported = [] - for imp in imports: - if not isinstance(imp, str): - raise TypeError(f"{imp} is of type {type(imp)} and cannot be imported.") - try: - imported_tmp = import_module(imp) - except ImportError: - if allow_failed_imports: - warnings.warn(f"{imp} failed to import and is ignored.", UserWarning) - imported_tmp = None - else: - raise ImportError - imported.append(imported_tmp) - if single_import: - imported = imported[0] - return imported - - -def iter_cast(inputs, dst_type, return_type=None): - """Cast elements of an iterable object into some type. - Args: - inputs (Iterable): The input object. - dst_type (type): Destination type. - return_type (type, optional): If specified, the output object will be - converted to this type, otherwise an iterator. - Returns: - iterator or specified type: The converted object. - """ - if not isinstance(inputs, abc.Iterable): - raise TypeError("inputs must be an iterable object") - if not isinstance(dst_type, type): - raise TypeError('"dst_type" must be a valid type') - - out_iterable = map(dst_type, inputs) - - if return_type is None: - return out_iterable - else: - return return_type(out_iterable) - - -def list_cast(inputs, dst_type): - """Cast elements of an iterable object into a list of some type. - A partial method of :func:`iter_cast`. - """ - return iter_cast(inputs, dst_type, return_type=list) - - -def tuple_cast(inputs, dst_type): - """Cast elements of an iterable object into a tuple of some type. - A partial method of :func:`iter_cast`. - """ - return iter_cast(inputs, dst_type, return_type=tuple) - - -def is_seq_of(seq, expected_type, seq_type=None): - """Check whether it is a sequence of some type. - Args: - seq (Sequence): The sequence to be checked. - expected_type (type): Expected type of sequence items. - seq_type (type, optional): Expected sequence type. - Returns: - bool: Whether the sequence is valid. - """ - if seq_type is None: - exp_seq_type = abc.Sequence - else: - assert isinstance(seq_type, type) - exp_seq_type = seq_type - if not isinstance(seq, exp_seq_type): - return False - for item in seq: - if not isinstance(item, expected_type): - return False - return True - - -def is_list_of(seq, expected_type): - """Check whether it is a list of some type. - A partial method of :func:`is_seq_of`. - """ - return is_seq_of(seq, expected_type, seq_type=list) - - -def is_tuple_of(seq, expected_type): - """Check whether it is a tuple of some type. - A partial method of :func:`is_seq_of`. - """ - return is_seq_of(seq, expected_type, seq_type=tuple) - - -def slice_list(in_list, lens): - """Slice a list into several sub lists by a list of given length. - Args: - in_list (list): The list to be sliced. - lens(int or list): The expected length of each out list. - Returns: - list: A list of sliced list. - """ - if isinstance(lens, int): - assert len(in_list) % lens == 0 - lens = [lens] * int(len(in_list) / lens) - if not isinstance(lens, list): - raise TypeError('"indices" must be an integer or a list of integers') - elif sum(lens) != len(in_list): - raise ValueError( - "sum of lens and list length does not " - f"match: {sum(lens)} != {len(in_list)}" - ) - out_list = [] - idx = 0 - for i in range(len(lens)): - out_list.append(in_list[idx : idx + lens[i]]) - idx += lens[i] - return out_list - - -def concat_list(in_list): - """Concatenate a list of list into a single list. - Args: - in_list (list): The list of list to be merged. - Returns: - list: The concatenated flat list. - """ - return list(itertools.chain(*in_list)) - - -def check_prerequisites( - prerequisites, - checker, - msg_tmpl='Prerequisites "{}" are required in method "{}" but not ' - "found, please install them first.", -): # yapf: disable - """A decorator factory to check if prerequisites are satisfied. - Args: - prerequisites (str of list[str]): Prerequisites to be checked. - checker (callable): The checker method that returns True if a - prerequisite is meet, False otherwise. - msg_tmpl (str): The message template with two variables. - Returns: - decorator: A specific decorator. - """ - - def wrap(func): - - @functools.wraps(func) - def wrapped_func(*args, **kwargs): - requirements = ( - [prerequisites] if isinstance(prerequisites, str) else prerequisites - ) - missing = [] - for item in requirements: - if not checker(item): - missing.append(item) - if missing: - print(msg_tmpl.format(", ".join(missing), func.__name__)) - raise RuntimeError("Prerequisites not meet.") - else: - return func(*args, **kwargs) - - return wrapped_func - - return wrap - - -def _check_py_package(package): - try: - import_module(package) - except ImportError: - return False - else: - return True - - -def _check_executable(cmd): - if subprocess.call(f"which {cmd}", shell=True) != 0: - return False - else: - return True - - -def requires_package(prerequisites): - """A decorator to check if some python packages are installed. - Example: - >>> @requires_package('numpy') - >>> func(arg1, args): - >>> return numpy.zeros(1) - array([0.]) - >>> @requires_package(['numpy', 'non_package']) - >>> func(arg1, args): - >>> return numpy.zeros(1) - ImportError - """ - return check_prerequisites(prerequisites, checker=_check_py_package) - - -def requires_executable(prerequisites): - """A decorator to check if some executable files are installed. - Example: - >>> @requires_executable('ffmpeg') - >>> func(arg1, args): - >>> print(1) - 1 - """ - return check_prerequisites(prerequisites, checker=_check_executable) - - -def deprecated_api_warning(name_dict, cls_name=None): - """A decorator to check if some arguments are deprecate and try to replace - deprecate src_arg_name to dst_arg_name. - Args: - name_dict(dict): - key (str): Deprecate argument names. - val (str): Expected argument names. - Returns: - func: New function. - """ - - def api_warning_wrapper(old_func): - - @functools.wraps(old_func) - def new_func(*args, **kwargs): - # get the arg spec of the decorated method - args_info = getfullargspec(old_func) - # get name of the function - func_name = old_func.__name__ - if cls_name is not None: - func_name = f"{cls_name}.{func_name}" - if args: - arg_names = args_info.args[: len(args)] - for src_arg_name, dst_arg_name in name_dict.items(): - if src_arg_name in arg_names: - warnings.warn( - f'"{src_arg_name}" is deprecated in ' - f'`{func_name}`, please use "{dst_arg_name}" ' - "instead", - DeprecationWarning, - ) - arg_names[arg_names.index(src_arg_name)] = dst_arg_name - if kwargs: - for src_arg_name, dst_arg_name in name_dict.items(): - if src_arg_name in kwargs: - - assert dst_arg_name not in kwargs, ( - f"The expected behavior is to replace " - f"the deprecated key `{src_arg_name}` to " - f"new key `{dst_arg_name}`, but got them " - f"in the arguments at the same time, which " - f"is confusing. `{src_arg_name} will be " - f"deprecated in the future, please " - f"use `{dst_arg_name}` instead." - ) - - warnings.warn( - f'"{src_arg_name}" is deprecated in ' - f'`{func_name}`, please use "{dst_arg_name}" ' - "instead", - DeprecationWarning, - ) - kwargs[dst_arg_name] = kwargs.pop(src_arg_name) - - # apply converted arguments to the decorated method - output = old_func(*args, **kwargs) - return output - - return new_func - - return api_warning_wrapper - - -def is_method_overridden(method, base_class, derived_class): - """Check if a method of base class is overridden in derived class. - Args: - method (str): the method name to check. - base_class (type): the class of the base class. - derived_class (type | Any): the class or instance of the derived class. - """ - assert isinstance( - base_class, type - ), "base_class doesn't accept instance, Please pass class instead." - - if not isinstance(derived_class, type): - derived_class = derived_class.__class__ - - base_method = getattr(base_class, method) - derived_method = getattr(derived_class, method) - return derived_method != base_method - - -def has_method(obj: object, method: str) -> bool: - """Check whether the object has a method. - Args: - method (str): The method name to check. - obj (object): The object to check. - Returns: - bool: True if the object has the method else False. - """ - return hasattr(obj, method) and callable(getattr(obj, method)) diff --git a/video/fake-stormer/model_code/register/register.py b/video/fake-stormer/model_code/register/register.py deleted file mode 100644 index e3d934f7309e3d3a22c3616804707a0e90cf2f9c..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/register/register.py +++ /dev/null @@ -1,323 +0,0 @@ -# -*- coding: utf-8 -*- -import inspect -import warnings -from functools import partial -from typing import Any, Dict, Optional - -from .misc import deprecated_api_warning, is_seq_of - - -def build_from_cfg( - cfg: Dict, registry: "Registry", default_args: Optional[Dict] = None -) -> Any: - """Build a module from config dict when it is a class configuration, or - call a function from config dict when it is a function configuration. - Example: - >>> MODELS = Registry('models') - >>> @MODELS.register_module() - >>> class ResNet: - >>> pass - >>> resnet = build_from_cfg(dict(type='Resnet'), MODELS) - >>> # Returns an instantiated object - >>> @MODELS.register_module() - >>> def resnet50(): - >>> pass - >>> resnet = build_from_cfg(dict(type='resnet50'), MODELS) - >>> # Return a result of the calling function - Args: - cfg (dict): Config dict. It should at least contain the key "type". - registry (:obj:`Registry`): The registry to search the type from. - default_args (dict, optional): Default initialization arguments. - Returns: - object: The constructed object. - """ - if not isinstance(cfg, dict): - raise TypeError(f"cfg must be a dict, but got {type(cfg)}") - if "type" not in cfg: - if default_args is None or "type" not in default_args: - raise KeyError( - '`cfg` or `default_args` must contain the key "type", ' - f"but got {cfg}\n{default_args}" - ) - if not isinstance(registry, Registry): - raise TypeError( - "registry must be an mmcv.Registry object, " f"but got {type(registry)}" - ) - if not (isinstance(default_args, dict) or default_args is None): - raise TypeError( - "default_args must be a dict or None, " f"but got {type(default_args)}" - ) - - args = cfg.copy() - - if default_args is not None: - for name, value in default_args.items(): - args.setdefault(name, value) - - obj_type = args.pop("type") - if isinstance(obj_type, str): - obj_cls = registry.get(obj_type) - if obj_cls is None: - raise KeyError(f"{obj_type} is not in the {registry.name} registry") - elif inspect.isclass(obj_type) or inspect.isfunction(obj_type): - obj_cls = obj_type - else: - raise TypeError(f"type must be a str or valid type, but got {type(obj_type)}") - try: - return obj_cls(**args) - except Exception as e: - # Normal TypeError does not print class name. - raise type(e)(f"{obj_cls.__name__}: {e}") - - -class Registry: - """A registry to map strings to classes or functions. - Registered object could be built from registry. Meanwhile, registered - functions could be called from registry. - Example: - >>> MODELS = Registry('models') - >>> @MODELS.register_module() - >>> class ResNet: - >>> pass - >>> resnet = MODELS.build(dict(type='ResNet')) - >>> @MODELS.register_module() - >>> def resnet50(): - >>> pass - >>> resnet = MODELS.build(dict(type='resnet50')) - Please refer to - https://mmcv.readthedocs.io/en/latest/understand_mmcv/registry.html for - advanced usage. - Args: - name (str): Registry name. - build_func(func, optional): Build function to construct instance from - Registry, func:`build_from_cfg` is used if neither ``parent`` or - ``build_func`` is specified. If ``parent`` is specified and - ``build_func`` is not given, ``build_func`` will be inherited - from ``parent``. Default: None. - parent (Registry, optional): Parent registry. The class registered in - children registry could be built from parent. Default: None. - scope (str, optional): The scope of registry. It is the key to search - for children registry. If not specified, scope will be the name of - the package where class is defined, e.g. mmdet, mmcls, mmseg. - Default: None. - """ - - def __init__(self, name, build_func=None, parent=None, scope=None): - self._name = name - self._module_dict = dict() - self._children = dict() - self._scope = self.infer_scope() if scope is None else scope - - # self.build_func will be set with the following priority: - # 1. build_func - # 2. parent.build_func - # 3. build_from_cfg - if build_func is None: - if parent is not None: - self.build_func = parent.build_func - else: - self.build_func = build_from_cfg - else: - self.build_func = build_func - if parent is not None: - assert isinstance(parent, Registry) - parent._add_children(self) - self.parent = parent - else: - self.parent = None - - def __len__(self): - return len(self._module_dict) - - def __contains__(self, key): - return self.get(key) is not None - - def __repr__(self): - format_str = ( - self.__class__.__name__ + f"(name={self._name}, " - f"items={self._module_dict})" - ) - return format_str - - @staticmethod - def infer_scope(): - """Infer the scope of registry. - The name of the package where registry is defined will be returned. - Example: - >>> # in mmdet/models/backbone/resnet.py - >>> MODELS = Registry('models') - >>> @MODELS.register_module() - >>> class ResNet: - >>> pass - The scope of ``ResNet`` will be ``mmdet``. - Returns: - str: The inferred scope name. - """ - # We access the caller using inspect.currentframe() instead of - # inspect.stack() for performance reasons. See details in PR #1844 - frame = inspect.currentframe() - # get the frame where `infer_scope()` is called - infer_scope_caller = frame.f_back.f_back - filename = inspect.getmodule(infer_scope_caller).__name__ - split_filename = filename.split(".") - return split_filename[0] - - @staticmethod - def split_scope_key(key): - """Split scope and key. - The first scope will be split from key. - Examples: - >>> Registry.split_scope_key('mmdet.ResNet') - 'mmdet', 'ResNet' - >>> Registry.split_scope_key('ResNet') - None, 'ResNet' - Return: - tuple[str | None, str]: The former element is the first scope of - the key, which can be ``None``. The latter is the remaining key. - """ - split_index = key.find(".") - if split_index != -1: - return key[:split_index], key[split_index + 1 :] - else: - return None, key - - @property - def name(self): - return self._name - - @property - def scope(self): - return self._scope - - @property - def module_dict(self): - return self._module_dict - - @property - def children(self): - return self._children - - def get(self, key): - """Get the registry record. - Args: - key (str): The class name in string format. - Returns: - class: The corresponding class. - """ - scope, real_key = self.split_scope_key(key) - if scope is None or scope == self._scope: - # get from self - if real_key in self._module_dict: - return self._module_dict[real_key] - else: - # get from self._children - if scope in self._children: - return self._children[scope].get(real_key) - else: - # goto root - parent = self.parent - while parent.parent is not None: - parent = parent.parent - return parent.get(key) - - def build(self, *args, **kwargs): - return self.build_func(*args, **kwargs, registry=self) - - def _add_children(self, registry): - """Add children for a registry. - The ``registry`` will be added as children based on its scope. - The parent registry could build objects from children registry. - Example: - >>> models = Registry('models') - >>> mmdet_models = Registry('models', parent=models) - >>> @mmdet_models.register_module() - >>> class ResNet: - >>> pass - >>> resnet = models.build(dict(type='mmdet.ResNet')) - """ - - assert isinstance(registry, Registry) - assert registry.scope is not None - assert ( - registry.scope not in self.children - ), f"scope {registry.scope} exists in {self.name} registry" - self.children[registry.scope] = registry - - @deprecated_api_warning(name_dict=dict(module_class="module")) - def _register_module(self, module, module_name=None, force=False): - if not inspect.isclass(module) and not inspect.isfunction(module): - raise TypeError( - "module must be a class or a function, " f"but got {type(module)}" - ) - - if module_name is None: - module_name = module.__name__ - if isinstance(module_name, str): - module_name = [module_name] - for name in module_name: - if not force and name in self._module_dict: - raise KeyError(f"{name} is already registered " f"in {self.name}") - self._module_dict[name] = module - - def deprecated_register_module(self, cls=None, force=False): - warnings.warn( - "The old API of register_module(module, force=False) " - "is deprecated and will be removed, please use the new API " - "register_module(name=None, force=False, module=None) instead.", - DeprecationWarning, - ) - if cls is None: - return partial(self.deprecated_register_module, force=force) - self._register_module(cls, force=force) - return cls - - def register_module(self, name=None, force=False, module=None): - """Register a module. - A record will be added to `self._module_dict`, whose key is the class - name or the specified name, and value is the class itself. - It can be used as a decorator or a normal function. - Example: - >>> backbones = Registry('backbone') - >>> @backbones.register_module() - >>> class ResNet: - >>> pass - >>> backbones = Registry('backbone') - >>> @backbones.register_module(name='mnet') - >>> class MobileNet: - >>> pass - >>> backbones = Registry('backbone') - >>> class ResNet: - >>> pass - >>> backbones.register_module(ResNet) - Args: - name (str | None): The module name to be registered. If not - specified, the class name will be used. - force (bool, optional): Whether to override an existing class with - the same name. Default: False. - module (type): Module class or function to be registered. - """ - if not isinstance(force, bool): - raise TypeError(f"force must be a boolean, but got {type(force)}") - # NOTE: This is a walkaround to be compatible with the old api, - # while it may introduce unexpected bugs. - if isinstance(name, type): - return self.deprecated_register_module(name, force=force) - - # raise the error ahead of time - if not (name is None or isinstance(name, str) or is_seq_of(name, str)): - raise TypeError( - "name must be either of None, an instance of str or a sequence" - f" of str, but got {type(name)}" - ) - - # use it as a normal method: x.register_module(module=SomeClass) - if module is not None: - self._register_module(module=module, module_name=name, force=force) - return module - - # use it as a decorator: @x.register_module() - def _register(module): - self._register_module(module=module, module_name=name, force=force) - return module - - return _register diff --git a/video/fake-stormer/model_code/scripts/efn_sbi.sh b/video/fake-stormer/model_code/scripts/efn_sbi.sh deleted file mode 100644 index 4dabcee388cf55154799f3fe51a624df0fa62bbc..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/scripts/efn_sbi.sh +++ /dev/null @@ -1,3 +0,0 @@ -#! /bin/bash - -CUDA_VISIBLE_DEVICES=0 python scripts/train.py --cfg configs/spatial/efn4_fpn_sbi_adv.yaml diff --git a/video/fake-stormer/model_code/scripts/fakesformer_sbi.sh b/video/fake-stormer/model_code/scripts/fakesformer_sbi.sh deleted file mode 100644 index fe62bbe2b49973e65e530eb01ddf04d9a21346e6..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/scripts/fakesformer_sbi.sh +++ /dev/null @@ -1,8 +0,0 @@ -#! /bin/bash - -# CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/train.py --cfg configs/temporal/FakeSFormer_base_c23.yaml -CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/train.py --cfg configs/temporal/FakeSFormer_base_c0.yaml -# CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/train.py --cfg configs/temporal/FakeSFormer_base_c40.yaml -# CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/train.py --cfg configs/temporal/FakeSFormer_large_c23.yaml -# CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/train.py --cfg configs/temporal/FakeSwin3D_base_c23.yaml -# CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/train.py --cfg configs/temporal/FakeSFormer_base_c23_224p8.yaml diff --git a/video/fake-stormer/model_code/scripts/laanet_temporal.sh b/video/fake-stormer/model_code/scripts/laanet_temporal.sh deleted file mode 100644 index a867e6f9c088b190c823ada306dd4c009a35b05f..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/scripts/laanet_temporal.sh +++ /dev/null @@ -1,5 +0,0 @@ -#! /bin/bash - -CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/train.py --cfg configs/temporal/ResNet3D_EFPN3D_hm3D_c23.yaml -# CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/train.py --cfg configs/temporal/FakeSwin3D_base_c23.yaml -# CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/train.py --cfg configs/temporal/FakeSwin3D_base_c0.yaml diff --git a/video/fake-stormer/model_code/scripts/swin_bi.sh b/video/fake-stormer/model_code/scripts/swin_bi.sh deleted file mode 100644 index 253b2ef1a09315cb71c8d31a8c7fc93c7ae72027..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/scripts/swin_bi.sh +++ /dev/null @@ -1,5 +0,0 @@ -#! /bin/bash - -# CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/train.py --cfg configs/spatial/swin_sbi_base.yaml -CUDA_VISIBLE_DEVICES=0 python scripts/train.py --cfg configs/spatial/swin_bi_small.yaml -# CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/train.py --cfg configs/spatial/swin_sbi_tiny.yaml diff --git a/video/fake-stormer/model_code/scripts/swin_sbi.sh b/video/fake-stormer/model_code/scripts/swin_sbi.sh deleted file mode 100644 index 96331da07787a28fb043536ef4aa09c3e8aa5bcf..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/scripts/swin_sbi.sh +++ /dev/null @@ -1,5 +0,0 @@ -#! /bin/bash - -# CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/train.py --cfg configs/spatial/swin_sbi_base.yaml -CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/train.py --cfg configs/spatial/swin_sbi_small.yaml -# CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/train.py --cfg configs/spatial/swin_sbi_tiny.yaml diff --git a/video/fake-stormer/model_code/scripts/test.py b/video/fake-stormer/model_code/scripts/test.py deleted file mode 100644 index 3bed76c022f1b0379e47c8d3c7cd6b54dafc2d41..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/scripts/test.py +++ /dev/null @@ -1,411 +0,0 @@ -# -*- coding: utf-8 -*- -import argparse -import os -import sys -import time - -if not os.getcwd() in sys.path: - sys.path.append(os.getcwd()) -import math -import random -from glob import glob - -import cv2 -import numpy as np -import torch -import torch.nn as nn -import torch.nn.functional as F -from configs.get_config import load_config -from datasets import DATASETS, build_dataset -from lib.core_function import AverageMeter -from lib.metrics import bin_calculate_auc_ap_ar, get_acc_mesure_func -from logs.logger import LOG_DIR, Logger -from losses.losses import _sigmoid -from models import * -from natsort import natsorted -from package_utils.image_utils import crop_by_margin, load_image -from package_utils.tensors import masked_inputs -from package_utils.transform import ( - final_transform, - get_affine_transform, - get_center_scale, -) -from package_utils.utils import save_file, vis_heatmap -from PIL import Image -from torch.utils.data import DataLoader -from tqdm import tqdm - - -def parse_args(args=None): - arg_parser = argparse.ArgumentParser("Processing testing...") - arg_parser.add_argument("--cfg", "-c", help="Config file", required=True) - arg_parser.add_argument( - "--image", "-i", type=str, help="Image for the single testing mode!" - ) - arg_parser.add_argument( - "--video", "-v", type=str, help="Video for the single testing mode!" - ) - args = arg_parser.parse_args(args) - - return args - - -if __name__ == "__main__": - if sys.argv[1:] is not None: - args = sys.argv[1:] - else: - args = sys.argv[:-1] - args = parse_args(args) - - # Loading config file - cfg = load_config(args.cfg) - logger = Logger(task="testing") - - # Seed - seed = cfg.SEED - random.seed(seed) - torch.manual_seed(seed) - np.random.seed(seed) - torch.cuda.manual_seed(seed) - - task = cfg.TEST.subtask - flip_test = cfg.TEST.flip_test - logger.info("Flip Test is used --- {}".format(flip_test)) - - save_preds = cfg.TEST.save_preds - pred_file = cfg.TEST.pred_file - - if task == "test_img": - assert ( - args.image is not None - ), "Image can not be None with single image test mode!" - logger.info("Turning on single image test mode...") - if task == "test_vid": - assert ( - args.video is not None - ), "Video can not be None with single video test mode!" - assert os.path.exists( - args.video - ), "Video path must be valid, please check the path again!" - logger.info("Turning on single video test mode...") - else: - logger.info("Turning on evaluation mode...") - if task == "eval" and cfg.DATASET.DATA.TEST.FROM_FILE: - assert ( - cfg.DATASET.DATA.TEST.ANNO_FILE is not None - ), "Annotation file can not be None with evaluation test mode!" - assert len( - cfg.DATASET.DATA.TEST.ANNO_FILE - ), "Annotation file can not be empty with evaluation test mode!" - # assert os.access(cfg.DATASET.DATA.TEST.ANNO_FILE, os.R_OK), "Annotation file must be valid with evaluation test mode!" - device_count = torch.cuda.device_count() - - # build and load/initiate pretrained model - model = build_model(cfg.MODEL, MODELS).to(torch.float) - logger.info("Loading weight ... {}".format(cfg.TEST.pretrained)) - model = load_pretrained(model, cfg.TEST.pretrained) - - if device_count >= 1: - model = nn.DataParallel(model, device_ids=cfg.TEST.gpus).cuda() - else: - model = model.cuda() - - # Define essential variables - image = args.image - vid = args.video - test_file = cfg.TEST.test_file - video_level = cfg.TEST.video_level - aspect_ratio = cfg.DATASET.IMAGE_SIZE[1] * 1.0 / cfg.DATASET.IMAGE_SIZE[0] - pixel_std = 200 - rot = 0 - transforms = final_transform(cfg.DATASET) - metrics_base = cfg.METRICS_BASE - acc_measure = get_acc_mesure_func(metrics_base) - no_shot_preds = cfg.TEST.no_shot_preds or 1 - - model.eval() - if image is not None and task == "test_img": - img = load_image(image) - img = cv2.resize(img, (317, 317)) - img = img[18 : (317 - 18), 18 : (317 - 18), :] - c, s = get_center_scale(img.shape[:2], aspect_ratio, pixel_std) - trans = get_affine_transform(c, s, rot, cfg.DATASET.IMAGE_SIZE) - input = cv2.warpAffine( - img, - trans, - (int(cfg.DATASET.IMAGE_SIZE[0]), int(cfg.DATASET.IMAGE_SIZE[1])), - flags=cv2.INTER_LINEAR, - ) - with torch.no_grad(): - st = time.time() - img_trans = transforms(input / 255).to(torch.float) - img_trans = torch.unsqueeze(img_trans, 0) - if device_count > 0: - img_trans = img_trans.cuda(non_blocking=True) - - outputs = model(img_trans) - hm_outputs = outputs[0]["hm"] - cls_outputs = outputs[0]["cls"].sigmoid() - hm_preds = _sigmoid(hm_outputs).cpu().numpy() - if cfg.TEST.vis_hm: - print(f"Heatmap max value --- {hm_preds.max()}") - vis_heatmap(img, hm_preds[0], "output_pred.jpg") - label_pred = cls_outputs.cpu().numpy() - label = "Fake" if label_pred[0][-1] > cfg.TEST.threshold else "Real" - logger.info("Inferencing time --- {}".format(time.time() - st)) - logger.info("{} --- {}".format(label, label_pred[0][-1])) - logger.info("-----------------***--------------------") - if vid is not None and task == "test_vid": - print(vid) - img_list = [] - n_frames = cfg.DATASET.DATA.SAMPLES_PER_VIDEO.NUM_FRAMES - assert n_frames is not None, "Number of video frames can not be None!" - # Load first n_frames inside the video - img_paths = glob(f"{args.video}/*.png") - img_paths = natsorted(img_paths) # correct the order of image paths - img_paths = img_paths[:n_frames] - for img_path in img_paths: - img = Image.open(img_path) - H, W = img.size - img = img.crop((15, 15, W - 15, H - 15)) - img_list.append(img) - - # Transform images - transformed_imgs = torch.tensor([]).cuda() - for _i in img_list: - img_resize = _i.resize( - (int(cfg.DATASET.IMAGE_SIZE[0]), int(cfg.DATASET.IMAGE_SIZE[1])) - ) - img_resize = np.array(img_resize) / 255 - img_tensor = transforms(img_resize).to(torch.float) - if device_count > 0: - img_tensor = img_tensor.cuda(non_blocking=True) - transformed_imgs = torch.cat((transformed_imgs, img_tensor.unsqueeze(0)), 0) - - with torch.no_grad(): - st = time.time() - transformed_imgs = transformed_imgs.transpose(0, 1).unsqueeze(0) - outputs = model(transformed_imgs) - - hm_outputs = outputs[0]["hm"] - cls_outputs = outputs[0]["cls"].sigmoid() - temp_loc_outputs = outputs[0]["temp_loc"].sigmoid() - temp_loc_preds = temp_loc_outputs.cpu().numpy() - hm_preds = _sigmoid(hm_outputs).cpu().numpy() - - if cfg.TEST.vis_hm: - print(f"Heatmap max value --- {hm_preds.max()}") - print(f"Heatmap min value --- {hm_preds.min()}") - vis_heatmap( - img_list, - hm_preds[0], - "output_pred.jpg", - temp_loc_preds=temp_loc_preds[0], - ) - - label = "Fake" if temp_loc_preds[0][-1] > cfg.TEST.threshold else "Real" - logger.info("Inferencing time --- {}".format(time.time() - st)) - logger.info("{} --- {}".format(label, temp_loc_preds[0])) - logger.info("-----------------***--------------------") - if task == "eval": - logger.info(f"Using metric-base {metrics_base} for evaluation!") - logger.info(f"Video level evaluation mode: {video_level}") - st = time.time() - test_dataset = build_dataset( - cfg.DATASET, DATASETS, default_args=dict(split="test", config=cfg.DATASET) - ) - test_dataloader = DataLoader( - test_dataset, - batch_size=cfg.TRAIN.batch_size * len(cfg.TRAIN.gpus), - shuffle=True, - num_workers=cfg.DATASET.NUM_WORKERS, - ) - logger.info("Dataset loading time --- {}".format(time.time() - st)) - - apr = cfg.TEST.apr - test_dataloader = tqdm(test_dataloader, dynamic_ncols=True) - with torch.no_grad(): - # Make sure all tensors in same device - total_preds = torch.tensor([]).cuda().to(dtype=torch.float) - total_labels = torch.tensor([]).cuda().to(dtype=torch.float) - vid_preds = {} - vid_labels = {} - - # Achieving frame-level predictions to save into file - pred_meta = {} - - for b, (inputs, labels, meta) in enumerate(test_dataloader): - i_st = time.time() - prev_pos_mask = None - prev_hm_preds = None - b_vid_ids = [vid for vid in meta["vid_id"]] - - if "img_path" in meta.keys(): - b_data_paths = [ip for ip in meta["img_path"]] - elif "vid_path" in meta.keys(): - b_data_paths = [ip for ip in meta["vid_path"]] - else: - if save_preds: - raise ValueError("There is no img or vid data for saving!") - - if device_count > 0: - inputs = inputs.to(dtype=torch.float).cuda() - labels = labels.to(dtype=torch.float).cuda() - - for i_shot in range(no_shot_preds): # multi-shot predictions - logger.info(f"Running the {i_shot} shot of predictions") - if i_shot > 0: - new_inputs, pos_mask = masked_inputs( - inputs=inputs, - hm_preds=prev_hm_preds, - prev_pos_mask=prev_pos_mask, - cfg=cfg.DATASET, - patch_size=16, - shot=i_shot, - debug=False, - vid_ids=b_vid_ids, - ) - outputs = model(new_inputs) - prev_pos_mask = pos_mask - else: - outputs = model(inputs) - - # Applying Flip test - if flip_test: - if inputs.dim() == 4: - outputs_1 = model(inputs.flip(dims=(3,))) - else: - outputs_1 = model(inputs.flip(dims=(4,))) - - if isinstance(outputs, list): - outputs = outputs[0] - if flip_test: - outputs_1 = outputs_1[0] - - # In case outputs contain a dict key - if isinstance(outputs, dict): - if flip_test: - hm_outputs = ( - (outputs["hm"] + outputs_1["hm"]) / 2 - if "hm" in outputs.keys() - else None - ) - cls_outputs = (outputs["cls"] + outputs_1["cls"]) / 2 - outputs_temp_loc = ( - (outputs["temp_loc"] + outputs_1["temp_loc"]) / 2 - if "temp_loc" in outputs.keys() - else None - ) - else: - hm_outputs = ( - outputs["hm"] if "hm" in outputs.keys() else None - ) - cls_outputs = outputs["cls"] - outputs_temp_loc = ( - outputs["temp_loc"] - if "temp_loc" in outputs.keys() - else None - ) - prev_hm_preds = hm_outputs - logger.info("Inferencing time --- {}".format(time.time() - st)) - - # Grisping data item - for b_i in range(len(b_data_paths)): - if b_data_paths[b_i] not in pred_meta.keys(): - pred_meta[b_data_paths[b_i]] = list( - ( - cls_outputs[b_i].clone().detach().item(), - labels[b_i].clone().detach().item(), - ) - ) - else: - pred_meta[b_data_paths[b_i]].extend( - list( - ( - cls_outputs[b_i].clone().detach().item(), - labels[b_i].clone().detach().item(), - ) - ) - ) - - if i_shot == (no_shot_preds - 1): - if not video_level: - total_preds = torch.cat((total_preds, cls_outputs), 0) - total_labels = torch.cat((total_labels, labels), 0) - else: - for idx, vid_id in enumerate(b_vid_ids): - if vid_id in vid_preds.keys(): - vid_preds[vid_id] = torch.cat( - ( - vid_preds[vid_id], - torch.unsqueeze(cls_outputs[idx], 0), - ), - 0, - ) - else: - vid_preds[vid_id] = ( - torch.unsqueeze( - cls_outputs[idx].clone().detach(), 0 - ) - .cuda() - .to(dtype=torch.float) - ) - vid_labels[vid_id] = ( - torch.unsqueeze(labels[idx].clone().detach(), 0) - .cuda() - .to(dtype=torch.float) - ) - - if video_level: - for k in vid_preds.keys(): - total_preds = torch.cat( - (total_preds, torch.mean(vid_preds[k], 0, keepdim=True)), 0 - ) - total_labels = torch.cat((total_labels, vid_labels[k]), 0) - - acc_ = acc_measure( - total_preds, - targets=None, - labels=total_labels, - threshold=cfg.TEST.threshold, - ) - metrics = bin_calculate_auc_ap_ar( - total_preds, - total_labels, - metrics_base=metrics_base, - threshold=cfg.TEST.threshold, - apr=apr, - ) - best_thr = metrics["best_thr"] - - if apr: - auc_, ap_, ar_, mf1_ = ( - metrics["auc"], - metrics["ap"], - metrics["ar"], - metrics["mf1"], - ) - - logger.info( - f"Current ACC, AUC, AP, AR, mF1, THR for {cfg.DATASET.DATA.TEST.FAKETYPE} --- {cfg.DATASET.DATA.TEST.LABEL_FOLDER} -- \ - {acc_*100} -- {auc_*100} -- {ap_*100} -- {ar_*100} -- {mf1_*100} -- {best_thr}" - ) - else: - bacc_, auc_, p_, r_, s_, f1_, eer_ = ( - metrics["bacc"], - metrics["auc"], - metrics["p"], - metrics["r"], - metrics["s"], - metrics["f1"], - metrics["eer"], - ) - - logger.info( - f"Current ACC, BACC, AUC, P, R, S, F1, EER, THR for {cfg.DATASET.DATA.TEST.FAKETYPE} --- {cfg.DATASET.DATA.TEST.LABEL_FOLDER} -- \ - {acc_*100} -- {bacc_*100} -- {auc_*100} -- {p_*100} -- {r_*100} -- {s_*100} -- {f1_*100} -- {eer_*100} -- {best_thr}" - ) - - if save_preds: - logger.info(f"Preditions will be saved into -- {pred_file}") - save_file(data=pred_meta, file_path=pred_file) diff --git a/video/fake-stormer/model_code/scripts/test.sh b/video/fake-stormer/model_code/scripts/test.sh deleted file mode 100644 index b6038464d4dd1b2463dd178e685e6c57a6dee906..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/scripts/test.sh +++ /dev/null @@ -1,10 +0,0 @@ -#! /bin/bash - -# CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/test.py --cfg configs/temporal/bin_cls/ResNet3D_c23.yaml \ -# -i 447.png - -# CUDA_VISIBLE_DEVICES=0 python scripts/test.py --cfg configs/temporal/FakeSFormer_base_c23.yaml \ -# -v /data/deepfake_cluster/datasets_df/DFW/test/frames/fake_test/fake_98_187 - -CUDA_VISIBLE_DEVICES=0 python scripts/test.py --cfg configs/spatial/xception_sbi.yaml \ - -i 447.png diff --git a/video/fake-stormer/model_code/scripts/test_bi.sh b/video/fake-stormer/model_code/scripts/test_bi.sh deleted file mode 100644 index b9348cd6ceff0a95e2471e075877e4bd5ed5e049..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/scripts/test_bi.sh +++ /dev/null @@ -1,10 +0,0 @@ -#! /bin/bash - -# CUDA_VISIBLE_DEVICES=0 python scripts/test.py --cfg configs/spatial/vit_bi_small.yaml \ -# -i /data/deepfake_cluster/datasets_df/FaceForensics++/c0/test/frames/Deepfakes/000_003/012.png - -# CUDA_VISIBLE_DEVICES=0 python scripts/test.py --cfg configs/spatial/swin_bi_small.yaml \ -# -i ~/data/FaceForensics++/c0/test/frames/NeuralTextures/035_036/000.png - -CUDA_VISIBLE_DEVICES=0 python scripts/test.py --cfg configs/spatial/efn4_fpn_hm_adv.yaml \ - -i ~/data/FaceForensics++/c0/test/frames/NeuralTextures/035_036/000.png diff --git a/video/fake-stormer/model_code/scripts/test_efn.sh b/video/fake-stormer/model_code/scripts/test_efn.sh deleted file mode 100644 index 3385c4b5532508a1c401c0f674ad2f2dba5811cc..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/scripts/test_efn.sh +++ /dev/null @@ -1,4 +0,0 @@ -#! /bin/bash - -CUDA_VISIBLE_DEVICES=0 python scripts/test.py --cfg configs/spatial/efn4_fpn_hm_adv.yaml \ - -i 447.png diff --git a/video/fake-stormer/model_code/scripts/test_fakestormer.sh b/video/fake-stormer/model_code/scripts/test_fakestormer.sh deleted file mode 100644 index d7ab6f1003261b9b307da6e1157bcfd606a88c50..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/scripts/test_fakestormer.sh +++ /dev/null @@ -1,10 +0,0 @@ -#! /bin/bash - -# CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/test.py --cfg configs/temporal/FakeSFormer_base_c23.yaml \ -# -i samples/debugs/affine_f_2883.jpg - -# CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/test.py --cfg configs/temporal/FakeSFormer_base_c40.yaml \ -# -i samples/debugs/affine_f_2883.jpg - -CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/test.py --cfg configs/temporal/FakeSFormer_base_c0.yaml \ - -i samples/debugs/affine_f_2883.jpg diff --git a/video/fake-stormer/model_code/scripts/test_laanet_temporal.sh b/video/fake-stormer/model_code/scripts/test_laanet_temporal.sh deleted file mode 100644 index f13d75df68c624335232c1d786f3ec8e607471fd..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/scripts/test_laanet_temporal.sh +++ /dev/null @@ -1,4 +0,0 @@ -#! /bin/bash - -CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/test.py --cfg configs/temporal/FakeSwin3D_base_c23.yaml \ - -i samples/debugs/affine_f_2883.jpg diff --git a/video/fake-stormer/model_code/scripts/test_sbi.sh b/video/fake-stormer/model_code/scripts/test_sbi.sh deleted file mode 100644 index de415980095ffcf1aa7e364376d3b387d416b74b..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/scripts/test_sbi.sh +++ /dev/null @@ -1,28 +0,0 @@ -#! /bin/bash - -# CUDA_VISIBLE_DEVICES=0 python scripts/test.py --cfg configs/spatial/efn4_fpn_sbi_adv.yaml \ -# -i samples/debugs/affine_f_2883.jpg - -# CUDA_VISIBLE_DEVICES=0 python scripts/test.py --cfg configs/spatial/vit_sbi_base.yaml \ -# -i samples/debugs/affine_f_2883.jpg - -CUDA_VISIBLE_DEVICES=0 python scripts/test.py --cfg configs/spatial/vit_sbi_small.yaml \ - -i /home/users/XXX/data/FaceForensics++/c0/test/frames/Deepfakes/000_003/000.png - -# CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/test.py --cfg configs/spatial/vit_sbi_large.yaml \ -# -i samples/debugs/affine_f_2883.jpg - -# CUDA_VISIBLE_DEVICES=0 python scripts/test.py --cfg configs/spatial/swin_sbi_base.yaml \ -# -i samples/debugs/affine_f_2883.jpg - -# CUDA_VISIBLE_DEVICES=0 python scripts/test.py --cfg configs/spatial/swin_sbi_small.yaml \ -# -i samples/debugs/affine_f_2883.jpg - -# CUDA_VISIBLE_DEVICES=0 python scripts/test.py --cfg configs/spatial/swin_bi_small.yaml \ -# -i samples/debugs/affine_f_2883.jpg - -# CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/test.py --cfg configs/spatial/swin_sbi_tiny.yaml \ -# -i samples/debugs/affine_f_2883.jpg - -# CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/test.py --cfg configs/temporal/FakeSFormer_base.yaml \ -# -i samples/debugs/affine_f_2883.jpg diff --git a/video/fake-stormer/model_code/scripts/train.py b/video/fake-stormer/model_code/scripts/train.py deleted file mode 100644 index 0f994354bdd5139cf9d8a9f6b28dc153148f5736..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/scripts/train.py +++ /dev/null @@ -1,243 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import - -import os -import sys -import time - -if os.getcwd() not in sys.path: - sys.path.append(os.getcwd()) -import argparse -import random -from datetime import datetime - -import numpy as np -import torch -import torch.nn as nn -import torch.optim as optim -from configs.get_config import load_config -from datasets import * -from lib.core_function import test, train, validate -from lib.optimizers.sam import SAM -from lib.scheduler.linear_decay import LinearDecayLR -from logs.logger import LOG_DIR, Logger -from losses import * -from models import * -from package_utils.misc import NativeScalerWithGradNormCount as NativeScaler -from tensorboardX import SummaryWriter -from torch.utils.data import DataLoader - - -def args_parser(args=None): - parser = argparse.ArgumentParser("Training process...") - parser.add_argument("--cfg", help="Config file", required=True) - parser.add_argument( - "--alloc_mem", "-a", help="Pre allocating GPU memory", action="store_true" - ) - return parser.parse_args(args) - - -if __name__ == "__main__": - if len(sys.argv[1:]): - args = sys.argv[1:] - else: - args = None - - args = args_parser(args) - cfg = load_config(args.cfg) - logger = Logger(task=f"training_{cfg.TASK}") - - # Seed - seed = cfg.SEED - random.seed(seed) - torch.manual_seed(seed) - np.random.seed(seed) - torch.cuda.manual_seed(seed) - - # Allocate memory - if args.alloc_mem: - mem_all_tensors = torch.rand(60, 10000, 10000) - mem_all_tensors.to("cuda:0") - - # Configuing GPU devices - devices = torch.device("cpu") - torch.backends.cudnn.benchmark = False - torch.backends.cudnn.deterministic = True - - if "gpus" in cfg.TRAIN.gpus and cfg.TRAIN.gpus is not None: - # Only support a single gpu for training now - devices = torch.device("cuda:1") - model = build_model(cfg.MODEL, MODELS).cuda() - - # Loading Dataloader - start_loading = time.time() - val_dataset = build_dataset( - cfg.DATASET, DATASETS, default_args=dict(split="val", config=cfg.DATASET) - ) - val_dataloader = DataLoader( - val_dataset, - batch_size=cfg.TRAIN.batch_size * len(cfg.TRAIN.gpus), - shuffle=False, - pin_memory=cfg.DATASET.PIN_MEMORY, - num_workers=cfg.DATASET.NUM_WORKERS, - worker_init_fn=val_dataset.train_worker_init_fn, - collate_fn=val_dataset.train_collate_fn, - ) - logger.info( - "Loading val dataloader successfully! -- {}".format(time.time() - start_loading) - ) - - start_loading = time.time() - train_dataset = build_dataset( - cfg.DATASET, DATASETS, default_args=dict(split="train", config=cfg.DATASET) - ) - train_dataloader = DataLoader( - train_dataset, - batch_size=cfg.TRAIN.batch_size * len(cfg.TRAIN.gpus), - shuffle=True, - pin_memory=cfg.DATASET.PIN_MEMORY, - num_workers=cfg.DATASET.NUM_WORKERS, - worker_init_fn=train_dataset.train_worker_init_fn, - collate_fn=train_dataset.train_collate_fn, - ) - logger.info( - "Loading Train dataloader successfully! -- {}".format( - time.time() - start_loading - ) - ) - - # Defining Loss function and Optimizer - critetion = build_losses( - cfg.TRAIN.loss, LOSSES, default_args=dict(cfg=cfg.TRAIN.loss) - ).cuda() - - if cfg.TRAIN.use_amp: - eff_lr = ( - cfg.TRAIN.lr - * cfg.TRAIN.accumulation_steps - * cfg.TRAIN.batch_size - * len(cfg.TRAIN.gpus) - / 64 - ) # 16*4=64 as default, might change - else: - eff_lr = cfg.TRAIN.lr - - if cfg.TRAIN.optimizer == "Adam": - optimizer = optim.Adam(model.parameters(), lr=eff_lr, weight_decay=1e-4) - elif cfg.TRAIN.optimizer == "AdamW": - optimizer = optim.AdamW( - model.parameters(), lr=eff_lr, betas=(0.9, 0.999), weight_decay=1e-4 - ) - elif cfg.TRAIN.optimizer == "SAM": - # optimizer = SAM(model.parameters(), optim.Adam, lr=cfg.TRAIN.lr, weight_decay=1e-4) - optimizer = SAM( - model.parameters(), - optim.Adam, - lr=eff_lr, - betas=(0.9, 0.995), - weight_decay=1e-4, - ) - else: - optimizer = optim.SGD( - model.parameters(), lr=eff_lr, weight_decay=1e-5, momentum=0.9 - ) - - # Defining scaler - scaler = NativeScaler() if cfg.TRAIN.use_amp else None - - # Loading model - model, optimizer, start_epoch, scaler = preset_model( - cfg, model, optimizer=optimizer, scaler=scaler - ) - if len(cfg.TRAIN.gpus) > 0: - model = nn.DataParallel(model, device_ids=cfg.TRAIN.gpus).cuda() - else: - model = model.cuda() - - # Learning rate Scheduler - if cfg.TRAIN.lr_scheduler == "MultiStepLR": - lr_scheduler = optim.lr_scheduler.MultiStepLR( - optimizer, **cfg.TRAIN.lr_scheduler - ) - else: - lr_scheduler = LinearDecayLR( - optimizer, - cfg.TRAIN.epochs, - cfg.TRAIN.epochs // cfg.TRAIN.start_decay, - last_epoch=cfg.TRAIN.begin_epoch, - booster=cfg.TRAIN.booster, - ) - - # Enabling tensorboard - writer = SummaryWriter( - ".tensorboard/{}_{}".format(datetime.today().strftime("%Y-%m-%d"), cfg.TASK) - ) - - trainIters = 0 - valIters = 0 - min_val_loss = 1e10 - max_val_acc = 0 - max_test_auc = 0 - metrics_base = ( - cfg.METRICS_BASE - ) # Combine heatmap + cls prediction to calculate accuracy - - # Starting training process - logger.info("Starting training process...") - for epoch in range(start_epoch, cfg.TRAIN.epochs): - # Unfreezin backbone to update weights - if cfg.TRAIN.freeze_backbone and epoch == cfg.TRAIN.warm_up: - unfreeze_backbone(model) - - np.random.seed(seed + epoch) - if epoch > 0 and cfg.DATA_RELOAD: - logger.info(f"Reloading data for epoch {epoch}...") - train_dataset._reload_data(epoch=epoch) - train_dataloader = DataLoader( - train_dataset, - batch_size=cfg.TRAIN.batch_size * len(cfg.TRAIN.gpus), - shuffle=True, - pin_memory=cfg.DATASET.PIN_MEMORY, - num_workers=cfg.DATASET.NUM_WORKERS, - worker_init_fn=train_dataset.train_worker_init_fn, - collate_fn=train_dataset.train_collate_fn, - ) - - loss_avg, acc_avg, trainIters = train( - cfg, - model, - critetion, - optimizer, - epoch, - train_dataloader, - logger, - writer, - devices, - trainIters, - metrics_base=metrics_base, - scaler=scaler, - ) - if epoch % cfg.TRAIN.every_val_epochs == 0: - loss_val, acc_val, valIters = validate( - cfg, - model, - critetion, - epoch, - val_dataloader, - logger, - writer, - devices, - valIters, - metrics_base=metrics_base, - ) - - if acc_val.avg > max_val_acc: - # Saving checkpoint - ckp_path = os.path.join( - LOG_DIR, "{}_{}_model_best.pth".format(cfg.MODEL.type, cfg.TASK) - ) - save_model(path=ckp_path, epoch=epoch, model=model, optimizer=optimizer) - min_val_loss = loss_val.avg - max_val_acc = acc_val.avg - logger.info(f"Saved best model at epoch --- {epoch}") - lr_scheduler.step() diff --git a/video/fake-stormer/model_code/scripts/train.sh b/video/fake-stormer/model_code/scripts/train.sh deleted file mode 100644 index e1aefaffa1f1fc9523dda6436fb6cff04dd84e2e..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/scripts/train.sh +++ /dev/null @@ -1,3 +0,0 @@ -#! /bin/bash - -CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/train.py --cfg configs/temporal/bin_cls/ResNet3D_c23.yaml diff --git a/video/fake-stormer/model_code/scripts/train_efn.sh b/video/fake-stormer/model_code/scripts/train_efn.sh deleted file mode 100644 index aaa8961777e33d0129939acb502a566cbc6c8f47..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/scripts/train_efn.sh +++ /dev/null @@ -1,3 +0,0 @@ -#! /bin/bash - -CUDA_VISIBLE_DEVICES=0 python scripts/train.py --cfg configs/spatial/binary_cls/efns/efn_4.yaml diff --git a/video/fake-stormer/model_code/scripts/vit_bi.sh b/video/fake-stormer/model_code/scripts/vit_bi.sh deleted file mode 100644 index aa674fa2bc529158db29e7c8475dff953c2c97a5..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/scripts/vit_bi.sh +++ /dev/null @@ -1,4 +0,0 @@ -#! /bin/bash - -CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/train.py --cfg configs/spatial/vit_bi_small.yaml -# CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/train.py --cfg configs/spatial/vit_sbi_large.yaml diff --git a/video/fake-stormer/model_code/scripts/vit_sbi.sh b/video/fake-stormer/model_code/scripts/vit_sbi.sh deleted file mode 100644 index 2dccd0f9ef3cf1da14918a34afafbb2768431291..0000000000000000000000000000000000000000 --- a/video/fake-stormer/model_code/scripts/vit_sbi.sh +++ /dev/null @@ -1,5 +0,0 @@ -#! /bin/bash - -CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/train.py --cfg configs/spatial/vit_sbi_small.yaml -# CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/train.py --cfg configs/spatial/vit_sbi_base.yaml -# CUDA_VISIBLE_DEVICES=0,1,2,3 python scripts/train.py --cfg configs/spatial/vit_sbi_large.yaml diff --git a/video/fake-stormer/requirements.txt b/video/fake-stormer/requirements.txt deleted file mode 100644 index eae304e0719eeb1832984c2d5e640dbc7f9cb1d8..0000000000000000000000000000000000000000 --- a/video/fake-stormer/requirements.txt +++ /dev/null @@ -1,24 +0,0 @@ -fastapi -uvicorn -pydantic -python-multipart -torch>=1.8.0 -torchvision>=0.9.0 -opencv-python-headless -numpy<2.0.0 -Pillow -PyYAML -natsort -tqdm -scikit-image -albumentations==1.1.0 -imgaug==0.4.0 -tensorboardX==2.5.1 -plotly -simplejson -ptflops -mmengine -einops -timm -python-box -mmcv==1.6.1 diff --git a/video/lipfd/Dockerfile b/video/lipfd/Dockerfile deleted file mode 100644 index a809444988f9417b12da2ac43474c7f40ca4385f..0000000000000000000000000000000000000000 --- a/video/lipfd/Dockerfile +++ /dev/null @@ -1,58 +0,0 @@ -FROM nvidia/cuda:12.1.1-cudnn8-runtime-ubuntu22.04 - -ENV DEBIAN_FRONTEND=noninteractive -ENV PYTHONUNBUFFERED=1 - -WORKDIR /app - -# Install Python 3.10 and system dependencies for OpenCV -RUN apt-get update && apt-get install -y --no-install-recommends \ - python3 python3-pip \ - libgl1 \ - libglib2.0-0 \ - libsm6 \ - libxext6 \ - libxrender-dev \ - && rm -rf /var/lib/apt/lists/* - -RUN ln -sf /usr/bin/python3 /usr/bin/python - -# Install PyTorch with CUDA 12.1 -RUN pip install --no-cache-dir \ - torch==2.5.1 torchvision==0.20.1 \ - --index-url https://download.pytorch.org/whl/cu121 - -# Copy requirements and install (facenet-pytorch needs --no-deps due to torch<2.3 pin) -COPY requirements.txt . -RUN pip install --no-cache-dir --no-deps facenet-pytorch && \ - pip install --no-cache-dir -r requirements.txt - -# Create logs and weights directories -RUN mkdir -p logs weights - -# Copy model code (CLIP + LipFD architecture) -COPY model_code/ /app/model_code/ - -# Copy weights -COPY weights/ /app/weights/ - -# Copy application code -COPY app.py . - -# Environment variables -ENV MODEL_PORT=7006 -ENV PRELOAD_MODEL=false -ENV MODEL_TIMEOUT=1800 -ENV WEIGHTS_PATH=/app/weights/lipfd_checkpoint.pth -ENV MODEL_CODE_DIR=/app/model_code - -# Expose port -EXPOSE 7006 - -# Drop root privileges -RUN adduser --disabled-password --gecos '' appuser && \ - chown -R appuser:appuser /app/logs /app/weights -USER appuser - -# Run the service -CMD ["python", "app.py"] diff --git a/video/lipfd/app.py b/video/lipfd/app.py deleted file mode 100644 index fad7f40a62fbf878bbf8184ad3cade5d1e9b6ca7..0000000000000000000000000000000000000000 --- a/video/lipfd/app.py +++ /dev/null @@ -1,545 +0,0 @@ -"""LipFD video deepfake detection service. - -Wraps the LipFD (NeurIPS 2024) lip forgery detection model with a -FastAPI endpoint. Uses CLIP ViT-L/14 as a global feature extractor -and a ResNet-50-based region-aware classifier that operates on -multi-scale crops of detected faces. - -Reference: Hou et al., "LipFD: Lip Forgery Detection via -Region-Aware CLIP", NeurIPS 2024. -""" - -import base64 -import gc -import logging -import os -import platform -import sys -import tempfile -import threading -import time -from typing import Any, Dict, List, Optional, Tuple - -import cv2 -import numpy as np -import torch -import torchvision.transforms as transforms -import uvicorn -from facenet_pytorch import MTCNN -from fastapi import FastAPI, HTTPException -from PIL import Image -from pydantic import BaseModel, ConfigDict, Field - -logging.basicConfig(level=logging.INFO) -logger = logging.getLogger(__name__) - -MODEL_PORT = int(os.environ.get("MODEL_PORT", 7006)) -PRELOAD_MODEL = os.environ.get("PRELOAD_MODEL", "false").lower() == "true" -MODEL_TIMEOUT = int(os.environ.get("MODEL_TIMEOUT", 1800)) -WEIGHTS_PATH = os.environ.get( - "WEIGHTS_PATH", "/app/weights/lipfd_checkpoint.pth" -) - -# Add model_code to path so LipFD's internal imports resolve -_MODEL_CODE_DIR = os.environ.get( - "MODEL_CODE_DIR", - os.path.join(os.path.dirname(os.path.abspath(__file__)), "model_code"), -) -if _MODEL_CODE_DIR not in sys.path: - sys.path.insert(0, _MODEL_CODE_DIR) - -# Number of frames to uniformly sample from the video -NUM_FRAMES = 32 -# Face bounding-box margin factor (fraction of bbox dimension) -MARGIN_FACTOR = 0.5 -# CLIP normalization constants (from OpenAI CLIP) -CLIP_MEAN = [0.48145466, 0.4578275, 0.40821073] -CLIP_STD = [0.26862954, 0.26130258, 0.27577711] -# Multi-scale crop indices (from LipFD datasets.py) -# Scale 0 = full 224x224 crop, scale 1 = inner 168x168, scale 2 = inner 102x102 -CROP_IDX = [(28, 196), (61, 163)] -# Number of spatial sub-crops per face (horizontal slices of lower-face) -NUM_SUBCROP_POSITIONS = 5 - - -# ── Device selection ─────────────────────────────────────────────────────── - - -def _get_device() -> torch.device: - """Select optimal device: CUDA > MPS (Apple Silicon) > CPU.""" - override = os.environ.get("DEEPSAFE_DEVICE", "").strip().lower() - if override == "cpu": - return torch.device("cpu") - if override == "cuda" and torch.cuda.is_available(): - return torch.device("cuda") - if ( - override == "mps" - and hasattr(torch.backends, "mps") - and torch.backends.mps.is_available() - ): - return torch.device("mps") - if torch.cuda.is_available(): - return torch.device("cuda") - if ( - platform.system() == "Darwin" - and hasattr(torch.backends, "mps") - and torch.backends.mps.is_available() - ): - return torch.device("mps") - return torch.device("cpu") - - -# ── Global state ─────────────────────────────────────────────────────────── - -_model = None -_face_detector: Optional[MTCNN] = None -_device: Optional[torch.device] = None -_load_lock = threading.Lock() - - -def _load_models() -> None: - """Load LipFD model and MTCNN face detector (thread-safe).""" - global _model, _face_detector, _device - - if _model is not None: - return - - with _load_lock: - if _model is not None: - return - - _device = _get_device() - if _device.type == "cuda": - torch.backends.cudnn.benchmark = True - torch.set_float32_matmul_precision("high") - if _device.type == "cuda": - logger.info( - "Device: cuda (%s, %.1f GB VRAM)", - torch.cuda.get_device_name(0), - torch.cuda.get_device_properties(0).total_memory / 1024**3, - ) - else: - logger.warning( - "Device: %s (no CUDA available -- check nvidia-container-toolkit)", - _device, - ) - logger.info("Loading LipFD model on %s ...", _device) - - # ── Face detector (MTCNN) ────────────────────────────────────── - _face_detector = MTCNN( - keep_all=True, - device=_device, - post_process=False, - ) - - # ── LipFD classifier ────────────────────────────────────────── - from models import build_model # noqa: E402 - - model = build_model("CLIP:ViT-L/14") - - if not os.path.exists(WEIGHTS_PATH): - raise FileNotFoundError( - f"LipFD weights not found at {WEIGHTS_PATH}" - ) - - checkpoint = torch.load( - WEIGHTS_PATH, map_location="cpu", weights_only=False - ) - model.load_state_dict(checkpoint["model"]) - model = model.to(_device) - model.eval() - - _model = model - logger.info("LipFD model loaded successfully.") - - -def _is_model_loaded() -> bool: - """Return True if both the classifier and face detector are loaded.""" - return _model is not None and _face_detector is not None - - -# ── FastAPI app ──────────────────────────────────────────────────────────── - -app = FastAPI( - title="LipFD Detection Service", - description=( - "Lip Forgery Detection via Region-Aware CLIP " - "(ViT-L/14, NeurIPS 2024)" - ), - version="1.0.0", -) - - -class PredictRequest(BaseModel): - """Incoming prediction request.""" - - video_data: str # Base64-encoded video bytes - threshold: float = 0.5 - - -class PredictResponse(BaseModel): - """Outgoing prediction result.""" - - model_config = ConfigDict(populate_by_name=True) - - model: str = "lipfd_detection" - probability: float - prediction: int - class_name: str = Field(..., alias="class") - inference_time: float - metadata: Dict[str, Any] - - -@app.on_event("startup") -async def startup_event(): - """Optionally preload model at startup.""" - if PRELOAD_MODEL: - _load_models() - - -@app.get("/") -def root(): - """Service info endpoint.""" - return { - "service": "lipfd_detection", - "port": MODEL_PORT, - "model_loaded": _is_model_loaded(), - "device": str(_device) if _device else "unknown", - } - - -def _gpu_health_info() -> dict: - """Return GPU metrics for the health endpoint.""" - if ( - torch.cuda.is_available() - and _device is not None - and _device.type == "cuda" - ): - return { - "gpu_name": torch.cuda.get_device_name(0), - "vram_used_mb": round( - torch.cuda.memory_allocated(0) / 1024**2 - ), - "vram_total_mb": round( - torch.cuda.get_device_properties(0).total_memory / 1024**2 - ), - } - return {} - - -@app.get("/health") -def health(): - """Health check endpoint.""" - return { - "status": "healthy", - "model": "lipfd_detection", - "device": str(_device) if _device else "cpu", - "model_loaded": _is_model_loaded(), - "weights_exist": os.path.exists(WEIGHTS_PATH), - **_gpu_health_info(), - } - - -# ── Video / face utilities ───────────────────────────────────────────────── - - -def _extract_frames( - video_path: str, num_frames: int = NUM_FRAMES -) -> List[np.ndarray]: - """Uniformly sample *num_frames* RGB frames from a video file. - - Args: - video_path: Path to the video on disk. - num_frames: Number of frames to extract. - - Returns: - List of RGB uint8 numpy arrays (H, W, 3). - """ - cap = cv2.VideoCapture(video_path) - total = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) - - if total <= 0: - cap.release() - return [] - - indices = np.linspace( - 0, total - 1, num_frames, endpoint=True, dtype=int - ) - frames: List[np.ndarray] = [] - - for idx in indices: - cap.set(cv2.CAP_PROP_POS_FRAMES, int(idx)) - ret, frame = cap.read() - if ret: - frames.append(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)) - - cap.release() - return frames - - -def _crop_face( - img: np.ndarray, - bbox: Tuple[float, float, float, float], - margin: float = MARGIN_FACTOR, -) -> np.ndarray: - """Crop a face region with a relative margin around the bbox. - - Args: - img: RGB image array (H, W, 3). - bbox: (x0, y0, x1, y1) face bounding box. - margin: Fraction of bbox dimension to add as padding. - - Returns: - Cropped face region as a numpy array. - """ - h_img, w_img = img.shape[:2] - x0, y0, x1, y1 = bbox - w = x1 - x0 - h = y1 - y0 - - x0_new = max(0, int(x0 - w * margin / 2)) - x1_new = min(w_img, int(x1 + w * margin / 2) + 1) - y0_new = max(0, int(y0 - h * margin / 2)) - y1_new = min(h_img, int(y1 + h * margin / 2) + 1) - - return img[y0_new:y1_new, x0_new:x1_new] - - -def _detect_faces(frame: np.ndarray) -> List[np.ndarray]: - """Detect faces in a frame and return margin-expanded crops. - - Args: - frame: RGB image array (H, W, 3). - - Returns: - List of face-crop arrays (variable size, RGB uint8). - """ - assert _face_detector is not None - - pil_img = Image.fromarray(frame) - boxes, _ = _face_detector.detect(pil_img) - - if boxes is None or len(boxes) == 0: - return [] - - crops: List[np.ndarray] = [] - for box in boxes: - x0, y0, x1, y1 = box.tolist() - face = _crop_face(frame, (x0, y0, x1, y1)) - if face.size == 0: - continue - crops.append(face) - - return crops - - -# ── LipFD preprocessing ─────────────────────────────────────────────────── - -_resize_224 = transforms.Resize((224, 224)) -_resize_1120 = transforms.Resize((1120, 1120)) -_clip_normalize = transforms.Normalize(mean=CLIP_MEAN, std=CLIP_STD) - - -def _prepare_lipfd_inputs( - face_crop: np.ndarray, -) -> Tuple[torch.Tensor, List[List[torch.Tensor]]]: - """Convert a single face crop into LipFD model inputs. - - Mirrors the preprocessing in LipFD's AVLip dataset: - 1. Convert face to float32 tensor (C, H, W), no /255 normalization - (the original dataset uses raw cv2.imread pixel values). - 2. CLIP-normalize, then create 5 horizontal sub-crops of the - lower-face region, each at 3 zoom scales (1.0x, 0.65x, 0.45x). - 3. Resize the raw image to 1120x1120 for the CLIP encoder. - - Args: - face_crop: RGB uint8 numpy array of a detected face (H, W, 3). - - Returns: - img_1120: Tensor of shape (3, 1120, 1120) for CLIP feature - extraction (raw pixel values, no normalization). - crops: List of 3 scale-lists, each containing 5 tensors of - shape (3, 224, 224) -- CLIP-normalized. - """ - # Raw float tensor (same as original: torch.tensor(cv2.imread(...))) - # cv2.imread returns BGR but we already have RGB from our pipeline. - # The original code reads BGR from cv2 and feeds it directly, so - # we convert back to BGR to match training distribution. - face_bgr = cv2.cvtColor(face_crop, cv2.COLOR_RGB2BGR) - img_tensor = torch.tensor(face_bgr, dtype=torch.float32).permute(2, 0, 1) - - # CLIP-normalize for the crop pathway - img_norm = _clip_normalize(img_tensor) - - # Build multi-scale crops from the lower-face region. - # Original dataset: face images are 1000x(variable), crops come from - # img[:, 500:, i:i+500] for 5 horizontal positions. - # We adapt to arbitrary face dimensions: take the lower half and split - # into 5 overlapping horizontal positions. - _, h, w = img_norm.shape - half_h = h // 2 - lower_face = img_norm[:, half_h:, :] # lower half of the face - - lf_h, lf_w = lower_face.shape[1], lower_face.shape[2] - # Create 5 square-ish sub-crops across the lower face width - crop_size = min(lf_h, lf_w) - if crop_size < 2: - crop_size = max(lf_h, lf_w, 2) - - # Positions spread across the width - if lf_w > crop_size: - positions = np.linspace( - 0, lf_w - crop_size, NUM_SUBCROP_POSITIONS, dtype=int - ) - else: - positions = [0] * NUM_SUBCROP_POSITIONS - - # Scale 0 (1.0x): 5 crops from lower face, each resized to 224x224 - crops: List[List[torch.Tensor]] = [[], [], []] - for pos in positions: - patch = lower_face[ - :, :crop_size, pos : pos + crop_size - ] - crop_224 = _resize_224(patch) - crops[0].append(crop_224) - - # Scale 1 (0.65x): inner crop of the 224x224 - crops[1].append( - _resize_224( - crop_224[ - :, - CROP_IDX[0][0] : CROP_IDX[0][1], - CROP_IDX[0][0] : CROP_IDX[0][1], - ] - ) - ) - # Scale 2 (0.45x): tighter inner crop - crops[2].append( - _resize_224( - crop_224[ - :, - CROP_IDX[1][0] : CROP_IDX[1][1], - CROP_IDX[1][0] : CROP_IDX[1][1], - ] - ) - ) - - # Full image resized to 1120x1120 for CLIP global feature extraction - img_1120 = _resize_1120(img_tensor) - - return img_1120, crops - - -# ── Prediction endpoint ─────────────────────────────────────────────────── - - -@app.post("/predict", response_model=PredictResponse) -async def predict(request: PredictRequest): - """Run LipFD face-forgery detection on a base64-encoded video. - - Pipeline: - 1. Decode video and write to temp file. - 2. Extract uniformly-sampled frames. - 3. Detect and crop faces per frame (MTCNN). - 4. For each face, create multi-scale crops and CLIP features. - 5. Run the region-aware classifier. - 6. Per-frame max probability, then average across frames. - - Returns probability=0.5 (undetermined) if no faces are detected. - """ - if not _is_model_loaded(): - _load_models() - - start_time = time.time() - - # ── Decode video ─────────────────────────────────────────────── - with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as tmp: - try: - video_bytes = base64.b64decode(request.video_data) - tmp.write(video_bytes) - tmp_path = tmp.name - except Exception as e: - raise HTTPException( - status_code=400, detail=f"Failed to decode video: {e}" - ) - - try: - # ── Extract frames ───────────────────────────────────────── - frames = _extract_frames(tmp_path, NUM_FRAMES) - if not frames: - raise HTTPException( - status_code=400, - detail="Could not extract frames from video.", - ) - - # ── Detect faces and classify ────────────────────────────── - per_frame_max: List[float] = [] - total_faces = 0 - - for frame in frames: - face_crops = _detect_faces(frame) - if not face_crops: - continue - - frame_scores: List[float] = [] - - for face_crop in face_crops: - img_1120, crops = _prepare_lipfd_inputs(face_crop) - - # Batch dim = 1 for single-face inference - img_batch = img_1120.unsqueeze(0).to(_device) - - # Build crop tensors: each scale-list element gets batch dim - crops_batch = [ - [c.unsqueeze(0).to(_device) for c in scale_crops] - for scale_crops in crops - ] - - with torch.no_grad(): - # Get CLIP global features - features = _model.get_features(img_batch).to(_device) - # Run region-aware classifier - pred_score, _, _ = _model(crops_batch, features) - prob = pred_score.sigmoid().item() - - frame_scores.append(prob) - total_faces += 1 - - if frame_scores: - per_frame_max.append(max(frame_scores)) - - # ── Aggregate ────────────────────────────────────────────── - if per_frame_max: - probability = float(np.mean(per_frame_max)) - else: - probability = 0.5 - - prediction = 1 if probability >= request.threshold else 0 - class_name = "fake" if prediction == 1 else "real" - - return PredictResponse( - probability=probability, - prediction=prediction, - class_name=class_name, - inference_time=time.time() - start_time, - metadata={ - "frames_sampled": len(frames), - "frames_with_faces": len(per_frame_max), - "total_faces_detected": total_faces, - "device": str(_device), - }, - ) - - except HTTPException: - raise - except Exception as e: - logger.exception("Error during LipFD prediction") - raise HTTPException(status_code=500, detail=str(e)) - finally: - if os.path.exists(tmp_path): - os.remove(tmp_path) - gc.collect() - - -if __name__ == "__main__": - uvicorn.run(app, host="0.0.0.0", port=MODEL_PORT) diff --git a/video/lipfd/model_code/.gitignore b/video/lipfd/model_code/.gitignore deleted file mode 100644 index dd38aff5c46b6896f9d002d19dabd7b472e9fa6b..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.DS_Store -__pycache__ -.vscode/ diff --git a/video/lipfd/model_code/README.assets/dataset.png b/video/lipfd/model_code/README.assets/dataset.png deleted file mode 100644 index 23af39759f3601476d40885e6fd74207e4e0dd23..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/README.assets/dataset.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d9dded1ecc7ced64e69cbe64d4c75f7f35f55c0fb05a3851519a7a9eb9de61b7 -size 584116 diff --git a/video/lipfd/model_code/README.assets/headline.png b/video/lipfd/model_code/README.assets/headline.png deleted file mode 100644 index df805c45ec82238fc405fac7df2f55e57c6a16f1..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/README.assets/headline.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:efd47a27850a1db2fac65e391c4826ad6334d3080e74549c05105ec159519a1b -size 869687 diff --git a/video/lipfd/model_code/README.assets/image-20241004221023777.png b/video/lipfd/model_code/README.assets/image-20241004221023777.png deleted file mode 100644 index b86ca77a7634f881e0ae552f5ee00bb878a1d07d..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/README.assets/image-20241004221023777.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0b4dfaba9076f6f19908d452500a00ed64d12f4bafe568bb13054bed95fadee4 -size 1898128 diff --git a/video/lipfd/model_code/README.assets/pipeline.png b/video/lipfd/model_code/README.assets/pipeline.png deleted file mode 100644 index c95ea9f98748c5d0c21d0b8754d68720d611367a..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/README.assets/pipeline.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:58d8589c7b429058da6d81dac1e2c12d39a6e69ffe0619ae9a543fffe7f91cb9 -size 525913 diff --git a/video/lipfd/model_code/README.md b/video/lipfd/model_code/README.md deleted file mode 100644 index 6148c630175fda0c4304a703d866bb895b228266..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/README.md +++ /dev/null @@ -1,127 +0,0 @@ -# [NeruIPS 2024] Lips Are Lying: Spotting the Temporal Inconsistency between Audio and Visual in Lip-syncing DeepFakes - -Static Badge -Static Badge - - - -![headline](README.assets/headline.png) - -> **Abstract.** In recent years, DeepFake technology has achieved unprecedented success in high-quality video synthesis, but these methods also pose potential and severe security threats to humanity. DeepFake can be bifurcated into entertainment applications like face swapping and illicit uses such as lip-syncing fraud. However, lip-forgery videos, which neither change identity nor have discernible visual artifacts, present a formidable challenge to existing DeepFake detection methods. Our preliminary experiments have shown that the effectiveness of the existing methods often drastically decrease or even fail when tackling lip-syncing videos. -> In this paper, for the first time, we propose a novel approach dedicated to lip-forgery identification that exploits the inconsistency between lip movements and audio signals. We also mimic human natural cognition by capturing subtle biological links between lips and head regions to boost accuracy. To better illustrate the effectiveness and advances of our proposed method, we create a high-quality LipSync dataset, AVLips, by employing the state-of-the-art lip generators. We hope this high-quality and diverse dataset could be well served the further research on this challenging and interesting field. Experimental results show that our approach gives an average accuracy of more than 95.3% in spotting lip-syncing videos, significantly outperforming the baselines. Extensive experiments demonstrate the capability to tackle deepfakes and the robustness in surviving diverse input transformations. Our method achieves an accuracy of up to 90.2% in real-world scenarios (e.g., WeChat video call) and shows its powerful capabilities in real scenario deployment. - -![pipeline](README.assets/pipeline.png) - - - -## 🔥 AVLips: A high-quality audio-visual dataset for LipSync detection - -To the best of our knowledge, the majority of public DeepFake datasets consist solely of videos or images, with no specialized one specifically dedicated to LipSync detection available. To fill this gap, we construct a high-quality **A**udio-**V**isual **Lip**-syncing Dataset, **AVLips**, which contains up to 340,000 audio-visual samples generated by several SOTA LipSync methods. The workflow is demonstrated below. - -**High quality.** We employed a combination of static MakeItTalk and dynamic Wav2Lip, TalkLip, SadTalker generation methods to simulate realistic lip movements. These methods are widely recognized as high-quality work, capable of generating high-resolution videos while ensuring accurate lip movements. We applied a noise reduction algorithm to all audio samples before synthesis to reduce irrelevant background noise, ensuring the models can focus on speech content. - -**Diversity.** Our dataset encompasses a wide range of scenarios, covering not only well-known public datasets but also real-world data. Our aim is for this collection to act as a catalyst for advancing real-time forgery detection. To better simulate the nuances of real-world conditions, we have employed six perturbation techniques — saturation, contrast, compression, Gaussian noise, Gaussian blur, and pixelation — at various degrees, thus ensuring the dataset's realism and practical relevance. - -**Download Link: [AVLips v1.0](https://drive.google.com/file/d/1fEiUo22GBSnWD7nfEwDW86Eiza-pOEJm/view?usp=share_link)** - -
- - - -## :gear: ​Requirements - -~~~bash -conda create -n LipFD python==3.10 -conda activate LipFD -pip install -r requirements.txt -~~~ - - - -## :wrench: Dataset Preprocess - -**You can skip this section, if you only want to perform validation.** - -Download AVLips dataset and put it in the root directory. - -AVLips dataset folder structure. - -~~~ -AVLips -├── 0_real -│   ├── 0.mp4 -│   ... -├── 1_fake -│   ├── 0.mp4 -│   └── ... -└── wav - ├── 0_real - │   ├── 0.wav - │   └── ... - └── 1_fake - ├── 0.wav - └── ... -~~~ - -Preprocess the dataset for training. - -~~~bash -python preprocess.py -~~~ - -Preprocessed AVLips dataset folder structure. - -~~~bash -datasets -└── AVLips -    ├── 0_real -    │   ├── 0_0.png -    │   └── ... -    └── 1_fake -    ├── 0_0.png -    └── ... -~~~ - -The data sample is showed as follow, and **the fully processed dataset is approximately 60 GB.** - -![image-20241004221023777](README.assets/image-20241004221023777.png) - - - -## :tada: Validation - -- Download our [pertained weights](https://drive.google.com/file/d/1NPAcx0QS8N9v_9qUr-51jBaL9kGDT-cp/view?usp=share_link) and save it in to `checkpoints/ckpt.pth`. - -- Download [validation set](https://drive.google.com/file/d/1gZjzps5_rbr6CeBqBke8l2Gs8xXx_Ctb/view?usp=share_link) and extract it into `datasets/val`. - -~~~bash -python validate.py --real_list_path ./datasets/val/0_real --fake_list_path ./datasets/val/1_fake --ckpt ./checkpoints/ckpt.pth -~~~ - - - -## :rocket: Train - -First, edit `--fake_list_path` and `--real_list_path` in `options/base_options.py`. - -Then, run `python train.py`. - - - -## :mailbox: Citation - -If you find this repo useful for your research, please consider citing our work: - -~~~ -@inproceedings{liu2024lips, - author = {Liu, Weifeng and She, Tianyi and Liu, Jiawei and Li, Boheng and Yao, Dongyu and Liang, Ziyou and Wang, Run}, - booktitle = {Advances in Neural Information Processing Systems}, - editor = {A. Globerson and L. Mackey and D. Belgrave and A. Fan and U. Paquet and J. Tomczak and C. Zhang}, - pages = {91131--91155}, - publisher = {Curran Associates, Inc.}, - title = {Lips Are Lying: Spotting the Temporal Inconsistency between Audio and Visual in Lip-Syncing DeepFakes}, - url = {https://proceedings.neurips.cc/paper_files/paper/2024/file/a5a5b0ff87c59172a13342d428b1e033-Paper-Conference.pdf}, - volume = {37}, - year = {2024} -} -~~~ \ No newline at end of file diff --git a/video/lipfd/model_code/data/__init__.py b/video/lipfd/model_code/data/__init__.py deleted file mode 100644 index 600e8fad9659c400fb7c15345b7bf7797005710b..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/data/__init__.py +++ /dev/null @@ -1,34 +0,0 @@ -import torch -import numpy as np -from torch.utils.data.sampler import WeightedRandomSampler -from .datasets import AVLip - - -def get_bal_sampler(dataset): - targets = [] - for d in dataset.datasets: - targets.extend(d.targets) - - ratio = np.bincount(targets) - w = 1.0 / torch.tensor(ratio, dtype=torch.float) - sample_weights = w[targets] - sampler = WeightedRandomSampler( - weights=sample_weights, num_samples=len(sample_weights) - ) - return sampler - - -def create_dataloader(opt): - shuffle = not opt.serial_batches if (opt.isTrain and not opt.class_bal) else False - dataset = AVLip(opt) - - sampler = get_bal_sampler(dataset) if opt.class_bal else None - - data_loader = torch.utils.data.DataLoader( - dataset, - batch_size=opt.batch_size, - shuffle=True, - sampler=sampler, - num_workers=int(opt.num_threads), - ) - return data_loader diff --git a/video/lipfd/model_code/data/datasets.py b/video/lipfd/model_code/data/datasets.py deleted file mode 100644 index d913b7faa7f9cbb5f33e3a70744390173db799a0..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/data/datasets.py +++ /dev/null @@ -1,42 +0,0 @@ -import cv2 -import torch -import torchvision.transforms as transforms -from torch.utils.data import Dataset -import utils - - -class AVLip(Dataset): - def __init__(self, opt): - assert opt.data_label in ["train", "val"] - self.data_label = opt.data_label - self.real_list = utils.get_list(opt.real_list_path) - self.fake_list = utils.get_list(opt.fake_list_path) - self.label_dict = dict() - for i in self.real_list: - self.label_dict[i] = 0 - for i in self.fake_list: - self.label_dict[i] = 1 - self.total_list = self.real_list + self.fake_list - - def __len__(self): - return len(self.total_list) - - def __getitem__(self, idx): - img_path = self.total_list[idx] - label = self.label_dict[img_path] - img = torch.tensor(cv2.imread(img_path), dtype=torch.float32) - img = img.permute(2, 0, 1) - crops = transforms.Normalize(mean=[0.48145466, 0.4578275, 0.40821073], - std=[0.26862954, 0.26130258, 0.27577711])(img) - # crop images - # crops[0]: 1.0x, crops[1]: 0.65x, crops[2]: 0.45x - crops = [[transforms.Resize((224, 224))(img[:, 500:, i:i + 500]) for i in range(5)], [], []] - crop_idx = [(28, 196), (61, 163)] - for i in range(len(crops[0])): - crops[1].append(transforms.Resize((224, 224)) - (crops[0][i][:, crop_idx[0][0]:crop_idx[0][1], crop_idx[0][0]:crop_idx[0][1]])) - crops[2].append(transforms.Resize((224, 224)) - (crops[0][i][:, crop_idx[1][0]:crop_idx[1][1], crop_idx[1][0]:crop_idx[1][1]])) - img = transforms.Resize((1120, 1120))(img) - - return img, crops, label diff --git a/video/lipfd/model_code/models/LipFD.py b/video/lipfd/model_code/models/LipFD.py deleted file mode 100644 index 2a48dd37c66a28f1685b5a9940e63a7d6554e93f..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/models/LipFD.py +++ /dev/null @@ -1,42 +0,0 @@ -import torch -import numpy as np -import torch.nn as nn -from .clip import clip -from .region_awareness import get_backbone - - -class LipFD(nn.Module): - def __init__(self, name, num_classes=1): - super(LipFD, self).__init__() - - self.conv1 = nn.Conv2d( - 3, 3, kernel_size=5, stride=5 - ) # (1120, 1120) -> (224, 224) - self.encoder, self.preprocess = clip.load(name, device="cpu") - self.backbone = get_backbone() - - def forward(self, x, feature): - return self.backbone(x, feature) - - def get_features(self, x): - x = self.conv1(x) - features = self.encoder.encode_image(x) - return features - - -class RALoss(nn.Module): - def __init__(self): - super(RALoss, self).__init__() - - def forward(self, alphas_max, alphas_org): - loss = 0.0 - batch_size = alphas_org[0].shape[0] - for i in range(len(alphas_org)): - loss_wt = 0.0 - for j in range(batch_size): - loss_wt += torch.Tensor([10]).to(alphas_max[i][j].device) / np.exp( - alphas_max[i][j] - alphas_org[i][j] - ) - loss += loss_wt / batch_size - return loss - \ No newline at end of file diff --git a/video/lipfd/model_code/models/__init__.py b/video/lipfd/model_code/models/__init__.py deleted file mode 100644 index 3b31eb1cba9f53027652f30277634b017f7a6f68..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/models/__init__.py +++ /dev/null @@ -1,28 +0,0 @@ -from .clip_models import CLIPModel -from .LipFD import LipFD, RALoss - -VALID_NAMES = [ - "CLIP:ViT-B/32", - "CLIP:ViT-B/16", - "CLIP:ViT-L/14", -] - - -def get_model(name): - assert name in VALID_NAMES - if name.startswith("CLIP:"): - return CLIPModel(name[5:]) - else: - assert False - - -def build_model(transformer_name): - assert transformer_name in VALID_NAMES - if transformer_name.startswith("CLIP:"): - return LipFD(transformer_name[5:]) - else: - assert False - - -def get_loss(): - return RALoss() diff --git a/video/lipfd/model_code/models/clip/__init__.py b/video/lipfd/model_code/models/clip/__init__.py deleted file mode 100644 index dcc5619538c0f7c782508bdbd9587259d805e0d9..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/models/clip/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .clip import * diff --git a/video/lipfd/model_code/models/clip/bpe_simple_vocab_16e6.txt.gz b/video/lipfd/model_code/models/clip/bpe_simple_vocab_16e6.txt.gz deleted file mode 100644 index 36a15856e00a06a9fbed8cdd34d2393fea4a3113..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/models/clip/bpe_simple_vocab_16e6.txt.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:924691ac288e54409236115652ad4aa250f48203de50a9e4722a6ecd48d6804a -size 1356917 diff --git a/video/lipfd/model_code/models/clip/clip.py b/video/lipfd/model_code/models/clip/clip.py deleted file mode 100644 index 257511e1d40c120e0d64a0f1562d44b2b8a40a17..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/models/clip/clip.py +++ /dev/null @@ -1,237 +0,0 @@ -import hashlib -import os -import urllib -import warnings -from typing import Any, Union, List -from pkg_resources import packaging - -import torch -from PIL import Image -from torchvision.transforms import Compose, Resize, CenterCrop, ToTensor, Normalize -from tqdm import tqdm - -from .model import build_model -from .simple_tokenizer import SimpleTokenizer as _Tokenizer - -try: - from torchvision.transforms import InterpolationMode - BICUBIC = InterpolationMode.BICUBIC -except ImportError: - BICUBIC = Image.BICUBIC - - -if packaging.version.parse(torch.__version__) < packaging.version.parse("1.7.1"): - warnings.warn("PyTorch version 1.7.1 or higher is recommended") - - -__all__ = ["available_models", "load", "tokenize"] -_tokenizer = _Tokenizer() - -_MODELS = { - "RN50": "https://openaipublic.azureedge.net/clip/models/afeb0e10f9e5a86da6080e35cf09123aca3b358a0c3e3b6c78a7b63bc04b6762/RN50.pt", - "RN101": "https://openaipublic.azureedge.net/clip/models/8fa8567bab74a42d41c5915025a8e4538c3bdbe8804a470a72f30b0d94fab599/RN101.pt", - "RN50x4": "https://openaipublic.azureedge.net/clip/models/7e526bd135e493cef0776de27d5f42653e6b4c8bf9e0f653bb11773263205fdd/RN50x4.pt", - "RN50x16": "https://openaipublic.azureedge.net/clip/models/52378b407f34354e150460fe41077663dd5b39c54cd0bfd2b27167a4a06ec9aa/RN50x16.pt", - "RN50x64": "https://openaipublic.azureedge.net/clip/models/be1cfb55d75a9666199fb2206c106743da0f6468c9d327f3e0d0a543a9919d9c/RN50x64.pt", - "ViT-B/32": "https://openaipublic.azureedge.net/clip/models/40d365715913c9da98579312b702a82c18be219cc2a73407c4526f58eba950af/ViT-B-32.pt", - "ViT-B/16": "https://openaipublic.azureedge.net/clip/models/5806e77cd80f8b59890b7e101eabd078d9fb84e6937f9e85e4ecb61988df416f/ViT-B-16.pt", - "ViT-L/14": "https://openaipublic.azureedge.net/clip/models/b8cca3fd41ae0c99ba7e8951adf17d267cdb84cd88be6f7c2e0eca1737a03836/ViT-L-14.pt", - "ViT-L/14@336px": "https://openaipublic.azureedge.net/clip/models/3035c92b350959924f9f00213499208652fc7ea050643e8b385c2dac08641f02/ViT-L-14-336px.pt", -} - - -def _download(url: str, root: str): - os.makedirs(root, exist_ok=True) - filename = os.path.basename(url) - - expected_sha256 = url.split("/")[-2] - download_target = os.path.join(root, filename) - - if os.path.exists(download_target) and not os.path.isfile(download_target): - raise RuntimeError(f"{download_target} exists and is not a regular file") - - if os.path.isfile(download_target): - if hashlib.sha256(open(download_target, "rb").read()).hexdigest() == expected_sha256: - return download_target - else: - warnings.warn(f"{download_target} exists, but the SHA256 checksum does not match; re-downloading the file") - - with urllib.request.urlopen(url) as source, open(download_target, "wb") as output: - with tqdm(total=int(source.info().get("Content-Length")), ncols=80, unit='iB', unit_scale=True, unit_divisor=1024) as loop: - while True: - buffer = source.read(8192) - if not buffer: - break - - output.write(buffer) - loop.update(len(buffer)) - - if hashlib.sha256(open(download_target, "rb").read()).hexdigest() != expected_sha256: - raise RuntimeError("Model has been downloaded but the SHA256 checksum does not not match") - - return download_target - - -def _convert_image_to_rgb(image): - return image.convert("RGB") - - -def _transform(n_px): - return Compose([ - Resize(n_px, interpolation=BICUBIC), - CenterCrop(n_px), - _convert_image_to_rgb, - ToTensor(), - Normalize((0.48145466, 0.4578275, 0.40821073), (0.26862954, 0.26130258, 0.27577711)), - ]) - - -def available_models() -> List[str]: - """Returns the names of available CLIP models""" - return list(_MODELS.keys()) - - -def load(name: str, device: Union[str, torch.device] = "cuda" if torch.cuda.is_available() else "cpu", jit: bool = False, download_root: str = None): - """Load a CLIP model - - Parameters - ---------- - name : str - A model name listed by `clip.available_models()`, or the path to a model checkpoint containing the state_dict - - device : Union[str, torch.device] - The device to put the loaded model - - jit : bool - Whether to load the optimized JIT model or more hackable non-JIT model (default). - - download_root: str - path to download the model files; by default, it uses "~/.cache/clip" - - Returns - ------- - model : torch.nn.Module - The CLIP model - - preprocess : Callable[[PIL.Image], torch.Tensor] - A torchvision transform that converts a PIL image into a tensor that the returned model can take as its input - """ - if name in _MODELS: - model_path = _download(_MODELS[name], download_root or os.path.expanduser("~/.cache/clip")) - elif os.path.isfile(name): - model_path = name - else: - raise RuntimeError(f"Model {name} not found; available models = {available_models()}") - - with open(model_path, 'rb') as opened_file: - try: - # loading JIT archive - model = torch.jit.load(opened_file, map_location=device if jit else "cpu").eval() - state_dict = None - except RuntimeError: - # loading saved state dict - if jit: - warnings.warn(f"File {model_path} is not a JIT archive. Loading as a state dict instead") - jit = False - state_dict = torch.load(opened_file, map_location="cpu") - - if not jit: - model = build_model(state_dict or model.state_dict()).to(device) - if str(device) == "cpu": - model.float() - return model, _transform(model.visual.input_resolution) - - # patch the device names - device_holder = torch.jit.trace(lambda: torch.ones([]).to(torch.device(device)), example_inputs=[]) - device_node = [n for n in device_holder.graph.findAllNodes("prim::Constant") if "Device" in repr(n)][-1] - - def patch_device(module): - try: - graphs = [module.graph] if hasattr(module, "graph") else [] - except RuntimeError: - graphs = [] - - if hasattr(module, "forward1"): - graphs.append(module.forward1.graph) - - for graph in graphs: - for node in graph.findAllNodes("prim::Constant"): - if "value" in node.attributeNames() and str(node["value"]).startswith("cuda"): - node.copyAttributes(device_node) - - model.apply(patch_device) - patch_device(model.encode_image) - patch_device(model.encode_text) - - # patch dtype to float32 on CPU - if str(device) == "cpu": - float_holder = torch.jit.trace(lambda: torch.ones([]).float(), example_inputs=[]) - float_input = list(float_holder.graph.findNode("aten::to").inputs())[1] - float_node = float_input.node() - - def patch_float(module): - try: - graphs = [module.graph] if hasattr(module, "graph") else [] - except RuntimeError: - graphs = [] - - if hasattr(module, "forward1"): - graphs.append(module.forward1.graph) - - for graph in graphs: - for node in graph.findAllNodes("aten::to"): - inputs = list(node.inputs()) - for i in [1, 2]: # dtype can be the second or third argument to aten::to() - if inputs[i].node()["value"] == 5: - inputs[i].node().copyAttributes(float_node) - - model.apply(patch_float) - patch_float(model.encode_image) - patch_float(model.encode_text) - - model.float() - - return model, _transform(model.input_resolution.item()) - - -def tokenize(texts: Union[str, List[str]], context_length: int = 77, truncate: bool = False) -> Union[torch.IntTensor, torch.LongTensor]: - """ - Returns the tokenized representation of given input string(s) - - Parameters - ---------- - texts : Union[str, List[str]] - An input string or a list of input strings to tokenize - - context_length : int - The context length to use; all CLIP models use 77 as the context length - - truncate: bool - Whether to truncate the text in case its encoding is longer than the context length - - Returns - ------- - A two-dimensional tensor containing the resulting tokens, shape = [number of input strings, context_length]. - We return LongTensor when torch version is <1.8.0, since older index_select requires indices to be long. - """ - if isinstance(texts, str): - texts = [texts] - - sot_token = _tokenizer.encoder["<|startoftext|>"] - eot_token = _tokenizer.encoder["<|endoftext|>"] - all_tokens = [[sot_token] + _tokenizer.encode(text) + [eot_token] for text in texts] - if packaging.version.parse(torch.__version__) < packaging.version.parse("1.8.0"): - result = torch.zeros(len(all_tokens), context_length, dtype=torch.long) - else: - result = torch.zeros(len(all_tokens), context_length, dtype=torch.int) - - for i, tokens in enumerate(all_tokens): - if len(tokens) > context_length: - if truncate: - tokens = tokens[:context_length] - tokens[-1] = eot_token - else: - raise RuntimeError(f"Input {texts[i]} is too long for context length {context_length}") - result[i, :len(tokens)] = torch.tensor(tokens) - - return result diff --git a/video/lipfd/model_code/models/clip/model.py b/video/lipfd/model_code/models/clip/model.py deleted file mode 100644 index c60bda69ab0d35af0b64517d32595d9c03f8721c..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/models/clip/model.py +++ /dev/null @@ -1,452 +0,0 @@ -from collections import OrderedDict -from typing import Tuple, Union - -import numpy as np -import torch -import torch.nn.functional as F -from torch import nn - - -class Bottleneck(nn.Module): - expansion = 4 - - def __init__(self, inplanes, planes, stride=1): - super().__init__() - - # all conv layers have stride 1. an avgpool is performed after the second convolution when stride > 1 - self.conv1 = nn.Conv2d(inplanes, planes, 1, bias=False) - self.bn1 = nn.BatchNorm2d(planes) - self.relu1 = nn.ReLU(inplace=True) - - self.conv2 = nn.Conv2d(planes, planes, 3, padding=1, bias=False) - self.bn2 = nn.BatchNorm2d(planes) - self.relu2 = nn.ReLU(inplace=True) - - self.avgpool = nn.AvgPool2d(stride) if stride > 1 else nn.Identity() - - self.conv3 = nn.Conv2d(planes, planes * self.expansion, 1, bias=False) - self.bn3 = nn.BatchNorm2d(planes * self.expansion) - self.relu3 = nn.ReLU(inplace=True) - - self.downsample = None - self.stride = stride - - if stride > 1 or inplanes != planes * Bottleneck.expansion: - # downsampling layer is prepended with an avgpool, and the subsequent convolution has stride 1 - self.downsample = nn.Sequential(OrderedDict([ - ("-1", nn.AvgPool2d(stride)), - ("0", nn.Conv2d(inplanes, planes * self.expansion, 1, stride=1, bias=False)), - ("1", nn.BatchNorm2d(planes * self.expansion)) - ])) - - def forward(self, x: torch.Tensor): - identity = x - - out = self.relu1(self.bn1(self.conv1(x))) - out = self.relu2(self.bn2(self.conv2(out))) - out = self.avgpool(out) - out = self.bn3(self.conv3(out)) - - if self.downsample is not None: - identity = self.downsample(x) - - out += identity - out = self.relu3(out) - return out - - -class AttentionPool2d(nn.Module): - def __init__(self, spacial_dim: int, embed_dim: int, num_heads: int, output_dim: int = None): - super().__init__() - self.positional_embedding = nn.Parameter(torch.randn(spacial_dim ** 2 + 1, embed_dim) / embed_dim ** 0.5) - self.k_proj = nn.Linear(embed_dim, embed_dim) - self.q_proj = nn.Linear(embed_dim, embed_dim) - self.v_proj = nn.Linear(embed_dim, embed_dim) - self.c_proj = nn.Linear(embed_dim, output_dim or embed_dim) - self.num_heads = num_heads - - def forward(self, x): - x = x.flatten(start_dim=2).permute(2, 0, 1) # NCHW -> (HW)NC - x = torch.cat([x.mean(dim=0, keepdim=True), x], dim=0) # (HW+1)NC - x = x + self.positional_embedding[:, None, :].to(x.dtype) # (HW+1)NC - x, _ = F.multi_head_attention_forward( - query=x[:1], key=x, value=x, - embed_dim_to_check=x.shape[-1], - num_heads=self.num_heads, - q_proj_weight=self.q_proj.weight, - k_proj_weight=self.k_proj.weight, - v_proj_weight=self.v_proj.weight, - in_proj_weight=None, - in_proj_bias=torch.cat([self.q_proj.bias, self.k_proj.bias, self.v_proj.bias]), - bias_k=None, - bias_v=None, - add_zero_attn=False, - dropout_p=0, - out_proj_weight=self.c_proj.weight, - out_proj_bias=self.c_proj.bias, - use_separate_proj_weight=True, - training=self.training, - need_weights=False - ) - return x.squeeze(0) - - -class ModifiedResNet(nn.Module): - """ - A ResNet class that is similar to torchvision's but contains the following changes: - - There are now 3 "stem" convolutions as opposed to 1, with an average pool instead of a max pool. - - Performs anti-aliasing strided convolutions, where an avgpool is prepended to convolutions with stride > 1 - - The final pooling layer is a QKV attention instead of an average pool - """ - - def __init__(self, layers, output_dim, heads, input_resolution=224, width=64): - super().__init__() - self.output_dim = output_dim - self.input_resolution = input_resolution - - # the 3-layer stem - self.conv1 = nn.Conv2d(3, width // 2, kernel_size=3, stride=2, padding=1, bias=False) - self.bn1 = nn.BatchNorm2d(width // 2) - self.relu1 = nn.ReLU(inplace=True) - self.conv2 = nn.Conv2d(width // 2, width // 2, kernel_size=3, padding=1, bias=False) - self.bn2 = nn.BatchNorm2d(width // 2) - self.relu2 = nn.ReLU(inplace=True) - self.conv3 = nn.Conv2d(width // 2, width, kernel_size=3, padding=1, bias=False) - self.bn3 = nn.BatchNorm2d(width) - self.relu3 = nn.ReLU(inplace=True) - self.avgpool = nn.AvgPool2d(2) - - # residual layers - self._inplanes = width # this is a *mutable* variable used during construction - self.layer1 = self._make_layer(width, layers[0]) - self.layer2 = self._make_layer(width * 2, layers[1], stride=2) - self.layer3 = self._make_layer(width * 4, layers[2], stride=2) - self.layer4 = self._make_layer(width * 8, layers[3], stride=2) - - embed_dim = width * 32 # the ResNet feature dimension - self.attnpool = AttentionPool2d(input_resolution // 32, embed_dim, heads, output_dim) - - def _make_layer(self, planes, blocks, stride=1): - layers = [Bottleneck(self._inplanes, planes, stride)] - - self._inplanes = planes * Bottleneck.expansion - for _ in range(1, blocks): - layers.append(Bottleneck(self._inplanes, planes)) - - return nn.Sequential(*layers) - - def forward(self, x): - def stem(x): - x = self.relu1(self.bn1(self.conv1(x))) - x = self.relu2(self.bn2(self.conv2(x))) - x = self.relu3(self.bn3(self.conv3(x))) - x = self.avgpool(x) - return x - - x = x.type(self.conv1.weight.dtype) - x = stem(x) - x = self.layer1(x) - x = self.layer2(x) - x = self.layer3(x) - x = self.layer4(x) - x = self.attnpool(x) - - return x - - -class LayerNorm(nn.LayerNorm): - """Subclass torch's LayerNorm to handle fp16.""" - - def forward(self, x: torch.Tensor): - orig_type = x.dtype - ret = super().forward(x.type(torch.float32)) - return ret.type(orig_type) - - -class QuickGELU(nn.Module): - def forward(self, x: torch.Tensor): - return x * torch.sigmoid(1.702 * x) - - -class ResidualAttentionBlock(nn.Module): - def __init__(self, d_model: int, n_head: int, attn_mask: torch.Tensor = None): - super().__init__() - - self.attn = nn.MultiheadAttention(d_model, n_head) - self.ln_1 = LayerNorm(d_model) - self.mlp = nn.Sequential(OrderedDict([ - ("c_fc", nn.Linear(d_model, d_model * 4)), - ("gelu", QuickGELU()), - ("c_proj", nn.Linear(d_model * 4, d_model)) - ])) - self.ln_2 = LayerNorm(d_model) - self.attn_mask = attn_mask - - def attention(self, x: torch.Tensor): - self.attn_mask = self.attn_mask.to(dtype=x.dtype, device=x.device) if self.attn_mask is not None else None - return self.attn(x, x, x, need_weights=False, attn_mask=self.attn_mask)[0] - - def forward(self, x: torch.Tensor): - x = x + self.attention(self.ln_1(x)) - x = x + self.mlp(self.ln_2(x)) - return x - - -class Transformer(nn.Module): - def __init__(self, width: int, layers: int, heads: int, attn_mask: torch.Tensor = None): - super().__init__() - self.width = width - self.layers = layers - self.resblocks = nn.Sequential(*[ResidualAttentionBlock(width, heads, attn_mask) for _ in range(layers)]) - - def forward(self, x: torch.Tensor): - out = {} - for idx, layer in enumerate(self.resblocks.children()): - x = layer(x) - out['layer'+str(idx)] = x[0] # shape:LND. choose cls token feature - return out, x - - # return self.resblocks(x) # This is the original code - - -class VisionTransformer(nn.Module): - def __init__(self, input_resolution: int, patch_size: int, width: int, layers: int, heads: int, output_dim: int): - super().__init__() - self.input_resolution = input_resolution - self.output_dim = output_dim - self.conv1 = nn.Conv2d(in_channels=3, out_channels=width, kernel_size=patch_size, stride=patch_size, bias=False) - - scale = width ** -0.5 - self.class_embedding = nn.Parameter(scale * torch.randn(width)) - self.positional_embedding = nn.Parameter(scale * torch.randn((input_resolution // patch_size) ** 2 + 1, width)) - self.ln_pre = LayerNorm(width) - - self.transformer = Transformer(width, layers, heads) - - self.ln_post = LayerNorm(width) - self.proj = nn.Parameter(scale * torch.randn(width, output_dim)) - - - - def forward(self, x: torch.Tensor): - x = self.conv1(x) # shape = [*, width, grid, grid] - x = x.reshape(x.shape[0], x.shape[1], -1) # shape = [*, width, grid ** 2] - x = x.permute(0, 2, 1) # shape = [*, grid ** 2, width] - x = torch.cat([self.class_embedding.to(x.dtype) + torch.zeros(x.shape[0], 1, x.shape[-1], dtype=x.dtype, device=x.device), x], dim=1) # shape = [*, grid ** 2 + 1, width] - x = x + self.positional_embedding.to(x.dtype) - x = self.ln_pre(x) - - x = x.permute(1, 0, 2) # NLD -> LND - out, x = self.transformer(x) - x = x.permute(1, 0, 2) # LND -> NLD - - x = self.ln_post(x[:, 0, :]) - - - out['before_projection'] = x - - if self.proj is not None: - x = x @ self.proj - out['after_projection'] = x - - # Return both intermediate features and final clip feature - # return out - - # This only returns CLIP features - return x - - -class CLIP(nn.Module): - def __init__(self, - embed_dim: int, - # vision - image_resolution: int, - vision_layers: Union[Tuple[int, int, int, int], int], - vision_width: int, - vision_patch_size: int, - # text - context_length: int, - vocab_size: int, - transformer_width: int, - transformer_heads: int, - transformer_layers: int - ): - super().__init__() - - self.context_length = context_length - - if isinstance(vision_layers, (tuple, list)): - vision_heads = vision_width * 32 // 64 - self.visual = ModifiedResNet( - layers=vision_layers, - output_dim=embed_dim, - heads=vision_heads, - input_resolution=image_resolution, - width=vision_width - ) - else: - vision_heads = vision_width // 64 - self.visual = VisionTransformer( - input_resolution=image_resolution, - patch_size=vision_patch_size, - width=vision_width, - layers=vision_layers, - heads=vision_heads, - output_dim=embed_dim - ) - - self.transformer = Transformer( - width=transformer_width, - layers=transformer_layers, - heads=transformer_heads, - attn_mask=self.build_attention_mask() - ) - - self.vocab_size = vocab_size - self.token_embedding = nn.Embedding(vocab_size, transformer_width) - self.positional_embedding = nn.Parameter(torch.empty(self.context_length, transformer_width)) - self.ln_final = LayerNorm(transformer_width) - - self.text_projection = nn.Parameter(torch.empty(transformer_width, embed_dim)) - self.logit_scale = nn.Parameter(torch.ones([]) * np.log(1 / 0.07)) - - self.initialize_parameters() - - def initialize_parameters(self): - nn.init.normal_(self.token_embedding.weight, std=0.02) - nn.init.normal_(self.positional_embedding, std=0.01) - - if isinstance(self.visual, ModifiedResNet): - if self.visual.attnpool is not None: - std = self.visual.attnpool.c_proj.in_features ** -0.5 - nn.init.normal_(self.visual.attnpool.q_proj.weight, std=std) - nn.init.normal_(self.visual.attnpool.k_proj.weight, std=std) - nn.init.normal_(self.visual.attnpool.v_proj.weight, std=std) - nn.init.normal_(self.visual.attnpool.c_proj.weight, std=std) - - for resnet_block in [self.visual.layer1, self.visual.layer2, self.visual.layer3, self.visual.layer4]: - for name, param in resnet_block.named_parameters(): - if name.endswith("bn3.weight"): - nn.init.zeros_(param) - - proj_std = (self.transformer.width ** -0.5) * ((2 * self.transformer.layers) ** -0.5) - attn_std = self.transformer.width ** -0.5 - fc_std = (2 * self.transformer.width) ** -0.5 - for block in self.transformer.resblocks: - nn.init.normal_(block.attn.in_proj_weight, std=attn_std) - nn.init.normal_(block.attn.out_proj.weight, std=proj_std) - nn.init.normal_(block.mlp.c_fc.weight, std=fc_std) - nn.init.normal_(block.mlp.c_proj.weight, std=proj_std) - - if self.text_projection is not None: - nn.init.normal_(self.text_projection, std=self.transformer.width ** -0.5) - - def build_attention_mask(self): - # lazily create causal attention mask, with full attention between the vision tokens - # pytorch uses additive attention mask; fill with -inf - mask = torch.empty(self.context_length, self.context_length) - mask.fill_(float("-inf")) - mask.triu_(1) # zero out the lower diagonal - return mask - - @property - def dtype(self): - return self.visual.conv1.weight.dtype - - def encode_image(self, image): - return self.visual(image.type(self.dtype)) - - def encode_text(self, text): - x = self.token_embedding(text).type(self.dtype) # [batch_size, n_ctx, d_model] - - x = x + self.positional_embedding.type(self.dtype) - x = x.permute(1, 0, 2) # NLD -> LND - x = self.transformer(x) - x = x.permute(1, 0, 2) # LND -> NLD - x = self.ln_final(x).type(self.dtype) - - # x.shape = [batch_size, n_ctx, transformer.width] - # take features from the eot embedding (eot_token is the highest number in each sequence) - x = x[torch.arange(x.shape[0]), text.argmax(dim=-1)] @ self.text_projection - - return x - - def forward(self, image, text): - image_features = self.encode_image(image) - text_features = self.encode_text(text) - - # normalized features - image_features = image_features / image_features.norm(dim=1, keepdim=True) - text_features = text_features / text_features.norm(dim=1, keepdim=True) - - # cosine similarity as logits - logit_scale = self.logit_scale.exp() - logits_per_image = logit_scale * image_features @ text_features.t() - logits_per_text = logits_per_image.t() - - # shape = [global_batch_size, global_batch_size] - return logits_per_image, logits_per_text - - -def convert_weights(model: nn.Module): - """Convert applicable model parameters to fp16""" - - def _convert_weights_to_fp16(l): - if isinstance(l, (nn.Conv1d, nn.Conv2d, nn.Linear)): - l.weight.data = l.weight.data.half() - if l.bias is not None: - l.bias.data = l.bias.data.half() - - if isinstance(l, nn.MultiheadAttention): - for attr in [*[f"{s}_proj_weight" for s in ["in", "q", "k", "v"]], "in_proj_bias", "bias_k", "bias_v"]: - tensor = getattr(l, attr) - if tensor is not None: - tensor.data = tensor.data.half() - - for name in ["text_projection", "proj"]: - if hasattr(l, name): - attr = getattr(l, name) - if attr is not None: - attr.data = attr.data.half() - - model.apply(_convert_weights_to_fp16) - - -def build_model(state_dict: dict): - vit = "visual.proj" in state_dict - - if vit: - vision_width = state_dict["visual.conv1.weight"].shape[0] - vision_layers = len([k for k in state_dict.keys() if k.startswith("visual.") and k.endswith(".attn.in_proj_weight")]) - vision_patch_size = state_dict["visual.conv1.weight"].shape[-1] - grid_size = round((state_dict["visual.positional_embedding"].shape[0] - 1) ** 0.5) - image_resolution = vision_patch_size * grid_size - else: - counts: list = [len(set(k.split(".")[2] for k in state_dict if k.startswith(f"visual.layer{b}"))) for b in [1, 2, 3, 4]] - vision_layers = tuple(counts) - vision_width = state_dict["visual.layer1.0.conv1.weight"].shape[0] - output_width = round((state_dict["visual.attnpool.positional_embedding"].shape[0] - 1) ** 0.5) - vision_patch_size = None - assert output_width ** 2 + 1 == state_dict["visual.attnpool.positional_embedding"].shape[0] - image_resolution = output_width * 32 - - embed_dim = state_dict["text_projection"].shape[1] - context_length = state_dict["positional_embedding"].shape[0] - vocab_size = state_dict["token_embedding.weight"].shape[0] - transformer_width = state_dict["ln_final.weight"].shape[0] - transformer_heads = transformer_width // 64 - transformer_layers = len(set(k.split(".")[2] for k in state_dict if k.startswith("transformer.resblocks"))) - - model = CLIP( - embed_dim, - image_resolution, vision_layers, vision_width, vision_patch_size, - context_length, vocab_size, transformer_width, transformer_heads, transformer_layers - ) - - for key in ["input_resolution", "context_length", "vocab_size"]: - if key in state_dict: - del state_dict[key] - - convert_weights(model) - model.load_state_dict(state_dict) - return model.eval() diff --git a/video/lipfd/model_code/models/clip/simple_tokenizer.py b/video/lipfd/model_code/models/clip/simple_tokenizer.py deleted file mode 100644 index 0a66286b7d5019c6e221932a813768038f839c91..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/models/clip/simple_tokenizer.py +++ /dev/null @@ -1,132 +0,0 @@ -import gzip -import html -import os -from functools import lru_cache - -import ftfy -import regex as re - - -@lru_cache() -def default_bpe(): - return os.path.join(os.path.dirname(os.path.abspath(__file__)), "bpe_simple_vocab_16e6.txt.gz") - - -@lru_cache() -def bytes_to_unicode(): - """ - Returns list of utf-8 byte and a corresponding list of unicode strings. - The reversible bpe codes work on unicode strings. - This means you need a large # of unicode characters in your vocab if you want to avoid UNKs. - When you're at something like a 10B token dataset you end up needing around 5K for decent coverage. - This is a signficant percentage of your normal, say, 32K bpe vocab. - To avoid that, we want lookup tables between utf-8 bytes and unicode strings. - And avoids mapping to whitespace/control characters the bpe code barfs on. - """ - bs = list(range(ord("!"), ord("~")+1))+list(range(ord("¡"), ord("¬")+1))+list(range(ord("®"), ord("ÿ")+1)) - cs = bs[:] - n = 0 - for b in range(2**8): - if b not in bs: - bs.append(b) - cs.append(2**8+n) - n += 1 - cs = [chr(n) for n in cs] - return dict(zip(bs, cs)) - - -def get_pairs(word): - """Return set of symbol pairs in a word. - Word is represented as tuple of symbols (symbols being variable-length strings). - """ - pairs = set() - prev_char = word[0] - for char in word[1:]: - pairs.add((prev_char, char)) - prev_char = char - return pairs - - -def basic_clean(text): - text = ftfy.fix_text(text) - text = html.unescape(html.unescape(text)) - return text.strip() - - -def whitespace_clean(text): - text = re.sub(r'\s+', ' ', text) - text = text.strip() - return text - - -class SimpleTokenizer(object): - def __init__(self, bpe_path: str = default_bpe()): - self.byte_encoder = bytes_to_unicode() - self.byte_decoder = {v: k for k, v in self.byte_encoder.items()} - merges = gzip.open(bpe_path).read().decode("utf-8").split('\n') - merges = merges[1:49152-256-2+1] - merges = [tuple(merge.split()) for merge in merges] - vocab = list(bytes_to_unicode().values()) - vocab = vocab + [v+'' for v in vocab] - for merge in merges: - vocab.append(''.join(merge)) - vocab.extend(['<|startoftext|>', '<|endoftext|>']) - self.encoder = dict(zip(vocab, range(len(vocab)))) - self.decoder = {v: k for k, v in self.encoder.items()} - self.bpe_ranks = dict(zip(merges, range(len(merges)))) - self.cache = {'<|startoftext|>': '<|startoftext|>', '<|endoftext|>': '<|endoftext|>'} - self.pat = re.compile(r"""<\|startoftext\|>|<\|endoftext\|>|'s|'t|'re|'ve|'m|'ll|'d|[\p{L}]+|[\p{N}]|[^\s\p{L}\p{N}]+""", re.IGNORECASE) - - def bpe(self, token): - if token in self.cache: - return self.cache[token] - word = tuple(token[:-1]) + ( token[-1] + '',) - pairs = get_pairs(word) - - if not pairs: - return token+'' - - while True: - bigram = min(pairs, key = lambda pair: self.bpe_ranks.get(pair, float('inf'))) - if bigram not in self.bpe_ranks: - break - first, second = bigram - new_word = [] - i = 0 - while i < len(word): - try: - j = word.index(first, i) - new_word.extend(word[i:j]) - i = j - except: - new_word.extend(word[i:]) - break - - if word[i] == first and i < len(word)-1 and word[i+1] == second: - new_word.append(first+second) - i += 2 - else: - new_word.append(word[i]) - i += 1 - new_word = tuple(new_word) - word = new_word - if len(word) == 1: - break - else: - pairs = get_pairs(word) - word = ' '.join(word) - self.cache[token] = word - return word - - def encode(self, text): - bpe_tokens = [] - text = whitespace_clean(basic_clean(text)).lower() - for token in re.findall(self.pat, text): - token = ''.join(self.byte_encoder[b] for b in token.encode('utf-8')) - bpe_tokens.extend(self.encoder[bpe_token] for bpe_token in self.bpe(token).split(' ')) - return bpe_tokens - - def decode(self, tokens): - text = ''.join([self.decoder[token] for token in tokens]) - text = bytearray([self.byte_decoder[c] for c in text]).decode('utf-8', errors="replace").replace('', ' ') - return text diff --git a/video/lipfd/model_code/models/clip_models.py b/video/lipfd/model_code/models/clip_models.py deleted file mode 100644 index 44de4db8ee4dd77690970fc76eb671b1b3a43882..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/models/clip_models.py +++ /dev/null @@ -1,24 +0,0 @@ -from .clip import clip -from PIL import Image -import torch.nn as nn - - -CHANNELS = { - "RN50" : 1024, - "ViT-L/14" : 768 -} - -class CLIPModel(nn.Module): - def __init__(self, name, num_classes=1): - super(CLIPModel, self).__init__() - - self.model, self.preprocess = clip.load(name, device="cpu") # self.preprecess will not be used during training, which is handled in Dataset class - self.fc = nn.Linear( CHANNELS[name], num_classes ) - - - def forward(self, x, return_feature=False): - features = self.model.encode_image(x) - if return_feature: - return features - return self.fc(features) - diff --git a/video/lipfd/model_code/models/region_awareness.py b/video/lipfd/model_code/models/region_awareness.py deleted file mode 100644 index dd9c2976ae60ba52bdd81ad92b78a15b04ab6c69..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/models/region_awareness.py +++ /dev/null @@ -1,303 +0,0 @@ -import torch -from torch import Tensor -import torch.nn as nn -from typing import Type, Any, Callable, Union, List, Optional -from torch.nn.functional import softmax - -try: - from torch.hub import load_state_dict_from_url -except ImportError: - from torch.utils.model_zoo import load_url as load_state_dict_from_url - -model_urls = { - 'resnet18': 'https://download.pytorch.org/models/resnet18-f37072fd.pth', - 'resnet34': 'https://download.pytorch.org/models/resnet34-b627a593.pth', - 'resnet50': 'https://download.pytorch.org/models/resnet50-0676ba61.pth', - 'resnet101': 'https://download.pytorch.org/models/resnet101-63fe2227.pth', - 'resnet152': 'https://download.pytorch.org/models/resnet152-394f9c45.pth', - 'resnext50_32x4d': 'https://download.pytorch.org/models/resnext50_32x4d-7cdf4587.pth', - 'resnext101_32x8d': 'https://download.pytorch.org/models/resnext101_32x8d-8ba56ff5.pth', - 'wideget_backbone50_2': 'https://download.pytorch.org/models/wideget_backbone50_2-95faca4d.pth', - 'wideget_backbone101_2': 'https://download.pytorch.org/models/wideget_backbone101_2-32ee1156.pth', -} - - -def conv3x3(in_planes: int, out_planes: int, stride: int = 1, groups: int = 1, dilation: int = 1) -> nn.Conv2d: - """3x3 convolution with padding""" - return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, - padding=dilation, groups=groups, bias=False, dilation=dilation) - - -def conv1x1(in_planes: int, out_planes: int, stride: int = 1) -> nn.Conv2d: - """1x1 convolution""" - return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) - - -class BasicBlock(nn.Module): - expansion: int = 1 - - def __init__( - self, - inplanes: int, - planes: int, - stride: int = 1, - downsample: Optional[nn.Module] = None, - groups: int = 1, - base_width: int = 64, - dilation: int = 1, - norm_layer: Optional[Callable[..., nn.Module]] = None - ) -> None: - super(BasicBlock, self).__init__() - if norm_layer is None: - norm_layer = nn.BatchNorm2d - if groups != 1 or base_width != 64: - raise ValueError('BasicBlock only supports groups=1 and base_width=64') - if dilation > 1: - raise NotImplementedError("Dilation > 1 not supported in BasicBlock") - # Both self.conv1 and self.downsample layers downsample the input when stride != 1 - self.conv1 = conv3x3(inplanes, planes, stride) - self.bn1 = norm_layer(planes) - self.relu = nn.ReLU(inplace=True) - self.conv2 = conv3x3(planes, planes) - self.bn2 = norm_layer(planes) - self.downsample = downsample - self.stride = stride - - def forward(self, x: Tensor) -> Tensor: - identity = x - - out = self.conv1(x) - out = self.bn1(out) - out = self.relu(out) - - out = self.conv2(out) - out = self.bn2(out) - - if self.downsample is not None: - identity = self.downsample(x) - - out += identity - out = self.relu(out) - - return out - - -class Bottleneck(nn.Module): - expansion: int = 4 - - def __init__( - self, - inplanes: int, - planes: int, - stride: int = 1, - downsample: Optional[nn.Module] = None, - groups: int = 1, - base_width: int = 64, - dilation: int = 1, - norm_layer: Optional[Callable[..., nn.Module]] = None - ) -> None: - super(Bottleneck, self).__init__() - if norm_layer is None: - norm_layer = nn.BatchNorm2d - width = int(planes * (base_width / 64.)) * groups - # Both self.conv2 and self.downsample layers downsample the input when stride != 1 - self.conv1 = conv1x1(inplanes, width) - self.bn1 = norm_layer(width) - self.conv2 = conv3x3(width, width, stride, groups, dilation) - self.bn2 = norm_layer(width) - self.conv3 = conv1x1(width, planes * self.expansion) - self.bn3 = norm_layer(planes * self.expansion) - self.relu = nn.ReLU(inplace=True) - self.downsample = downsample - self.stride = stride - - def forward(self, x: Tensor) -> Tensor: - identity = x - - out = self.conv1(x) - out = self.bn1(out) - out = self.relu(out) - - out = self.conv2(out) - out = self.bn2(out) - out = self.relu(out) - - out = self.conv3(out) - out = self.bn3(out) - - if self.downsample is not None: - identity = self.downsample(x) - - out += identity - out = self.relu(out) - - return out - - -class ResNet(nn.Module): - - def __init__( - self, - block: Type[Union[BasicBlock, Bottleneck]], - layers: List[int], - num_classes: int = 1000, - zero_init_residual: bool = False, - groups: int = 1, - width_per_group: int = 64, - replace_stride_with_dilation: Optional[List[bool]] = None, - norm_layer: Optional[Callable[..., nn.Module]] = None - ) -> None: - super(ResNet, self).__init__() - if norm_layer is None: - norm_layer = nn.BatchNorm2d - self._norm_layer = norm_layer - - self.inplanes = 64 - self.dilation = 1 - if replace_stride_with_dilation is None: - # each element in the tuple indicates if we should replace - # the 2x2 stride with a dilated convolution instead - replace_stride_with_dilation = [False, False, False] - if len(replace_stride_with_dilation) != 3: - raise ValueError("replace_stride_with_dilation should be None " - "or a 3-element tuple, got {}".format(replace_stride_with_dilation)) - self.groups = groups - self.base_width = width_per_group - self.conv1 = nn.Conv2d(3, self.inplanes, kernel_size=7, stride=2, padding=3, - bias=False) - self.bn1 = norm_layer(self.inplanes) - self.relu = nn.ReLU(inplace=True) - self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) - self.layer1 = self._make_layer(block, 64, layers[0]) - self.layer2 = self._make_layer(block, 128, layers[1], stride=2, - dilate=replace_stride_with_dilation[0]) - self.layer3 = self._make_layer(block, 256, layers[2], stride=2, - dilate=replace_stride_with_dilation[1]) - self.layer4 = self._make_layer(block, 512, layers[3], stride=2, - dilate=replace_stride_with_dilation[2]) - self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) - self.get_weight = nn.Sequential( - nn.Linear(512 * block.expansion + 768, 1), # TODO: 768 is the length of global feature - nn.Sigmoid() - ) - self.fc = nn.Linear(512 * block.expansion + 768, 1) - - for m in self.modules(): - if isinstance(m, nn.Conv2d): - nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') - elif isinstance(m, (nn.BatchNorm2d, nn.GroupNorm)): - nn.init.constant_(m.weight, 1) - nn.init.constant_(m.bias, 0) - - # Zero-initialize the last BN in each residual branch, - # so that the residual branch starts with zeros, and each residual block behaves like an identity. - # This improves the model by 0.2~0.3% according to https://arxiv.org/abs/1706.02677 - if zero_init_residual: - for m in self.modules(): - if isinstance(m, Bottleneck): - nn.init.constant_(m.bn3.weight, 0) # type: ignore[arg-type] - elif isinstance(m, BasicBlock): - nn.init.constant_(m.bn2.weight, 0) # type: ignore[arg-type] - - def _make_layer(self, block: Type[Union[BasicBlock, Bottleneck]], planes: int, blocks: int, - stride: int = 1, dilate: bool = False) -> nn.Sequential: - norm_layer = self._norm_layer - downsample = None - previous_dilation = self.dilation - if dilate: - self.dilation *= stride - stride = 1 - if stride != 1 or self.inplanes != planes * block.expansion: - downsample = nn.Sequential( - conv1x1(self.inplanes, planes * block.expansion, stride), - norm_layer(planes * block.expansion), - ) - - layers = [] - layers.append(block(self.inplanes, planes, stride, downsample, self.groups, - self.base_width, previous_dilation, norm_layer)) - self.inplanes = planes * block.expansion - for _ in range(1, blocks): - layers.append(block(self.inplanes, planes, groups=self.groups, - base_width=self.base_width, dilation=self.dilation, - norm_layer=norm_layer)) - - return nn.Sequential(*layers) - - def _forward_impl(self, x, feature): - # The comment resolution is based on input size is 224*224 imagenet - # f.shape: (batch_size, 3, 224, 224), feature.shape: (batch_size, 768) - features, weights, parts, weights_org, weights_max = [list() for i in range(5)] - for i in range(len(x[0])): - features.clear() - weights.clear() - for j in range(len(x)): - f = x[j][i] - f = self.conv1(f) - f = self.bn1(f) - f = self.relu(f) - f = self.maxpool(f) - f = self.layer1(f) - f = self.layer2(f) - f = self.layer3(f) - f = self.layer4(f) - f = self.avgpool(f) - f = torch.flatten(f, 1) - - # features.append(f) - features.append(torch.cat([f, feature], dim=1)) # concat regional feature with global feature - weights.append(self.get_weight(features[-1])) - - features_stack = torch.stack(features, dim=2) - weights_stack = torch.stack(weights, dim=2) - weights_stack = softmax(weights_stack, dim=2) - - weights_max.append(weights_stack[:, :, :len(x)].max(dim=2)[0]) - weights_org.append(weights_stack[:, :, 0]) - parts.append(features_stack.mul(weights_stack).sum(2).div(weights_stack.sum(2))) - parts_stack = torch.stack(parts, dim=0) - out = parts_stack.sum(0).div(parts_stack.shape[0]) - - pred_score = self.fc(out) - - return pred_score, weights_max, weights_org - - def forward(self, x, feature): - return self._forward_impl(x, feature) - - -def _get_backbone( - arch: str, - block: Type[Union[BasicBlock, Bottleneck]], - layers: List[int], - pretrained: bool, - progress: bool, - **kwargs: Any -) -> ResNet: - model = ResNet(block, layers, num_classes=1, **kwargs) - if pretrained: - state_dict = load_state_dict_from_url(model_urls[arch], progress=progress) - model.load_state_dict(state_dict) - return model - - -def get_backbone(pretrained: bool = False, progress: bool = True, **kwargs: Any) -> ResNet: - r"""ResNet-50 model from - `"Deep Residual Learning for Image Recognition" `_. - - Args: - pretrained (bool): If True, returns a model pre-trained on ImageNet - progress (bool): If True, displays a progress bar of the download to stderr - """ - return _get_backbone('resnet50', Bottleneck, [3, 4, 6, 3], pretrained, progress, **kwargs) - - -if __name__ == '__main__': - model = get_backbone() - data = [[] for i in range(3)] - for i in range(3): - for j in range(5): - data[i].append(torch.rand((10, 3, 224, 224))) - feature = torch.rand((10, 768)) - pred_score, weights_max, weights_org = model(data, feature) - pass diff --git a/video/lipfd/model_code/models/resnet.py b/video/lipfd/model_code/models/resnet.py deleted file mode 100644 index f1bc92c02bab14e7a12ee47b12c789e88694b1a5..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/models/resnet.py +++ /dev/null @@ -1,336 +0,0 @@ -import torch -from torch import Tensor -import torch.nn as nn -from typing import Type, Any, Callable, Union, List, Optional - -try: - from torch.hub import load_state_dict_from_url -except ImportError: - from torch.utils.model_zoo import load_url as load_state_dict_from_url - - -model_urls = { - 'resnet18': 'https://download.pytorch.org/models/resnet18-f37072fd.pth', - 'resnet34': 'https://download.pytorch.org/models/resnet34-b627a593.pth', - 'resnet50': 'https://download.pytorch.org/models/resnet50-0676ba61.pth', - 'resnet101': 'https://download.pytorch.org/models/resnet101-63fe2227.pth', - 'resnet152': 'https://download.pytorch.org/models/resnet152-394f9c45.pth', - 'resnext50_32x4d': 'https://download.pytorch.org/models/resnext50_32x4d-7cdf4587.pth', - 'resnext101_32x8d': 'https://download.pytorch.org/models/resnext101_32x8d-8ba56ff5.pth', - 'wide_resnet50_2': 'https://download.pytorch.org/models/wide_resnet50_2-95faca4d.pth', - 'wide_resnet101_2': 'https://download.pytorch.org/models/wide_resnet101_2-32ee1156.pth', -} - - - - -def conv3x3(in_planes: int, out_planes: int, stride: int = 1, groups: int = 1, dilation: int = 1) -> nn.Conv2d: - """3x3 convolution with padding""" - return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, - padding=dilation, groups=groups, bias=False, dilation=dilation) - - -def conv1x1(in_planes: int, out_planes: int, stride: int = 1) -> nn.Conv2d: - """1x1 convolution""" - return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) - - -class BasicBlock(nn.Module): - expansion: int = 1 - - def __init__( - self, - inplanes: int, - planes: int, - stride: int = 1, - downsample: Optional[nn.Module] = None, - groups: int = 1, - base_width: int = 64, - dilation: int = 1, - norm_layer: Optional[Callable[..., nn.Module]] = None - ) -> None: - super(BasicBlock, self).__init__() - if norm_layer is None: - norm_layer = nn.BatchNorm2d - if groups != 1 or base_width != 64: - raise ValueError('BasicBlock only supports groups=1 and base_width=64') - if dilation > 1: - raise NotImplementedError("Dilation > 1 not supported in BasicBlock") - # Both self.conv1 and self.downsample layers downsample the input when stride != 1 - self.conv1 = conv3x3(inplanes, planes, stride) - self.bn1 = norm_layer(planes) - self.relu = nn.ReLU(inplace=True) - self.conv2 = conv3x3(planes, planes) - self.bn2 = norm_layer(planes) - self.downsample = downsample - self.stride = stride - - def forward(self, x: Tensor) -> Tensor: - identity = x - - out = self.conv1(x) - out = self.bn1(out) - out = self.relu(out) - - out = self.conv2(out) - out = self.bn2(out) - - if self.downsample is not None: - identity = self.downsample(x) - - out += identity - out = self.relu(out) - - return out - - -class Bottleneck(nn.Module): - # Bottleneck in torchvision places the stride for downsampling at 3x3 convolution(self.conv2) - # while original implementation places the stride at the first 1x1 convolution(self.conv1) - # according to "Deep residual learning for image recognition"https://arxiv.org/abs/1512.03385. - # This variant is also known as ResNet V1.5 and improves accuracy according to - # https://ngc.nvidia.com/catalog/model-scripts/nvidia:resnet_50_v1_5_for_pytorch. - - expansion: int = 4 - - def __init__( - self, - inplanes: int, - planes: int, - stride: int = 1, - downsample: Optional[nn.Module] = None, - groups: int = 1, - base_width: int = 64, - dilation: int = 1, - norm_layer: Optional[Callable[..., nn.Module]] = None - ) -> None: - super(Bottleneck, self).__init__() - if norm_layer is None: - norm_layer = nn.BatchNorm2d - width = int(planes * (base_width / 64.)) * groups - # Both self.conv2 and self.downsample layers downsample the input when stride != 1 - self.conv1 = conv1x1(inplanes, width) - self.bn1 = norm_layer(width) - self.conv2 = conv3x3(width, width, stride, groups, dilation) - self.bn2 = norm_layer(width) - self.conv3 = conv1x1(width, planes * self.expansion) - self.bn3 = norm_layer(planes * self.expansion) - self.relu = nn.ReLU(inplace=True) - self.downsample = downsample - self.stride = stride - - def forward(self, x: Tensor) -> Tensor: - identity = x - - out = self.conv1(x) - out = self.bn1(out) - out = self.relu(out) - - out = self.conv2(out) - out = self.bn2(out) - out = self.relu(out) - - out = self.conv3(out) - out = self.bn3(out) - - if self.downsample is not None: - identity = self.downsample(x) - - out += identity - out = self.relu(out) - - return out - - -class ResNet(nn.Module): - - def __init__( - self, - block: Type[Union[BasicBlock, Bottleneck]], - layers: List[int], - num_classes: int = 1000, - zero_init_residual: bool = False, - groups: int = 1, - width_per_group: int = 64, - replace_stride_with_dilation: Optional[List[bool]] = None, - norm_layer: Optional[Callable[..., nn.Module]] = None - ) -> None: - super(ResNet, self).__init__() - if norm_layer is None: - norm_layer = nn.BatchNorm2d - self._norm_layer = norm_layer - - self.inplanes = 64 - self.dilation = 1 - if replace_stride_with_dilation is None: - # each element in the tuple indicates if we should replace - # the 2x2 stride with a dilated convolution instead - replace_stride_with_dilation = [False, False, False] - if len(replace_stride_with_dilation) != 3: - raise ValueError("replace_stride_with_dilation should be None " - "or a 3-element tuple, got {}".format(replace_stride_with_dilation)) - self.groups = groups - self.base_width = width_per_group - self.conv1 = nn.Conv2d(3, self.inplanes, kernel_size=7, stride=2, padding=3, - bias=False) - self.bn1 = norm_layer(self.inplanes) - self.relu = nn.ReLU(inplace=True) - self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) - self.layer1 = self._make_layer(block, 64, layers[0]) - self.layer2 = self._make_layer(block, 128, layers[1], stride=2, - dilate=replace_stride_with_dilation[0]) - self.layer3 = self._make_layer(block, 256, layers[2], stride=2, - dilate=replace_stride_with_dilation[1]) - self.layer4 = self._make_layer(block, 512, layers[3], stride=2, - dilate=replace_stride_with_dilation[2]) - self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) - self.fc = nn.Linear(512 * block.expansion, num_classes) - - for m in self.modules(): - if isinstance(m, nn.Conv2d): - nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') - elif isinstance(m, (nn.BatchNorm2d, nn.GroupNorm)): - nn.init.constant_(m.weight, 1) - nn.init.constant_(m.bias, 0) - - # Zero-initialize the last BN in each residual branch, - # so that the residual branch starts with zeros, and each residual block behaves like an identity. - # This improves the model by 0.2~0.3% according to https://arxiv.org/abs/1706.02677 - if zero_init_residual: - for m in self.modules(): - if isinstance(m, Bottleneck): - nn.init.constant_(m.bn3.weight, 0) # type: ignore[arg-type] - elif isinstance(m, BasicBlock): - nn.init.constant_(m.bn2.weight, 0) # type: ignore[arg-type] - - def _make_layer(self, block: Type[Union[BasicBlock, Bottleneck]], planes: int, blocks: int, - stride: int = 1, dilate: bool = False) -> nn.Sequential: - norm_layer = self._norm_layer - downsample = None - previous_dilation = self.dilation - if dilate: - self.dilation *= stride - stride = 1 - if stride != 1 or self.inplanes != planes * block.expansion: - downsample = nn.Sequential( - conv1x1(self.inplanes, planes * block.expansion, stride), - norm_layer(planes * block.expansion), - ) - - layers = [] - layers.append(block(self.inplanes, planes, stride, downsample, self.groups, - self.base_width, previous_dilation, norm_layer)) - self.inplanes = planes * block.expansion - for _ in range(1, blocks): - layers.append(block(self.inplanes, planes, groups=self.groups, - base_width=self.base_width, dilation=self.dilation, - norm_layer=norm_layer)) - - return nn.Sequential(*layers) - - def _forward_impl(self, x): - # The comment resolution is based on input size is 224*224 imagenet - out = {} - x = self.conv1(x) - x = self.bn1(x) - x = self.relu(x) - x = self.maxpool(x) - out['f0'] = x # N*64*56*56 - - x = self.layer1(x) - out['f1'] = x # N*64*56*56 - - x = self.layer2(x) - out['f2'] = x # N*128*28*28 - - x = self.layer3(x) - out['f3'] = x # N*256*14*14 - - x = self.layer4(x) - out['f4'] = x # N*512*7*7 - - x = self.avgpool(x) - x = torch.flatten(x, 1) - out['penultimate'] = x # N*512 - - x = self.fc(x) - out['logits'] = x # N*1000 - - # return all features - return out - - # return final classification result - # return x - - def forward(self, x): - return self._forward_impl(x) - - -def _resnet( - arch: str, - block: Type[Union[BasicBlock, Bottleneck]], - layers: List[int], - pretrained: bool, - progress: bool, - **kwargs: Any -) -> ResNet: - model = ResNet(block, layers, **kwargs) - if pretrained: - state_dict = load_state_dict_from_url(model_urls[arch], progress=progress) - model.load_state_dict(state_dict) - return model - - -def resnet18(pretrained: bool = False, progress: bool = True, **kwargs: Any) -> ResNet: - r"""ResNet-18 model from - `"Deep Residual Learning for Image Recognition" `_. - - Args: - pretrained (bool): If True, returns a model pre-trained on ImageNet - progress (bool): If True, displays a progress bar of the download to stderr - """ - return _resnet('resnet18', BasicBlock, [2, 2, 2, 2], pretrained, progress, **kwargs) - - -def resnet34(pretrained: bool = False, progress: bool = True, **kwargs: Any) -> ResNet: - r"""ResNet-34 model from - `"Deep Residual Learning for Image Recognition" `_. - - Args: - pretrained (bool): If True, returns a model pre-trained on ImageNet - progress (bool): If True, displays a progress bar of the download to stderr - """ - return _resnet('resnet34', BasicBlock, [3, 4, 6, 3], pretrained, progress, **kwargs) - - -def resnet50(pretrained: bool = False, progress: bool = True, **kwargs: Any) -> ResNet: - r"""ResNet-50 model from - `"Deep Residual Learning for Image Recognition" `_. - - Args: - pretrained (bool): If True, returns a model pre-trained on ImageNet - progress (bool): If True, displays a progress bar of the download to stderr - """ - return _resnet('resnet50', Bottleneck, [3, 4, 6, 3], pretrained, progress, **kwargs) - - -def resnet101(pretrained: bool = False, progress: bool = True, **kwargs: Any) -> ResNet: - r"""ResNet-101 model from - `"Deep Residual Learning for Image Recognition" `_. - - Args: - pretrained (bool): If True, returns a model pre-trained on ImageNet - progress (bool): If True, displays a progress bar of the download to stderr - """ - return _resnet('resnet101', Bottleneck, [3, 4, 23, 3], pretrained, progress, **kwargs) - - -def resnet152(pretrained: bool = False, progress: bool = True, **kwargs: Any) -> ResNet: - r"""ResNet-152 model from - `"Deep Residual Learning for Image Recognition" `_. - - Args: - pretrained (bool): If True, returns a model pre-trained on ImageNet - progress (bool): If True, displays a progress bar of the download to stderr - """ - return _resnet('resnet152', Bottleneck, [3, 8, 36, 3], pretrained, progress, **kwargs) diff --git a/video/lipfd/model_code/models/vision_transformer.py b/video/lipfd/model_code/models/vision_transformer.py deleted file mode 100644 index 618e9626ca43f1afdb3419e19be11f3a3048f81e..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/models/vision_transformer.py +++ /dev/null @@ -1,481 +0,0 @@ -import math -from collections import OrderedDict -from functools import partial -from typing import Any, Callable, List, NamedTuple, Optional - -import torch -import torch.nn as nn - -# from .._internally_replaced_utils import load_state_dict_from_url -from .vision_transformer_misc import ConvNormActivation -from .vision_transformer_utils import _log_api_usage_once - -try: - from torch.hub import load_state_dict_from_url -except ImportError: - from torch.utils.model_zoo import load_url as load_state_dict_from_url - -# __all__ = [ -# "VisionTransformer", -# "vit_b_16", -# "vit_b_32", -# "vit_l_16", -# "vit_l_32", -# ] - -model_urls = { - "vit_b_16": "https://download.pytorch.org/models/vit_b_16-c867db91.pth", - "vit_b_32": "https://download.pytorch.org/models/vit_b_32-d86f8d99.pth", - "vit_l_16": "https://download.pytorch.org/models/vit_l_16-852ce7e3.pth", - "vit_l_32": "https://download.pytorch.org/models/vit_l_32-c7638314.pth", -} - - -class ConvStemConfig(NamedTuple): - out_channels: int - kernel_size: int - stride: int - norm_layer: Callable[..., nn.Module] = nn.BatchNorm2d - activation_layer: Callable[..., nn.Module] = nn.ReLU - - -class MLPBlock(nn.Sequential): - """Transformer MLP block.""" - - def __init__(self, in_dim: int, mlp_dim: int, dropout: float): - super().__init__() - self.linear_1 = nn.Linear(in_dim, mlp_dim) - self.act = nn.GELU() - self.dropout_1 = nn.Dropout(dropout) - self.linear_2 = nn.Linear(mlp_dim, in_dim) - self.dropout_2 = nn.Dropout(dropout) - - nn.init.xavier_uniform_(self.linear_1.weight) - nn.init.xavier_uniform_(self.linear_2.weight) - nn.init.normal_(self.linear_1.bias, std=1e-6) - nn.init.normal_(self.linear_2.bias, std=1e-6) - - -class EncoderBlock(nn.Module): - """Transformer encoder block.""" - - def __init__( - self, - num_heads: int, - hidden_dim: int, - mlp_dim: int, - dropout: float, - attention_dropout: float, - norm_layer: Callable[..., torch.nn.Module] = partial(nn.LayerNorm, eps=1e-6), - ): - super().__init__() - self.num_heads = num_heads - - # Attention block - self.ln_1 = norm_layer(hidden_dim) - self.self_attention = nn.MultiheadAttention(hidden_dim, num_heads, dropout=attention_dropout, batch_first=True) - self.dropout = nn.Dropout(dropout) - - # MLP block - self.ln_2 = norm_layer(hidden_dim) - self.mlp = MLPBlock(hidden_dim, mlp_dim, dropout) - - def forward(self, input: torch.Tensor): - torch._assert(input.dim() == 3, f"Expected (seq_length, batch_size, hidden_dim) got {input.shape}") - x = self.ln_1(input) - x, _ = self.self_attention(query=x, key=x, value=x, need_weights=False) - x = self.dropout(x) - x = x + input - - y = self.ln_2(x) - y = self.mlp(y) - return x + y - - -class Encoder(nn.Module): - """Transformer Model Encoder for sequence to sequence translation.""" - - def __init__( - self, - seq_length: int, - num_layers: int, - num_heads: int, - hidden_dim: int, - mlp_dim: int, - dropout: float, - attention_dropout: float, - norm_layer: Callable[..., torch.nn.Module] = partial(nn.LayerNorm, eps=1e-6), - ): - super().__init__() - # Note that batch_size is on the first dim because - # we have batch_first=True in nn.MultiAttention() by default - self.pos_embedding = nn.Parameter(torch.empty(1, seq_length, hidden_dim).normal_(std=0.02)) # from BERT - self.dropout = nn.Dropout(dropout) - layers: OrderedDict[str, nn.Module] = OrderedDict() - for i in range(num_layers): - layers[f"encoder_layer_{i}"] = EncoderBlock( - num_heads, - hidden_dim, - mlp_dim, - dropout, - attention_dropout, - norm_layer, - ) - self.layers = nn.Sequential(layers) - self.ln = norm_layer(hidden_dim) - - def forward(self, input: torch.Tensor): - torch._assert(input.dim() == 3, f"Expected (batch_size, seq_length, hidden_dim) got {input.shape}") - input = input + self.pos_embedding - return self.ln(self.layers(self.dropout(input))) - - -class VisionTransformer(nn.Module): - """Vision Transformer as per https://arxiv.org/abs/2010.11929.""" - - def __init__( - self, - image_size: int, - patch_size: int, - num_layers: int, - num_heads: int, - hidden_dim: int, - mlp_dim: int, - dropout: float = 0.0, - attention_dropout: float = 0.0, - num_classes: int = 1000, - representation_size: Optional[int] = None, - norm_layer: Callable[..., torch.nn.Module] = partial(nn.LayerNorm, eps=1e-6), - conv_stem_configs: Optional[List[ConvStemConfig]] = None, - ): - super().__init__() - _log_api_usage_once(self) - torch._assert(image_size % patch_size == 0, "Input shape indivisible by patch size!") - self.image_size = image_size - self.patch_size = patch_size - self.hidden_dim = hidden_dim - self.mlp_dim = mlp_dim - self.attention_dropout = attention_dropout - self.dropout = dropout - self.num_classes = num_classes - self.representation_size = representation_size - self.norm_layer = norm_layer - - if conv_stem_configs is not None: - # As per https://arxiv.org/abs/2106.14881 - seq_proj = nn.Sequential() - prev_channels = 3 - for i, conv_stem_layer_config in enumerate(conv_stem_configs): - seq_proj.add_module( - f"conv_bn_relu_{i}", - ConvNormActivation( - in_channels=prev_channels, - out_channels=conv_stem_layer_config.out_channels, - kernel_size=conv_stem_layer_config.kernel_size, - stride=conv_stem_layer_config.stride, - norm_layer=conv_stem_layer_config.norm_layer, - activation_layer=conv_stem_layer_config.activation_layer, - ), - ) - prev_channels = conv_stem_layer_config.out_channels - seq_proj.add_module( - "conv_last", nn.Conv2d(in_channels=prev_channels, out_channels=hidden_dim, kernel_size=1) - ) - self.conv_proj: nn.Module = seq_proj - else: - self.conv_proj = nn.Conv2d( - in_channels=3, out_channels=hidden_dim, kernel_size=patch_size, stride=patch_size - ) - - seq_length = (image_size // patch_size) ** 2 - - # Add a class token - self.class_token = nn.Parameter(torch.zeros(1, 1, hidden_dim)) - seq_length += 1 - - self.encoder = Encoder( - seq_length, - num_layers, - num_heads, - hidden_dim, - mlp_dim, - dropout, - attention_dropout, - norm_layer, - ) - self.seq_length = seq_length - - heads_layers: OrderedDict[str, nn.Module] = OrderedDict() - if representation_size is None: - heads_layers["head"] = nn.Linear(hidden_dim, num_classes) - else: - heads_layers["pre_logits"] = nn.Linear(hidden_dim, representation_size) - heads_layers["act"] = nn.Tanh() - heads_layers["head"] = nn.Linear(representation_size, num_classes) - - self.heads = nn.Sequential(heads_layers) - - if isinstance(self.conv_proj, nn.Conv2d): - # Init the patchify stem - fan_in = self.conv_proj.in_channels * self.conv_proj.kernel_size[0] * self.conv_proj.kernel_size[1] - nn.init.trunc_normal_(self.conv_proj.weight, std=math.sqrt(1 / fan_in)) - if self.conv_proj.bias is not None: - nn.init.zeros_(self.conv_proj.bias) - elif self.conv_proj.conv_last is not None and isinstance(self.conv_proj.conv_last, nn.Conv2d): - # Init the last 1x1 conv of the conv stem - nn.init.normal_( - self.conv_proj.conv_last.weight, mean=0.0, std=math.sqrt(2.0 / self.conv_proj.conv_last.out_channels) - ) - if self.conv_proj.conv_last.bias is not None: - nn.init.zeros_(self.conv_proj.conv_last.bias) - - if hasattr(self.heads, "pre_logits") and isinstance(self.heads.pre_logits, nn.Linear): - fan_in = self.heads.pre_logits.in_features - nn.init.trunc_normal_(self.heads.pre_logits.weight, std=math.sqrt(1 / fan_in)) - nn.init.zeros_(self.heads.pre_logits.bias) - - if isinstance(self.heads.head, nn.Linear): - nn.init.zeros_(self.heads.head.weight) - nn.init.zeros_(self.heads.head.bias) - - def _process_input(self, x: torch.Tensor) -> torch.Tensor: - n, c, h, w = x.shape - p = self.patch_size - torch._assert(h == self.image_size, "Wrong image height!") - torch._assert(w == self.image_size, "Wrong image width!") - n_h = h // p - n_w = w // p - - # (n, c, h, w) -> (n, hidden_dim, n_h, n_w) - x = self.conv_proj(x) - # (n, hidden_dim, n_h, n_w) -> (n, hidden_dim, (n_h * n_w)) - x = x.reshape(n, self.hidden_dim, n_h * n_w) - - # (n, hidden_dim, (n_h * n_w)) -> (n, (n_h * n_w), hidden_dim) - # The self attention layer expects inputs in the format (N, S, E) - # where S is the source sequence length, N is the batch size, E is the - # embedding dimension - x = x.permute(0, 2, 1) - - return x - - def forward(self, x: torch.Tensor): - out = {} - - # Reshape and permute the input tensor - x = self._process_input(x) - n = x.shape[0] - - # Expand the class token to the full batch - batch_class_token = self.class_token.expand(n, -1, -1) - x = torch.cat([batch_class_token, x], dim=1) - - - x = self.encoder(x) - img_feature = x[:,1:] - H = W = int(self.image_size / self.patch_size) - out['f4'] = img_feature.view(n, H, W, self.hidden_dim).permute(0,3,1,2) - - # Classifier "token" as used by standard language architectures - x = x[:, 0] - out['penultimate'] = x - - x = self.heads(x) # I checked that for all pretrained ViT, this is just a fc - out['logits'] = x - - return out - - -def _vision_transformer( - arch: str, - patch_size: int, - num_layers: int, - num_heads: int, - hidden_dim: int, - mlp_dim: int, - pretrained: bool, - progress: bool, - **kwargs: Any, -) -> VisionTransformer: - image_size = kwargs.pop("image_size", 224) - - model = VisionTransformer( - image_size=image_size, - patch_size=patch_size, - num_layers=num_layers, - num_heads=num_heads, - hidden_dim=hidden_dim, - mlp_dim=mlp_dim, - **kwargs, - ) - - if pretrained: - if arch not in model_urls: - raise ValueError(f"No checkpoint is available for model type '{arch}'!") - state_dict = load_state_dict_from_url(model_urls[arch], progress=progress) - model.load_state_dict(state_dict) - - return model - - -def vit_b_16(pretrained: bool = False, progress: bool = True, **kwargs: Any) -> VisionTransformer: - """ - Constructs a vit_b_16 architecture from - `"An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale" `_. - - Args: - pretrained (bool): If True, returns a model pre-trained on ImageNet - progress (bool): If True, displays a progress bar of the download to stderr - """ - return _vision_transformer( - arch="vit_b_16", - patch_size=16, - num_layers=12, - num_heads=12, - hidden_dim=768, - mlp_dim=3072, - pretrained=pretrained, - progress=progress, - **kwargs, - ) - - -def vit_b_32(pretrained: bool = False, progress: bool = True, **kwargs: Any) -> VisionTransformer: - """ - Constructs a vit_b_32 architecture from - `"An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale" `_. - - Args: - pretrained (bool): If True, returns a model pre-trained on ImageNet - progress (bool): If True, displays a progress bar of the download to stderr - """ - return _vision_transformer( - arch="vit_b_32", - patch_size=32, - num_layers=12, - num_heads=12, - hidden_dim=768, - mlp_dim=3072, - pretrained=pretrained, - progress=progress, - **kwargs, - ) - - -def vit_l_16(pretrained: bool = False, progress: bool = True, **kwargs: Any) -> VisionTransformer: - """ - Constructs a vit_l_16 architecture from - `"An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale" `_. - - Args: - pretrained (bool): If True, returns a model pre-trained on ImageNet - progress (bool): If True, displays a progress bar of the download to stderr - """ - return _vision_transformer( - arch="vit_l_16", - patch_size=16, - num_layers=24, - num_heads=16, - hidden_dim=1024, - mlp_dim=4096, - pretrained=pretrained, - progress=progress, - **kwargs, - ) - - -def vit_l_32(pretrained: bool = False, progress: bool = True, **kwargs: Any) -> VisionTransformer: - """ - Constructs a vit_l_32 architecture from - `"An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale" `_. - - Args: - pretrained (bool): If True, returns a model pre-trained on ImageNet - progress (bool): If True, displays a progress bar of the download to stderr - """ - return _vision_transformer( - arch="vit_l_32", - patch_size=32, - num_layers=24, - num_heads=16, - hidden_dim=1024, - mlp_dim=4096, - pretrained=pretrained, - progress=progress, - **kwargs, - ) - - -def interpolate_embeddings( - image_size: int, - patch_size: int, - model_state: "OrderedDict[str, torch.Tensor]", - interpolation_mode: str = "bicubic", - reset_heads: bool = False, -) -> "OrderedDict[str, torch.Tensor]": - """This function helps interpolating positional embeddings during checkpoint loading, - especially when you want to apply a pre-trained model on images with different resolution. - - Args: - image_size (int): Image size of the new model. - patch_size (int): Patch size of the new model. - model_state (OrderedDict[str, torch.Tensor]): State dict of the pre-trained model. - interpolation_mode (str): The algorithm used for upsampling. Default: bicubic. - reset_heads (bool): If true, not copying the state of heads. Default: False. - - Returns: - OrderedDict[str, torch.Tensor]: A state dict which can be loaded into the new model. - """ - # Shape of pos_embedding is (1, seq_length, hidden_dim) - pos_embedding = model_state["encoder.pos_embedding"] - n, seq_length, hidden_dim = pos_embedding.shape - if n != 1: - raise ValueError(f"Unexpected position embedding shape: {pos_embedding.shape}") - - new_seq_length = (image_size // patch_size) ** 2 + 1 - - # Need to interpolate the weights for the position embedding. - # We do this by reshaping the positions embeddings to a 2d grid, performing - # an interpolation in the (h, w) space and then reshaping back to a 1d grid. - if new_seq_length != seq_length: - # The class token embedding shouldn't be interpolated so we split it up. - seq_length -= 1 - new_seq_length -= 1 - pos_embedding_token = pos_embedding[:, :1, :] - pos_embedding_img = pos_embedding[:, 1:, :] - - # (1, seq_length, hidden_dim) -> (1, hidden_dim, seq_length) - pos_embedding_img = pos_embedding_img.permute(0, 2, 1) - seq_length_1d = int(math.sqrt(seq_length)) - torch._assert(seq_length_1d * seq_length_1d == seq_length, "seq_length is not a perfect square!") - - # (1, hidden_dim, seq_length) -> (1, hidden_dim, seq_l_1d, seq_l_1d) - pos_embedding_img = pos_embedding_img.reshape(1, hidden_dim, seq_length_1d, seq_length_1d) - new_seq_length_1d = image_size // patch_size - - # Perform interpolation. - # (1, hidden_dim, seq_l_1d, seq_l_1d) -> (1, hidden_dim, new_seq_l_1d, new_seq_l_1d) - new_pos_embedding_img = nn.functional.interpolate( - pos_embedding_img, - size=new_seq_length_1d, - mode=interpolation_mode, - align_corners=True, - ) - - # (1, hidden_dim, new_seq_l_1d, new_seq_l_1d) -> (1, hidden_dim, new_seq_length) - new_pos_embedding_img = new_pos_embedding_img.reshape(1, hidden_dim, new_seq_length) - - # (1, hidden_dim, new_seq_length) -> (1, new_seq_length, hidden_dim) - new_pos_embedding_img = new_pos_embedding_img.permute(0, 2, 1) - new_pos_embedding = torch.cat([pos_embedding_token, new_pos_embedding_img], dim=1) - - model_state["encoder.pos_embedding"] = new_pos_embedding - - if reset_heads: - model_state_copy: "OrderedDict[str, torch.Tensor]" = OrderedDict() - for k, v in model_state.items(): - if not k.startswith("heads"): - model_state_copy[k] = v - model_state = model_state_copy - - return model_state diff --git a/video/lipfd/model_code/models/vision_transformer_misc.py b/video/lipfd/model_code/models/vision_transformer_misc.py deleted file mode 100644 index 7915f036c00f0d9c57c176e621afc9f1e69dcb30..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/models/vision_transformer_misc.py +++ /dev/null @@ -1,163 +0,0 @@ -from typing import Callable, List, Optional - -import torch -from torch import Tensor - -from .vision_transformer_utils import _log_api_usage_once - - -interpolate = torch.nn.functional.interpolate - - -# This is not in nn -class FrozenBatchNorm2d(torch.nn.Module): - """ - BatchNorm2d where the batch statistics and the affine parameters are fixed - - Args: - num_features (int): Number of features ``C`` from an expected input of size ``(N, C, H, W)`` - eps (float): a value added to the denominator for numerical stability. Default: 1e-5 - """ - - def __init__( - self, - num_features: int, - eps: float = 1e-5, - ): - super().__init__() - _log_api_usage_once(self) - self.eps = eps - self.register_buffer("weight", torch.ones(num_features)) - self.register_buffer("bias", torch.zeros(num_features)) - self.register_buffer("running_mean", torch.zeros(num_features)) - self.register_buffer("running_var", torch.ones(num_features)) - - def _load_from_state_dict( - self, - state_dict: dict, - prefix: str, - local_metadata: dict, - strict: bool, - missing_keys: List[str], - unexpected_keys: List[str], - error_msgs: List[str], - ): - num_batches_tracked_key = prefix + "num_batches_tracked" - if num_batches_tracked_key in state_dict: - del state_dict[num_batches_tracked_key] - - super()._load_from_state_dict( - state_dict, prefix, local_metadata, strict, missing_keys, unexpected_keys, error_msgs - ) - - def forward(self, x: Tensor) -> Tensor: - # move reshapes to the beginning - # to make it fuser-friendly - w = self.weight.reshape(1, -1, 1, 1) - b = self.bias.reshape(1, -1, 1, 1) - rv = self.running_var.reshape(1, -1, 1, 1) - rm = self.running_mean.reshape(1, -1, 1, 1) - scale = w * (rv + self.eps).rsqrt() - bias = b - rm * scale - return x * scale + bias - - def __repr__(self) -> str: - return f"{self.__class__.__name__}({self.weight.shape[0]}, eps={self.eps})" - - -class ConvNormActivation(torch.nn.Sequential): - """ - Configurable block used for Convolution-Normalzation-Activation blocks. - - Args: - in_channels (int): Number of channels in the input image - out_channels (int): Number of channels produced by the Convolution-Normalzation-Activation block - kernel_size: (int, optional): Size of the convolving kernel. Default: 3 - stride (int, optional): Stride of the convolution. Default: 1 - padding (int, tuple or str, optional): Padding added to all four sides of the input. Default: None, in wich case it will calculated as ``padding = (kernel_size - 1) // 2 * dilation`` - groups (int, optional): Number of blocked connections from input channels to output channels. Default: 1 - norm_layer (Callable[..., torch.nn.Module], optional): Norm layer that will be stacked on top of the convolutiuon layer. If ``None`` this layer wont be used. Default: ``torch.nn.BatchNorm2d`` - activation_layer (Callable[..., torch.nn.Module], optinal): Activation function which will be stacked on top of the normalization layer (if not None), otherwise on top of the conv layer. If ``None`` this layer wont be used. Default: ``torch.nn.ReLU`` - dilation (int): Spacing between kernel elements. Default: 1 - inplace (bool): Parameter for the activation layer, which can optionally do the operation in-place. Default ``True`` - bias (bool, optional): Whether to use bias in the convolution layer. By default, biases are included if ``norm_layer is None``. - - """ - - def __init__( - self, - in_channels: int, - out_channels: int, - kernel_size: int = 3, - stride: int = 1, - padding: Optional[int] = None, - groups: int = 1, - norm_layer: Optional[Callable[..., torch.nn.Module]] = torch.nn.BatchNorm2d, - activation_layer: Optional[Callable[..., torch.nn.Module]] = torch.nn.ReLU, - dilation: int = 1, - inplace: Optional[bool] = True, - bias: Optional[bool] = None, - ) -> None: - if padding is None: - padding = (kernel_size - 1) // 2 * dilation - if bias is None: - bias = norm_layer is None - layers = [ - torch.nn.Conv2d( - in_channels, - out_channels, - kernel_size, - stride, - padding, - dilation=dilation, - groups=groups, - bias=bias, - ) - ] - if norm_layer is not None: - layers.append(norm_layer(out_channels)) - if activation_layer is not None: - params = {} if inplace is None else {"inplace": inplace} - layers.append(activation_layer(**params)) - super().__init__(*layers) - _log_api_usage_once(self) - self.out_channels = out_channels - - -class SqueezeExcitation(torch.nn.Module): - """ - This block implements the Squeeze-and-Excitation block from https://arxiv.org/abs/1709.01507 (see Fig. 1). - Parameters ``activation``, and ``scale_activation`` correspond to ``delta`` and ``sigma`` in in eq. 3. - - Args: - input_channels (int): Number of channels in the input image - squeeze_channels (int): Number of squeeze channels - activation (Callable[..., torch.nn.Module], optional): ``delta`` activation. Default: ``torch.nn.ReLU`` - scale_activation (Callable[..., torch.nn.Module]): ``sigma`` activation. Default: ``torch.nn.Sigmoid`` - """ - - def __init__( - self, - input_channels: int, - squeeze_channels: int, - activation: Callable[..., torch.nn.Module] = torch.nn.ReLU, - scale_activation: Callable[..., torch.nn.Module] = torch.nn.Sigmoid, - ) -> None: - super().__init__() - _log_api_usage_once(self) - self.avgpool = torch.nn.AdaptiveAvgPool2d(1) - self.fc1 = torch.nn.Conv2d(input_channels, squeeze_channels, 1) - self.fc2 = torch.nn.Conv2d(squeeze_channels, input_channels, 1) - self.activation = activation() - self.scale_activation = scale_activation() - - def _scale(self, input: Tensor) -> Tensor: - scale = self.avgpool(input) - scale = self.fc1(scale) - scale = self.activation(scale) - scale = self.fc2(scale) - return self.scale_activation(scale) - - def forward(self, input: Tensor) -> Tensor: - scale = self._scale(input) - return scale * input diff --git a/video/lipfd/model_code/models/vision_transformer_utils.py b/video/lipfd/model_code/models/vision_transformer_utils.py deleted file mode 100644 index 6d3293d103d0e186a1244e7cc0c6e3bde63d1df3..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/models/vision_transformer_utils.py +++ /dev/null @@ -1,549 +0,0 @@ -import math -import pathlib -import warnings -from types import FunctionType -from typing import Any, BinaryIO, List, Optional, Tuple, Union - -import numpy as np -import torch -from PIL import Image, ImageColor, ImageDraw, ImageFont - -__all__ = [ - "make_grid", - "save_image", - "draw_bounding_boxes", - "draw_segmentation_masks", - "draw_keypoints", - "flow_to_image", -] - - -@torch.no_grad() -def make_grid( - tensor: Union[torch.Tensor, List[torch.Tensor]], - nrow: int = 8, - padding: int = 2, - normalize: bool = False, - value_range: Optional[Tuple[int, int]] = None, - scale_each: bool = False, - pad_value: float = 0.0, - **kwargs, -) -> torch.Tensor: - """ - Make a grid of images. - - Args: - tensor (Tensor or list): 4D mini-batch Tensor of shape (B x C x H x W) - or a list of images all of the same size. - nrow (int, optional): Number of images displayed in each row of the grid. - The final grid size is ``(B / nrow, nrow)``. Default: ``8``. - padding (int, optional): amount of padding. Default: ``2``. - normalize (bool, optional): If True, shift the image to the range (0, 1), - by the min and max values specified by ``value_range``. Default: ``False``. - value_range (tuple, optional): tuple (min, max) where min and max are numbers, - then these numbers are used to normalize the image. By default, min and max - are computed from the tensor. - range (tuple. optional): - .. warning:: - This parameter was deprecated in ``0.12`` and will be removed in ``0.14``. Please use ``value_range`` - instead. - scale_each (bool, optional): If ``True``, scale each image in the batch of - images separately rather than the (min, max) over all images. Default: ``False``. - pad_value (float, optional): Value for the padded pixels. Default: ``0``. - - Returns: - grid (Tensor): the tensor containing grid of images. - """ - if not torch.jit.is_scripting() and not torch.jit.is_tracing(): - _log_api_usage_once(make_grid) - if not (torch.is_tensor(tensor) or (isinstance(tensor, list) and all(torch.is_tensor(t) for t in tensor))): - raise TypeError(f"tensor or list of tensors expected, got {type(tensor)}") - - if "range" in kwargs.keys(): - warnings.warn( - "The parameter 'range' is deprecated since 0.12 and will be removed in 0.14. " - "Please use 'value_range' instead." - ) - value_range = kwargs["range"] - - # if list of tensors, convert to a 4D mini-batch Tensor - if isinstance(tensor, list): - tensor = torch.stack(tensor, dim=0) - - if tensor.dim() == 2: # single image H x W - tensor = tensor.unsqueeze(0) - if tensor.dim() == 3: # single image - if tensor.size(0) == 1: # if single-channel, convert to 3-channel - tensor = torch.cat((tensor, tensor, tensor), 0) - tensor = tensor.unsqueeze(0) - - if tensor.dim() == 4 and tensor.size(1) == 1: # single-channel images - tensor = torch.cat((tensor, tensor, tensor), 1) - - if normalize is True: - tensor = tensor.clone() # avoid modifying tensor in-place - if value_range is not None: - assert isinstance( - value_range, tuple - ), "value_range has to be a tuple (min, max) if specified. min and max are numbers" - - def norm_ip(img, low, high): - img.clamp_(min=low, max=high) - img.sub_(low).div_(max(high - low, 1e-5)) - - def norm_range(t, value_range): - if value_range is not None: - norm_ip(t, value_range[0], value_range[1]) - else: - norm_ip(t, float(t.min()), float(t.max())) - - if scale_each is True: - for t in tensor: # loop over mini-batch dimension - norm_range(t, value_range) - else: - norm_range(tensor, value_range) - - assert isinstance(tensor, torch.Tensor) - if tensor.size(0) == 1: - return tensor.squeeze(0) - - # make the mini-batch of images into a grid - nmaps = tensor.size(0) - xmaps = min(nrow, nmaps) - ymaps = int(math.ceil(float(nmaps) / xmaps)) - height, width = int(tensor.size(2) + padding), int(tensor.size(3) + padding) - num_channels = tensor.size(1) - grid = tensor.new_full((num_channels, height * ymaps + padding, width * xmaps + padding), pad_value) - k = 0 - for y in range(ymaps): - for x in range(xmaps): - if k >= nmaps: - break - # Tensor.copy_() is a valid method but seems to be missing from the stubs - # https://pytorch.org/docs/stable/tensors.html#torch.Tensor.copy_ - grid.narrow(1, y * height + padding, height - padding).narrow( # type: ignore[attr-defined] - 2, x * width + padding, width - padding - ).copy_(tensor[k]) - k = k + 1 - return grid - - -@torch.no_grad() -def save_image( - tensor: Union[torch.Tensor, List[torch.Tensor]], - fp: Union[str, pathlib.Path, BinaryIO], - format: Optional[str] = None, - **kwargs, -) -> None: - """ - Save a given Tensor into an image file. - - Args: - tensor (Tensor or list): Image to be saved. If given a mini-batch tensor, - saves the tensor as a grid of images by calling ``make_grid``. - fp (string or file object): A filename or a file object - format(Optional): If omitted, the format to use is determined from the filename extension. - If a file object was used instead of a filename, this parameter should always be used. - **kwargs: Other arguments are documented in ``make_grid``. - """ - - if not torch.jit.is_scripting() and not torch.jit.is_tracing(): - _log_api_usage_once(save_image) - grid = make_grid(tensor, **kwargs) - # Add 0.5 after unnormalizing to [0, 255] to round to nearest integer - ndarr = grid.mul(255).add_(0.5).clamp_(0, 255).permute(1, 2, 0).to("cpu", torch.uint8).numpy() - im = Image.fromarray(ndarr) - im.save(fp, format=format) - - -@torch.no_grad() -def draw_bounding_boxes( - image: torch.Tensor, - boxes: torch.Tensor, - labels: Optional[List[str]] = None, - colors: Optional[Union[List[Union[str, Tuple[int, int, int]]], str, Tuple[int, int, int]]] = None, - fill: Optional[bool] = False, - width: int = 1, - font: Optional[str] = None, - font_size: int = 10, -) -> torch.Tensor: - - """ - Draws bounding boxes on given image. - The values of the input image should be uint8 between 0 and 255. - If fill is True, Resulting Tensor should be saved as PNG image. - - Args: - image (Tensor): Tensor of shape (C x H x W) and dtype uint8. - boxes (Tensor): Tensor of size (N, 4) containing bounding boxes in (xmin, ymin, xmax, ymax) format. Note that - the boxes are absolute coordinates with respect to the image. In other words: `0 <= xmin < xmax < W` and - `0 <= ymin < ymax < H`. - labels (List[str]): List containing the labels of bounding boxes. - colors (color or list of colors, optional): List containing the colors - of the boxes or single color for all boxes. The color can be represented as - PIL strings e.g. "red" or "#FF00FF", or as RGB tuples e.g. ``(240, 10, 157)``. - By default, random colors are generated for boxes. - fill (bool): If `True` fills the bounding box with specified color. - width (int): Width of bounding box. - font (str): A filename containing a TrueType font. If the file is not found in this filename, the loader may - also search in other directories, such as the `fonts/` directory on Windows or `/Library/Fonts/`, - `/System/Library/Fonts/` and `~/Library/Fonts/` on macOS. - font_size (int): The requested font size in points. - - Returns: - img (Tensor[C, H, W]): Image Tensor of dtype uint8 with bounding boxes plotted. - """ - - if not torch.jit.is_scripting() and not torch.jit.is_tracing(): - _log_api_usage_once(draw_bounding_boxes) - if not isinstance(image, torch.Tensor): - raise TypeError(f"Tensor expected, got {type(image)}") - elif image.dtype != torch.uint8: - raise ValueError(f"Tensor uint8 expected, got {image.dtype}") - elif image.dim() != 3: - raise ValueError("Pass individual images, not batches") - elif image.size(0) not in {1, 3}: - raise ValueError("Only grayscale and RGB images are supported") - - num_boxes = boxes.shape[0] - - if labels is None: - labels: Union[List[str], List[None]] = [None] * num_boxes # type: ignore[no-redef] - elif len(labels) != num_boxes: - raise ValueError( - f"Number of boxes ({num_boxes}) and labels ({len(labels)}) mismatch. Please specify labels for each box." - ) - - if colors is None: - colors = _generate_color_palette(num_boxes) - elif isinstance(colors, list): - if len(colors) < num_boxes: - raise ValueError(f"Number of colors ({len(colors)}) is less than number of boxes ({num_boxes}). ") - else: # colors specifies a single color for all boxes - colors = [colors] * num_boxes - - colors = [(ImageColor.getrgb(color) if isinstance(color, str) else color) for color in colors] - - # Handle Grayscale images - if image.size(0) == 1: - image = torch.tile(image, (3, 1, 1)) - - ndarr = image.permute(1, 2, 0).cpu().numpy() - img_to_draw = Image.fromarray(ndarr) - img_boxes = boxes.to(torch.int64).tolist() - - if fill: - draw = ImageDraw.Draw(img_to_draw, "RGBA") - else: - draw = ImageDraw.Draw(img_to_draw) - - txt_font = ImageFont.load_default() if font is None else ImageFont.truetype(font=font, size=font_size) - - for bbox, color, label in zip(img_boxes, colors, labels): # type: ignore[arg-type] - if fill: - fill_color = color + (100,) - draw.rectangle(bbox, width=width, outline=color, fill=fill_color) - else: - draw.rectangle(bbox, width=width, outline=color) - - if label is not None: - margin = width + 1 - draw.text((bbox[0] + margin, bbox[1] + margin), label, fill=color, font=txt_font) - - return torch.from_numpy(np.array(img_to_draw)).permute(2, 0, 1).to(dtype=torch.uint8) - - -@torch.no_grad() -def draw_segmentation_masks( - image: torch.Tensor, - masks: torch.Tensor, - alpha: float = 0.8, - colors: Optional[Union[List[Union[str, Tuple[int, int, int]]], str, Tuple[int, int, int]]] = None, -) -> torch.Tensor: - - """ - Draws segmentation masks on given RGB image. - The values of the input image should be uint8 between 0 and 255. - - Args: - image (Tensor): Tensor of shape (3, H, W) and dtype uint8. - masks (Tensor): Tensor of shape (num_masks, H, W) or (H, W) and dtype bool. - alpha (float): Float number between 0 and 1 denoting the transparency of the masks. - 0 means full transparency, 1 means no transparency. - colors (color or list of colors, optional): List containing the colors - of the masks or single color for all masks. The color can be represented as - PIL strings e.g. "red" or "#FF00FF", or as RGB tuples e.g. ``(240, 10, 157)``. - By default, random colors are generated for each mask. - - Returns: - img (Tensor[C, H, W]): Image Tensor, with segmentation masks drawn on top. - """ - - if not torch.jit.is_scripting() and not torch.jit.is_tracing(): - _log_api_usage_once(draw_segmentation_masks) - if not isinstance(image, torch.Tensor): - raise TypeError(f"The image must be a tensor, got {type(image)}") - elif image.dtype != torch.uint8: - raise ValueError(f"The image dtype must be uint8, got {image.dtype}") - elif image.dim() != 3: - raise ValueError("Pass individual images, not batches") - elif image.size()[0] != 3: - raise ValueError("Pass an RGB image. Other Image formats are not supported") - if masks.ndim == 2: - masks = masks[None, :, :] - if masks.ndim != 3: - raise ValueError("masks must be of shape (H, W) or (batch_size, H, W)") - if masks.dtype != torch.bool: - raise ValueError(f"The masks must be of dtype bool. Got {masks.dtype}") - if masks.shape[-2:] != image.shape[-2:]: - raise ValueError("The image and the masks must have the same height and width") - - num_masks = masks.size()[0] - if colors is not None and num_masks > len(colors): - raise ValueError(f"There are more masks ({num_masks}) than colors ({len(colors)})") - - if colors is None: - colors = _generate_color_palette(num_masks) - - if not isinstance(colors, list): - colors = [colors] - if not isinstance(colors[0], (tuple, str)): - raise ValueError("colors must be a tuple or a string, or a list thereof") - if isinstance(colors[0], tuple) and len(colors[0]) != 3: - raise ValueError("It seems that you passed a tuple of colors instead of a list of colors") - - out_dtype = torch.uint8 - - colors_ = [] - for color in colors: - if isinstance(color, str): - color = ImageColor.getrgb(color) - colors_.append(torch.tensor(color, dtype=out_dtype)) - - img_to_draw = image.detach().clone() - # TODO: There might be a way to vectorize this - for mask, color in zip(masks, colors_): - img_to_draw[:, mask] = color[:, None] - - out = image * (1 - alpha) + img_to_draw * alpha - return out.to(out_dtype) - - -@torch.no_grad() -def draw_keypoints( - image: torch.Tensor, - keypoints: torch.Tensor, - connectivity: Optional[List[Tuple[int, int]]] = None, - colors: Optional[Union[str, Tuple[int, int, int]]] = None, - radius: int = 2, - width: int = 3, -) -> torch.Tensor: - - """ - Draws Keypoints on given RGB image. - The values of the input image should be uint8 between 0 and 255. - - Args: - image (Tensor): Tensor of shape (3, H, W) and dtype uint8. - keypoints (Tensor): Tensor of shape (num_instances, K, 2) the K keypoints location for each of the N instances, - in the format [x, y]. - connectivity (List[Tuple[int, int]]]): A List of tuple where, - each tuple contains pair of keypoints to be connected. - colors (str, Tuple): The color can be represented as - PIL strings e.g. "red" or "#FF00FF", or as RGB tuples e.g. ``(240, 10, 157)``. - radius (int): Integer denoting radius of keypoint. - width (int): Integer denoting width of line connecting keypoints. - - Returns: - img (Tensor[C, H, W]): Image Tensor of dtype uint8 with keypoints drawn. - """ - - if not torch.jit.is_scripting() and not torch.jit.is_tracing(): - _log_api_usage_once(draw_keypoints) - if not isinstance(image, torch.Tensor): - raise TypeError(f"The image must be a tensor, got {type(image)}") - elif image.dtype != torch.uint8: - raise ValueError(f"The image dtype must be uint8, got {image.dtype}") - elif image.dim() != 3: - raise ValueError("Pass individual images, not batches") - elif image.size()[0] != 3: - raise ValueError("Pass an RGB image. Other Image formats are not supported") - - if keypoints.ndim != 3: - raise ValueError("keypoints must be of shape (num_instances, K, 2)") - - ndarr = image.permute(1, 2, 0).cpu().numpy() - img_to_draw = Image.fromarray(ndarr) - draw = ImageDraw.Draw(img_to_draw) - img_kpts = keypoints.to(torch.int64).tolist() - - for kpt_id, kpt_inst in enumerate(img_kpts): - for inst_id, kpt in enumerate(kpt_inst): - x1 = kpt[0] - radius - x2 = kpt[0] + radius - y1 = kpt[1] - radius - y2 = kpt[1] + radius - draw.ellipse([x1, y1, x2, y2], fill=colors, outline=None, width=0) - - if connectivity: - for connection in connectivity: - start_pt_x = kpt_inst[connection[0]][0] - start_pt_y = kpt_inst[connection[0]][1] - - end_pt_x = kpt_inst[connection[1]][0] - end_pt_y = kpt_inst[connection[1]][1] - - draw.line( - ((start_pt_x, start_pt_y), (end_pt_x, end_pt_y)), - width=width, - ) - - return torch.from_numpy(np.array(img_to_draw)).permute(2, 0, 1).to(dtype=torch.uint8) - - -# Flow visualization code adapted from https://github.com/tomrunia/OpticalFlow_Visualization -@torch.no_grad() -def flow_to_image(flow: torch.Tensor) -> torch.Tensor: - - """ - Converts a flow to an RGB image. - - Args: - flow (Tensor): Flow of shape (N, 2, H, W) or (2, H, W) and dtype torch.float. - - Returns: - img (Tensor): Image Tensor of dtype uint8 where each color corresponds - to a given flow direction. Shape is (N, 3, H, W) or (3, H, W) depending on the input. - """ - - if flow.dtype != torch.float: - raise ValueError(f"Flow should be of dtype torch.float, got {flow.dtype}.") - - orig_shape = flow.shape - if flow.ndim == 3: - flow = flow[None] # Add batch dim - - if flow.ndim != 4 or flow.shape[1] != 2: - raise ValueError(f"Input flow should have shape (2, H, W) or (N, 2, H, W), got {orig_shape}.") - - max_norm = torch.sum(flow ** 2, dim=1).sqrt().max() - epsilon = torch.finfo((flow).dtype).eps - normalized_flow = flow / (max_norm + epsilon) - img = _normalized_flow_to_image(normalized_flow) - - if len(orig_shape) == 3: - img = img[0] # Remove batch dim - return img - - -@torch.no_grad() -def _normalized_flow_to_image(normalized_flow: torch.Tensor) -> torch.Tensor: - - """ - Converts a batch of normalized flow to an RGB image. - - Args: - normalized_flow (torch.Tensor): Normalized flow tensor of shape (N, 2, H, W) - Returns: - img (Tensor(N, 3, H, W)): Flow visualization image of dtype uint8. - """ - - N, _, H, W = normalized_flow.shape - device = normalized_flow.device - flow_image = torch.zeros((N, 3, H, W), dtype=torch.uint8, device=device) - colorwheel = _make_colorwheel().to(device) # shape [55x3] - num_cols = colorwheel.shape[0] - norm = torch.sum(normalized_flow ** 2, dim=1).sqrt() - a = torch.atan2(-normalized_flow[:, 1, :, :], -normalized_flow[:, 0, :, :]) / torch.pi - fk = (a + 1) / 2 * (num_cols - 1) - k0 = torch.floor(fk).to(torch.long) - k1 = k0 + 1 - k1[k1 == num_cols] = 0 - f = fk - k0 - - for c in range(colorwheel.shape[1]): - tmp = colorwheel[:, c] - col0 = tmp[k0] / 255.0 - col1 = tmp[k1] / 255.0 - col = (1 - f) * col0 + f * col1 - col = 1 - norm * (1 - col) - flow_image[:, c, :, :] = torch.floor(255 * col) - return flow_image - - -def _make_colorwheel() -> torch.Tensor: - """ - Generates a color wheel for optical flow visualization as presented in: - Baker et al. "A Database and Evaluation Methodology for Optical Flow" (ICCV, 2007) - URL: http://vision.middlebury.edu/flow/flowEval-iccv07.pdf. - - Returns: - colorwheel (Tensor[55, 3]): Colorwheel Tensor. - """ - - RY = 15 - YG = 6 - GC = 4 - CB = 11 - BM = 13 - MR = 6 - - ncols = RY + YG + GC + CB + BM + MR - colorwheel = torch.zeros((ncols, 3)) - col = 0 - - # RY - colorwheel[0:RY, 0] = 255 - colorwheel[0:RY, 1] = torch.floor(255 * torch.arange(0, RY) / RY) - col = col + RY - # YG - colorwheel[col : col + YG, 0] = 255 - torch.floor(255 * torch.arange(0, YG) / YG) - colorwheel[col : col + YG, 1] = 255 - col = col + YG - # GC - colorwheel[col : col + GC, 1] = 255 - colorwheel[col : col + GC, 2] = torch.floor(255 * torch.arange(0, GC) / GC) - col = col + GC - # CB - colorwheel[col : col + CB, 1] = 255 - torch.floor(255 * torch.arange(CB) / CB) - colorwheel[col : col + CB, 2] = 255 - col = col + CB - # BM - colorwheel[col : col + BM, 2] = 255 - colorwheel[col : col + BM, 0] = torch.floor(255 * torch.arange(0, BM) / BM) - col = col + BM - # MR - colorwheel[col : col + MR, 2] = 255 - torch.floor(255 * torch.arange(MR) / MR) - colorwheel[col : col + MR, 0] = 255 - return colorwheel - - -def _generate_color_palette(num_objects: int): - palette = torch.tensor([2 ** 25 - 1, 2 ** 15 - 1, 2 ** 21 - 1]) - return [tuple((i * palette) % 255) for i in range(num_objects)] - - -def _log_api_usage_once(obj: Any) -> None: - - """ - Logs API usage(module and name) within an organization. - In a large ecosystem, it's often useful to track the PyTorch and - TorchVision APIs usage. This API provides the similar functionality to the - logging module in the Python stdlib. It can be used for debugging purpose - to log which methods are used and by default it is inactive, unless the user - manually subscribes a logger via the `SetAPIUsageLogger method `_. - Please note it is triggered only once for the same API call within a process. - It does not collect any data from open-source users since it is no-op by default. - For more information, please refer to - * PyTorch note: https://pytorch.org/docs/stable/notes/large_scale_deployments.html#api-usage-logging; - * Logging policy: https://github.com/pytorch/vision/issues/5052; - - Args: - obj (class instance or method): an object to extract info from. - """ - if not obj.__module__.startswith("torchvision"): - return - name = obj.__class__.__name__ - if isinstance(obj, FunctionType): - name = obj.__name__ - torch._C._log_api_usage_once(f"{obj.__module__}.{name}") diff --git a/video/lipfd/model_code/options/base_options.py b/video/lipfd/model_code/options/base_options.py deleted file mode 100644 index 6d5a8e8b0c95dd5c02b32548c5d616270f7cc9ad..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/options/base_options.py +++ /dev/null @@ -1,97 +0,0 @@ -import os -import argparse -import torch - - -class BaseOptions: - def __init__(self): - self.initialized = False - - def initialize(self, parser): - parser.add_argument("--arch", type=str, default="CLIP:ViT-L/14", help="see models/__init__.py") - parser.add_argument("--fix_backbone", default=False) - parser.add_argument("--fix_encoder", default=True) - - parser.add_argument("--real_list_path", default="./datasets/val/0_real") - parser.add_argument("--fake_list_path", default="./datasets/val/1_fake") - parser.add_argument("--data_label", default="train", help="label to decide whether train or validation dataset",) - - parser.add_argument( "--batch_size", type=int, default=10, help="input batch size") - parser.add_argument("--gpu_ids", type=str, default="1", help="gpu ids: e.g. 0 0,1,2, 0,2. use -1 for CPU",) - parser.add_argument("--name", type=str, default="experiment_name", help="name of the experiment. It decides where to store samples and models",) - parser.add_argument("--num_threads", default=0, type=int, help="# threads for loading data") - parser.add_argument("--checkpoints_dir", type=str, default="./checkpoints", help="models are saved here",) - parser.add_argument("--serial_batches",action="store_true",help="if true, takes images in order to make batches, otherwise takes them randomly",) - self.initialized = True - return parser - - def gather_options(self): - # initialize parser with basic options - if not self.initialized: - parser = argparse.ArgumentParser( - formatter_class=argparse.ArgumentDefaultsHelpFormatter - ) - parser = self.initialize(parser) - - # get the basic options - opt, _ = parser.parse_known_args() - self.parser = parser - - return parser.parse_args() - - def print_options(self, opt): - message = "" - message += "----------------- Options ---------------\n" - for k, v in sorted(vars(opt).items()): - comment = "" - default = self.parser.get_default(k) - if v != default: - comment = "\t[default: %s]" % str(default) - message += "{:>25}: {:<30}{}\n".format(str(k), str(v), comment) - message += "----------------- End -------------------" - print(message) - - # save to the disk - expr_dir = os.path.join(opt.checkpoints_dir, opt.name) - os.makedirs(expr_dir, exist_ok=True) - # util.mkdirs(expr_dir) - file_name = os.path.join(expr_dir, "opt.txt") - with open(file_name, "wt") as opt_file: - opt_file.write(message) - opt_file.write("\n") - - def parse(self, print_options=True): - opt = self.gather_options() - opt.isTrain = self.isTrain # train or test - - # process opt.suffix - if opt.suffix: - suffix = ("_" + opt.suffix.format(**vars(opt))) if opt.suffix != "" else "" - opt.name = opt.name + suffix - - if print_options: - self.print_options(opt) - - # set gpu ids - str_ids = opt.gpu_ids.split(",") - opt.gpu_ids = [] - for str_id in str_ids: - id = int(str_id) - if id >= 0: - opt.gpu_ids.append(id) - if len(opt.gpu_ids) > 0: - torch.cuda.set_device(opt.gpu_ids[0]) - - # additional - # opt.classes = opt.classes.split(',') - opt.rz_interp = opt.rz_interp.split(",") - opt.blur_sig = [float(s) for s in opt.blur_sig.split(",")] - opt.jpg_method = opt.jpg_method.split(",") - opt.jpg_qual = [int(s) for s in opt.jpg_qual.split(",")] - if len(opt.jpg_qual) == 2: - opt.jpg_qual = list(range(opt.jpg_qual[0], opt.jpg_qual[1] + 1)) - elif len(opt.jpg_qual) > 2: - raise ValueError("Shouldn't have more than 2 values for --jpg_qual.") - - self.opt = opt - return self.opt diff --git a/video/lipfd/model_code/options/test_options.py b/video/lipfd/model_code/options/test_options.py deleted file mode 100644 index a84885c6ad72d18a2959e240d5b9b74891778145..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/options/test_options.py +++ /dev/null @@ -1,11 +0,0 @@ -from .base_options import BaseOptions - - -class TestOptions(BaseOptions): - def initialize(self, parser): - parser = BaseOptions.initialize(self, parser) - parser.add_argument('--model_path') - parser.add_argument('--eval', action='store_true', help='use eval mode during test time.') - - self.isTrain = False - return parser diff --git a/video/lipfd/model_code/options/train_options.py b/video/lipfd/model_code/options/train_options.py deleted file mode 100644 index 9e7fdf964cbc7ffab354b87c4cbd6f4caa234f23..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/options/train_options.py +++ /dev/null @@ -1,20 +0,0 @@ -from .base_options import BaseOptions - - -class TrainOptions(BaseOptions): - def initialize(self, parser): - parser = BaseOptions.initialize(self, parser) - parser.add_argument('--optim', type=str, default='adam', help='optim to use [sgd, adam]') - parser.add_argument('--loss_freq', type=int, default=100, help='frequency of showing loss on tensorboard') - parser.add_argument('--save_epoch_freq', type=int, default=1, - help='frequency of saving checkpoints at the end of epochs') - parser.add_argument('--train_split', type=str, default='train', help='train, val, test, etc') - parser.add_argument('--val_split', type=str, default='val', help='train, val, test, etc') - parser.add_argument('--epoch', type=int, default=100, help='total epoches') - parser.add_argument('--beta1', type=float, default=0.9, help='momentum term of adam') - parser.add_argument('--lr', type=float, default=2e-9, help='initial learning rate for adam') - parser.add_argument('--pretrained_model', type=str, default='./checkpoints/experiment_name/model_epoch_29.pth', help='model will fine tune on it if fine-tune is True') - parser.add_argument('--fine-tune', type=bool, default=True) - self.isTrain = True - - return parser diff --git a/video/lipfd/model_code/preprocess.py b/video/lipfd/model_code/preprocess.py deleted file mode 100644 index 16fefbda6b1e32bfa6a26c71c82bc49d49ad59cc..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/preprocess.py +++ /dev/null @@ -1,125 +0,0 @@ -import os -import cv2 -import numpy as np -import librosa -import matplotlib.pyplot as plt -from tqdm import tqdm -from librosa import feature as audio - - -""" -Structure of the AVLips dataset: -AVLips -├── 0_real -├── 1_fake -└── wav - ├── 0_real - └── 1_fake -""" - -############ Custom parameter ############## -N_EXTRACT = 10 # number of extracted images from video -WINDOW_LEN = 5 # frames of each window -MAX_SAMPLE = 100 - -audio_root = "./AVLips/wav" -video_root = "./AVLips" -output_root = "./datasets/AVLips" -############################################ - -labels = [(0, "0_real"), (1, "1_fake")] - -def get_spectrogram(audio_file): - data, sr = librosa.load(audio_file) - mel = librosa.power_to_db(audio.melspectrogram(y=data, sr=sr), ref=np.min) - plt.imsave("./temp/mel.png", mel) - - -def run(): - i = 0 - for label, dataset_name in labels: - if not os.path.exists(dataset_name): - os.makedirs(f"{output_root}/{dataset_name}", exist_ok=True) - - if i == MAX_SAMPLE: - break - root = f"{video_root}/{dataset_name}" - video_list = os.listdir(root) - print(f"Handling {dataset_name}...") - for j in tqdm(range(len(video_list))): - v = video_list[j] - # load video - video_capture = cv2.VideoCapture(f"{root}/{v}") - fps = video_capture.get(cv2.CAP_PROP_FPS) - frame_count = int(video_capture.get(cv2.CAP_PROP_FRAME_COUNT)) - - # select 10 starting point from frames - frame_idx = np.linspace( - 0, - frame_count - WINDOW_LEN - 1, - N_EXTRACT, - endpoint=True, - dtype=np.uint8, - ).tolist() - frame_idx.sort() - # selected frames - frame_sequence = [ - i for num in frame_idx for i in range(num, num + WINDOW_LEN) - ] - frame_list = [] - current_frame = 0 - while current_frame <= frame_sequence[-1]: - ret, frame = video_capture.read() - if not ret: - print(f"Error in reading frame {v}: {current_frame}") - break - if current_frame in frame_sequence: - frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA) - frame_list.append(cv2.resize(frame, (500, 500))) # to floating num - current_frame += 1 - video_capture.release() - - # load audio - name = v.split(".")[0] - a = f"{audio_root}/{dataset_name}/{name}.wav" - - group = 0 - get_spectrogram(a) - mel = plt.imread("./temp/mel.png") * 255 # load spectrogram (int) - mel = mel.astype(np.uint8) - mapping = mel.shape[1] / frame_count - for i in range(len(frame_list)): - idx = i % WINDOW_LEN - if idx == 0: - try: - begin = np.round(frame_sequence[i] * mapping) - end = np.round((frame_sequence[i] + WINDOW_LEN) * mapping) - sub_mel = cv2.resize( - (mel[:, int(begin) : int(end)]), (500 * WINDOW_LEN, 500) - ) - x = np.concatenate(frame_list[i : i + WINDOW_LEN], axis=1) - # print(x.shape) - # print(sub_mel.shape) - x = np.concatenate((sub_mel[:, :, :3], x[:, :, :3]), axis=0) - # print(x.shape) - plt.imsave( - f"{output_root}/{dataset_name}/{name}_{group}.png", x - ) - group = group + 1 - except ValueError: - print(f"ValueError: {name}") - continue - # print(frame_sequence) - # print(frame_count) - # print(mel.shape[1]) - # print(mapping) - # exit(0) - i += 1 - - -if __name__ == "__main__": - if not os.path.exists(output_root): - os.makedirs(output_root, exist_ok=True) - if not os.path.exists("./temp"): - os.makedirs("./temp", exist_ok=True) - run() diff --git a/video/lipfd/model_code/requirements.txt b/video/lipfd/model_code/requirements.txt deleted file mode 100644 index 6b3606abf823a0e93a1a9a6b008897952f7c2933..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/requirements.txt +++ /dev/null @@ -1,10 +0,0 @@ -ftfy==6.1.1 -librosa==0.10.1 -matplotlib==3.8.0 -numpy==1.25.2 -opencv-contrib-python==4.8.1.78 -opencv-python==4.8.1.78 -scikit-learn==1.3.1 -torch==2.1.0 -torchvision==0.16.0 -tqdm==4.66.1 \ No newline at end of file diff --git a/video/lipfd/model_code/train.py b/video/lipfd/model_code/train.py deleted file mode 100644 index 67c258c2255511e990961bcc21b3a6ecb321165e..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/train.py +++ /dev/null @@ -1,56 +0,0 @@ -from validate import validate -from data import create_dataloader -from trainer.trainer import Trainer -from options.train_options import TrainOptions - - -def get_val_opt(): - val_opt = TrainOptions().parse(print_options=False) - val_opt.isTrain = False - val_opt.data_label = "val" - val_opt.real_list_path = "./datasets/val/0_real" - val_opt.fake_list_path = "./datasets/val/1_fake" - return val_opt - - -if __name__ == "__main__": - opt = TrainOptions().parse() - val_opt = get_val_opt() - model = Trainer(opt) - - data_loader = create_dataloader(opt) - val_loader = create_dataloader(val_opt) - - print("Length of data loader: %d" % (len(data_loader))) - print("Length of val loader: %d" % (len(val_loader))) - - for epoch in range(opt.epoch): - model.train() - print("epoch: ", epoch + model.step_bias) - for i, (img, crops, label) in enumerate(data_loader): - model.total_steps += 1 - - model.set_input((img, crops, label)) - model.forward() - loss = model.get_loss() - - model.optimize_parameters() - - if model.total_steps % opt.loss_freq == 0: - print( - "Train loss: {}\tstep: {}".format( - model.get_loss(), model.total_steps - ) - ) - - if epoch % opt.save_epoch_freq == 0: - print("saving the model at the end of epoch %d" % (epoch + model.step_bias)) - model.save_trainer("model_epoch_%s.pth" % (epoch + model.step_bias)) - - model.eval() - ap, fpr, fnr, acc = validate(model.model, val_loader, opt.gpu_ids) - print( - "(Val @ epoch {}) acc: {} ap: {} fpr: {} fnr: {}".format( - epoch + model.step_bias, acc, ap, fpr, fnr - ) - ) diff --git a/video/lipfd/model_code/trainer/trainer.py b/video/lipfd/model_code/trainer/trainer.py deleted file mode 100644 index 0904c31d5ae0485afbbdcb023f43632822af9fc1..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/trainer/trainer.py +++ /dev/null @@ -1,112 +0,0 @@ -import os -import torch -import torch.nn as nn -from models import build_model, get_loss - - -class Trainer(nn.Module): - def __init__(self, opt): - self.opt = opt - self.total_steps = 0 - self.save_dir = os.path.join(opt.checkpoints_dir, opt.name) - self.device = ( - torch.device("cuda:{}".format(opt.gpu_ids[0])) - if opt.gpu_ids - else torch.device("cpu") - ) - self.opt = opt - self.model = build_model(opt.arch) - - self.step_bias = ( - 0 - if not opt.fine_tune - else int(opt.pretrained_model.split("_")[-1].split(".")[0]) + 1 - ) - if opt.fine_tune: - state_dict = torch.load(opt.pretrained_model, map_location="cpu") - self.model.load_state_dict(state_dict["model"]) - self.total_steps = state_dict["total_steps"] - print(f"Model loaded @ {opt.pretrained_model.split('/')[-1]}") - - if opt.fix_encoder: - params = [] - for name, p in self.model.named_parameters(): - if name.split(".")[0] in ["encoder"]: - p.requires_grad = False - else: - p.requires_grad = False - params = self.model.parameters() - - if opt.optim == "adam": - self.optimizer = torch.optim.AdamW( - params, - lr=opt.lr, - betas=(opt.beta1, 0.999), - weight_decay=opt.weight_decay, - ) - elif opt.optim == "sgd": - self.optimizer = torch.optim.SGD( - params, lr=opt.lr, momentum=0.0, weight_decay=opt.weight_decay - ) - else: - raise ValueError("optim should be [adam, sgd]") - - self.criterion = get_loss().to(self.device) - self.criterion1 = nn.CrossEntropyLoss() - - self.model.to(opt.gpu_ids[0] if torch.cuda.is_available() else "cpu") - - def adjust_learning_rate(self, min_lr=1e-8): - for param_group in self.optimizer.param_groups: - if param_group["lr"] < min_lr: - return False - param_group["lr"] /= 10.0 - return True - - def set_input(self, input): - self.input = input[0].to(self.device) - self.crops = [[t.to(self.device) for t in sublist] for sublist in input[1]] - self.label = input[2].to(self.device).float() - - def forward(self): - self.get_features() - self.output, self.weights_max, self.weights_org = self.model.forward( - self.crops, self.features - ) - self.output = self.output.view(-1) - self.loss = self.criterion( - self.weights_max, self.weights_org - ) + self.criterion1(self.output, self.label) - - def get_loss(self): - loss = self.loss.data.tolist() - return loss[0] if isinstance(loss, type(list())) else loss - - def optimize_parameters(self): - self.optimizer.zero_grad() - self.loss.backward() - self.optimizer.step() - - def get_features(self): - self.features = self.model.get_features(self.input).to( - self.device - ) # shape: (batch_size - - def eval(self): - self.model.eval() - - def test(self): - with torch.no_grad(): - self.forward() - - def save_networks(self, save_filename): - save_path = os.path.join(self.save_dir, save_filename) - - # serialize model and optimizer to dict - state_dict = { - "model": self.model.state_dict(), - "optimizer": self.optimizer.state_dict(), - "total_steps": self.total_steps, - } - - torch.save(state_dict, save_path) diff --git a/video/lipfd/model_code/utils.py b/video/lipfd/model_code/utils.py deleted file mode 100644 index 74a86346e96198ca2e6f15e18c664bcbcde11a77..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/utils.py +++ /dev/null @@ -1,10 +0,0 @@ -import os - -def get_list(path) -> list: - r"""Recursively read all files in root path""" - image_list = list() - for root, dirs, files in os.walk(path): - for f in files: - if f.split('.')[1] in ['png', 'jpg', 'jpeg']: - image_list.append(os.path.join(root, f)) - return image_list \ No newline at end of file diff --git a/video/lipfd/model_code/validate.py b/video/lipfd/model_code/validate.py deleted file mode 100644 index 533c5c4724ebe826690034c6676620c8c87362a7..0000000000000000000000000000000000000000 --- a/video/lipfd/model_code/validate.py +++ /dev/null @@ -1,63 +0,0 @@ -import argparse -import torch -import numpy as np -from data import AVLip -import torch.utils.data -from models import build_model -from sklearn.metrics import average_precision_score, confusion_matrix, accuracy_score - - -def validate(model, loader, gpu_id): - print("validating...") - device = torch.device(f"cuda:{gpu_id[0]}" if torch.cuda.is_available() else "cpu") - with torch.no_grad(): - y_true, y_pred = [], [] - for img, crops, label in loader: - img_tens = img.to(device) - crops_tens = [[t.to(device) for t in sublist] for sublist in crops] - features = model.get_features(img_tens).to(device) - - y_pred.extend(model(crops_tens, features)[0].sigmoid().flatten().tolist()) - y_true.extend(label.flatten().tolist()) - y_true = np.array(y_true) - y_pred = np.where(np.array(y_pred) >= 0.5, 1, 0) - - # Get AP - ap = average_precision_score(y_true, y_pred) - cm = confusion_matrix(y_true, y_pred) - tp, fn, fp, tn = cm.ravel() - fnr = fn / (fn + tp) - fpr = fp / (fp + tn) - acc = accuracy_score(y_true, y_pred) - return ap, fpr, fnr, acc - - -if __name__ == "__main__": - parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) - parser.add_argument("--real_list_path", type=str, default="./datasets/val/0_real") - parser.add_argument("--fake_list_path", type=str, default="./datasets/val/1_fake") - parser.add_argument("--max_sample", type=int, default=1000, help="max number of validate samples") - parser.add_argument("--batch_size", type=int, default=10) - parser.add_argument("--data_label", type=str, default="val") - parser.add_argument("--arch", type=str, default="CLIP:ViT-L/14") - parser.add_argument("--ckpt", type=str, default="./checkpoints/ckpt.pth") - parser.add_argument("--gpu", type=int, default=0) - - opt = parser.parse_args() - - device = torch.device(f"cuda:{opt.gpu}" if torch.cuda.is_available() else "cpu") - print(f"Using cuda {opt.gpu} for inference.") - - model = build_model(opt.arch) - state_dict = torch.load(opt.ckpt, map_location="cpu") - model.load_state_dict(state_dict["model"]) - print("Model loaded.") - model.eval() - model.to(device) - - dataset = AVLip(opt) - loader = data_loader = torch.utils.data.DataLoader( - dataset, batch_size=opt.batch_size, shuffle=True - ) - ap, fpr, fnr, acc = validate(model, loader, gpu_id=[opt.gpu]) - print(f"acc: {acc} ap: {ap} fpr: {fpr} fnr: {fnr}") diff --git a/video/lipfd/requirements.txt b/video/lipfd/requirements.txt deleted file mode 100644 index 2a8cb380490873540f836e9f3ad2670913e72c27..0000000000000000000000000000000000000000 --- a/video/lipfd/requirements.txt +++ /dev/null @@ -1,13 +0,0 @@ -fastapi -uvicorn -pydantic -python-multipart -torch>=1.8.0 -torchvision>=0.9.0 -facenet-pytorch -opencv-python-headless -numpy<2.0.0 -Pillow -ftfy -regex -tqdm diff --git a/video/mintime/Dockerfile b/video/mintime/Dockerfile deleted file mode 100644 index b1ce880fbf1303d4e1ee94da3c35803f033bd7f8..0000000000000000000000000000000000000000 --- a/video/mintime/Dockerfile +++ /dev/null @@ -1,58 +0,0 @@ -FROM nvidia/cuda:12.1.1-cudnn8-runtime-ubuntu22.04 - -ENV DEBIAN_FRONTEND=noninteractive -ENV PYTHONUNBUFFERED=1 - -WORKDIR /app - -# Install Python 3.10 and system dependencies for OpenCV -RUN apt-get update && apt-get install -y --no-install-recommends \ - python3 python3-pip \ - libgl1 \ - libglib2.0-0 \ - libsm6 \ - libxext6 \ - libxrender-dev \ - && rm -rf /var/lib/apt/lists/* - -RUN ln -sf /usr/bin/python3 /usr/bin/python - -# Install PyTorch with CUDA 12.1 -RUN pip install --no-cache-dir \ - torch==2.5.1 torchvision==0.20.1 \ - --index-url https://download.pytorch.org/whl/cu121 - -# Copy requirements and install (facenet-pytorch needs --no-deps due to torch<2.3 pin) -COPY requirements.txt . -RUN pip install --no-cache-dir --no-deps facenet-pytorch && \ - pip install --no-cache-dir -r requirements.txt - -# Create logs and weights directories -RUN mkdir -p logs weights - -# Copy model code (vendored from MINTIME repo) -COPY model_code/ /app/model_code/ - -# Copy weights -COPY weights/ /app/weights/ - -# Copy application code -COPY app.py . - -# Environment variables -ENV MODEL_PORT=7008 -ENV PRELOAD_MODEL=false -ENV MODEL_TIMEOUT=1800 -ENV EXTRACTOR_WEIGHTS_PATH=/app/weights/MINTIME/MINTIME_XC_Extractor_checkpoint30 -ENV MODEL_WEIGHTS_PATH=/app/weights/MINTIME/MINTIME_XC_Model_checkpoint30 - -# Expose port -EXPOSE 7008 - -# Drop root privileges -RUN adduser --disabled-password --gecos '' appuser && \ - chown -R appuser:appuser /app/logs /app/weights -USER appuser - -# Run the service -CMD ["python", "app.py"] diff --git a/video/mintime/__pycache__/app.cpython-313.pyc b/video/mintime/__pycache__/app.cpython-313.pyc deleted file mode 100644 index 6dfe5d6eca48025039ef6e78efcfe4a931585558..0000000000000000000000000000000000000000 Binary files a/video/mintime/__pycache__/app.cpython-313.pyc and /dev/null differ diff --git a/video/mintime/app.py b/video/mintime/app.py deleted file mode 100644 index 62bb79307ec7f2ced21d744796c6e734ca9863af..0000000000000000000000000000000000000000 --- a/video/mintime/app.py +++ /dev/null @@ -1,914 +0,0 @@ -"""MINTIME video deepfake detection service. - -Wraps the MINTIME model (IEEE T-IFS 2024, Multi-Identity-size-iNvariant -TIMEsformer) with a FastAPI endpoint. Uses Xception as a feature -extractor and a Size-Invariant TimeSformer for temporal classification -with identity-aware attention masks. - -The pipeline is: - 1. Extract frames from the video. - 2. Detect faces per frame with MTCNN. - 3. Crop faces, cluster them by identity (InceptionResnetV1 embeddings). - 4. Build identity-ordered sequences with size embeddings and masks. - 5. Extract Xception features, run the TimeSformer, return sigmoid score. - -Reference: Coccomini et al., "MINTIME: Multi-Identity Size-Invariant -Video Deepfake Detection", IEEE T-IFS 2024. -""" - -import base64 -import gc -import logging -import os -import platform -import sys -import tempfile -import threading -import time -from statistics import mean -from typing import Any, Dict, List, Optional, Tuple - -import cv2 -import networkx as nx -import numpy as np -import torch -import torch.nn.functional as F -import uvicorn -from einops import rearrange -from facenet_pytorch import InceptionResnetV1, fixed_image_standardization -from fastapi import FastAPI, HTTPException -from PIL import Image -from pydantic import BaseModel, ConfigDict, Field -from torch import nn - -# Prepend model_code to sys.path so vendored modules resolve correctly. -_MODEL_CODE_DIR = os.path.join(os.path.dirname(__file__), "model_code") -sys.path.insert(0, _MODEL_CODE_DIR) - -# The vendored transforms/albu.py imports crop from an old albumentations -# path that was removed in v2.x. The function is never actually called -# (IsotropicResize only uses cv2.resize), so inject a harmless stub. -import types as _types -_compat = _types.ModuleType("albumentations.augmentations.functional") -_compat.crop = None -sys.modules.setdefault("albumentations.augmentations.functional", _compat) - -from models.size_invariant_timesformer import SizeInvariantTimeSformer # noqa: E402 -from models.xception import xception # noqa: E402 -from transforms.albu import IsotropicResize # noqa: E402 - -logging.basicConfig(level=logging.INFO) -logger = logging.getLogger(__name__) - -MODEL_PORT = int(os.environ.get("MODEL_PORT", 7008)) -PRELOAD_MODEL = os.environ.get("PRELOAD_MODEL", "false").lower() == "true" -MODEL_TIMEOUT = int(os.environ.get("MODEL_TIMEOUT", 1800)) - -# Paths -- extractor and SizeInvariantTimeSformer checkpoints -EXTRACTOR_WEIGHTS_PATH = os.environ.get( - "EXTRACTOR_WEIGHTS_PATH", - "/app/weights/MINTIME/MINTIME_XC_Extractor_checkpoint30", -) -MODEL_WEIGHTS_PATH = os.environ.get( - "MODEL_WEIGHTS_PATH", - "/app/weights/MINTIME/MINTIME_XC_Model_checkpoint30", -) - -# Model hyperparameters from size_invariant_timesformer.yaml -NUM_FRAMES = 16 -IMAGE_SIZE = 224 -NUM_PATCHES = 49 # 7 x 7 spatial from Xception feature map -MAX_IDENTITIES = 2 -RANGE_SIZE = 5 -SIZE_EMB_DICT = [ - (1 + i * RANGE_SIZE, (i + 1) * RANGE_SIZE) if i != 0 - else (0, RANGE_SIZE) - for i in range(20) -] - -# Model config dict matching size_invariant_timesformer.yaml -MODEL_CONFIG = { - "model": { - "image-size": IMAGE_SIZE, - "patch-size": 1, - "num-classes": 1, - "num-patches": NUM_PATCHES, - "num-frames": NUM_FRAMES, - "max-identities": MAX_IDENTITIES, - "dim": 512, - "depth": 9, - "dim-head": 64, - "channels": 2048, - "heads": 8, - "attn-dropout": 0.0, - "ff-dropout": 0.0, - "shift-tokens": False, - "enable-size-emb": True, - "enable-pos-emb": True, - "enable-identity-attention": True, - } -} - - -# ── Helpers ────────────────────────────────────────────────────────────── - - -def _generate_connected_components( - similarities: np.ndarray, - similarity_threshold: float = 0.80, -) -> List[List[int]]: - """Build a similarity graph and return connected components.""" - graph = nx.Graph() - n = len(similarities) - for i in range(n): - for j in range(i + 1, n): - if similarities[i, j] > similarity_threshold: - graph.add_edge(i, j) - components = [sorted(c) for c in nx.connected_components(graph)] - # Include isolated nodes (faces not similar to any other) - all_in_components = set() - for c in components: - all_in_components.update(c) - for i in range(n): - if i not in all_in_components: - components.append([i]) - return components - - -def _preprocess_face_for_clustering(img: Image.Image) -> np.ndarray: - """Resize a PIL face crop to 128x128 for embedding extraction.""" - from torchvision.transforms import Resize - return np.asarray(Resize([128, 128])(img)) - - -# ── Device selection ───────────────────────────────────────────────────── - - -def _get_device() -> torch.device: - """Select optimal device: CUDA > MPS > CPU.""" - override = os.environ.get("DEEPSAFE_DEVICE", "").strip().lower() - if override == "cpu": - return torch.device("cpu") - if override == "cuda" and torch.cuda.is_available(): - return torch.device("cuda") - if ( - override == "mps" - and hasattr(torch.backends, "mps") - and torch.backends.mps.is_available() - ): - return torch.device("mps") - if torch.cuda.is_available(): - return torch.device("cuda") - if ( - platform.system() == "Darwin" - and hasattr(torch.backends, "mps") - and torch.backends.mps.is_available() - ): - return torch.device("mps") - return torch.device("cpu") - - -# ── Global state ───────────────────────────────────────────────────────── - -_extractor: Optional[nn.Module] = None -_model: Optional[nn.Module] = None -_embedding_model: Optional[nn.Module] = None -_device: Optional[torch.device] = None -_load_lock = threading.Lock() - - -def _strip_module_prefix(state_dict: dict) -> dict: - """Remove 'module.' prefix from DataParallel state dicts.""" - new_sd = {} - for k, v in state_dict.items(): - new_key = k.replace("module.", "", 1) if k.startswith("module.") else k - new_sd[new_key] = v - return new_sd - - -def _load_models() -> None: - """Load Xception extractor, SizeInvariantTimeSformer, and - InceptionResnetV1 for identity clustering (thread-safe).""" - global _extractor, _model, _embedding_model, _device - - if _model is not None: - return - - with _load_lock: - if _model is not None: - return - - _device = _get_device() - if _device.type == "cuda": - torch.backends.cudnn.benchmark = True - torch.set_float32_matmul_precision("high") - logger.info( - "Device: cuda (%s, %.1f GB VRAM)", - torch.cuda.get_device_name(0), - torch.cuda.get_device_properties(0).total_memory / 1024**3, - ) - else: - logger.warning( - "Device: %s (no CUDA -- inference may be slow)", - _device, - ) - - logger.info("Loading MINTIME models on %s ...", _device) - - # ── Xception feature extractor ────────────────────────────── - if not os.path.exists(EXTRACTOR_WEIGHTS_PATH): - raise FileNotFoundError( - f"Extractor weights not found: {EXTRACTOR_WEIGHTS_PATH}" - ) - feat_ext = xception(num_classes=1, pretrain_path=None) - ext_sd = torch.load( - EXTRACTOR_WEIGHTS_PATH, map_location="cpu", weights_only=False - ) - feat_ext.load_state_dict(_strip_module_prefix(ext_sd)) - feat_ext = feat_ext.to(_device) - feat_ext.train(False) - _extractor = feat_ext - - # ── SizeInvariantTimeSformer ──────────────────────────────── - if not os.path.exists(MODEL_WEIGHTS_PATH): - raise FileNotFoundError( - f"Model weights not found: {MODEL_WEIGHTS_PATH}" - ) - sit = SizeInvariantTimeSformer( - config=MODEL_CONFIG, require_attention=False - ) - model_sd = torch.load( - MODEL_WEIGHTS_PATH, map_location="cpu", weights_only=False - ) - sit.load_state_dict(_strip_module_prefix(model_sd)) - sit = sit.to(_device) - sit.train(False) - _model = sit - - # ── InceptionResnetV1 for identity clustering ─────────────── - emb = InceptionResnetV1(pretrained="vggface2").to(_device) - emb.train(False) - _embedding_model = emb - - logger.info("MINTIME models loaded successfully.") - - -def _is_model_loaded() -> bool: - """Return True if all three models are loaded.""" - return ( - _model is not None - and _extractor is not None - and _embedding_model is not None - ) - - -# ── FastAPI app ────────────────────────────────────────────────────────── - -app = FastAPI( - title="MINTIME Detection Service", - description=( - "Multi-Identity Size-Invariant Video Deepfake Detection " - "(Xception + TimeSformer, IEEE T-IFS 2024)" - ), - version="1.0.0", -) - - -class PredictRequest(BaseModel): - """Incoming prediction request.""" - - video_data: str # Base64-encoded video bytes - threshold: float = 0.5 - - -class PredictResponse(BaseModel): - """Outgoing prediction result.""" - - model_config = ConfigDict(populate_by_name=True) - - model: str = "mintime_detection" - probability: float - prediction: int - class_name: str = Field(..., alias="class") - inference_time: float - metadata: Dict[str, Any] - - -@app.on_event("startup") -async def startup_event(): - """Optionally preload model at startup.""" - if PRELOAD_MODEL: - _load_models() - - -@app.get("/") -def root(): - """Service info endpoint.""" - return { - "service": "mintime_detection", - "port": MODEL_PORT, - "model_loaded": _is_model_loaded(), - "device": str(_device) if _device else "unknown", - } - - -def _gpu_health_info() -> dict: - """Return GPU metrics for the health endpoint.""" - if torch.cuda.is_available() and _device is not None and _device.type == "cuda": - return { - "gpu_name": torch.cuda.get_device_name(0), - "vram_used_mb": round(torch.cuda.memory_allocated(0) / 1024**2), - "vram_total_mb": round( - torch.cuda.get_device_properties(0).total_memory / 1024**2 - ), - } - return {} - - -@app.get("/health") -def health(): - """Health check endpoint.""" - return { - "status": "healthy", - "model": "mintime_detection", - "device": str(_device) if _device else "cpu", - "model_loaded": _is_model_loaded(), - "extractor_weights_exist": os.path.exists(EXTRACTOR_WEIGHTS_PATH), - "model_weights_exist": os.path.exists(MODEL_WEIGHTS_PATH), - **_gpu_health_info(), - } - - -# ── Video processing utilities ─────────────────────────────────────────── - - -def _extract_frames( - video_path: str, -) -> Tuple[List[np.ndarray], int, int, int]: - """Extract all frames from a video file. - - Returns: - Tuple of (all_frames, fps, width, height). - """ - cap = cv2.VideoCapture(video_path) - fps = max(int(cap.get(cv2.CAP_PROP_FPS)), 1) - width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) - height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) - - frames: List[np.ndarray] = [] - while True: - ret, frame = cap.read() - if not ret: - break - frames.append(frame) - cap.release() - return frames, fps, width, height - - -def _detect_faces_mtcnn( - frames: List[np.ndarray], - fps: int, -) -> Dict[str, Any]: - """Detect faces in sampled frames using MTCNN. - - Samples one frame per second (every fps frames) and runs MTCNN - on half-resolution PIL images, matching the original preprocessing. - - Returns: - Dict mapping str(frame_index) to list of bboxes, or None. - """ - from facenet_pytorch import MTCNN - - mtcnn = MTCNN( - device=_device, - thresholds=[0.85, 0.95, 0.95], - margin=0, - ) - - bboxes_dict: Dict[str, Any] = {} - # Sample frames at ~1 per second - indices = list(range(0, len(frames), max(fps, 1))) - if not indices: - indices = [0] if frames else [] - - for idx in indices: - frame = frames[idx] - rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) - pil_img = Image.fromarray(rgb) - # Half resolution, matching original VideoDataset - pil_img = pil_img.resize( - [s // 2 for s in pil_img.size] - ) - boxes, _ = mtcnn.detect(pil_img) - if boxes is not None: - bboxes_dict[str(idx)] = boxes.tolist() - else: - bboxes_dict[str(idx)] = None - - return bboxes_dict - - -def _extract_crops( - frames: List[np.ndarray], - bboxes_dict: Dict[str, Any], - fps: int, -) -> List[Tuple[int, Image.Image, list]]: - """Extract face crops from video frames using detected bboxes. - - Follows the original extract_crops logic: iterate per-second windows, - find the nearest frame with bboxes, crop with padding, make square. - - Returns: - List of (frame_index, pil_crop, bbox). - """ - frames_num = len(frames) - crops = [] - - for i in range(0, frames_num, fps): - # Find nearest frame with valid bboxes in this window - idx = i - limit = min(i + fps - 1, frames_num - 1) - - # Walk forward to find a frame with bboxes - while str(idx) not in bboxes_dict or bboxes_dict.get(str(idx)) is None: - if idx >= limit: - break - idx += 1 - - if str(idx) not in bboxes_dict or bboxes_dict.get(str(idx)) is None: - continue - - bboxes = bboxes_dict[str(idx)] - frame = frames[i] if i < frames_num else frames[-1] - - for bbox in bboxes: - xmin, ymin, xmax, ymax = [int(b * 2) for b in bbox] - w = xmax - xmin - h = ymax - ymin - - if w <= 0 or h <= 0: - continue - - # Padding - p_h = h // 3 - p_w = w // 3 - - crop_h = (ymax + p_h) - max(ymin - p_h, 0) - crop_w = (xmax + p_w) - max(xmin - p_w, 0) - - # Make square - if crop_h > crop_w: - p_h -= int((crop_h - crop_w) / 2) - else: - p_w -= int((crop_w - crop_h) / 2) - - crop = frame[ - max(ymin - p_h, 0):ymax + p_h, - max(xmin - p_w, 0):xmax + p_w, - ] - - h_c, w_c = crop.shape[:2] - if h_c <= 0 or w_c <= 0: - continue - - # Final square trim - if h_c > w_c: - diff = (h_c - w_c) // 2 - if diff > 0: - crop = crop[diff:-diff, :] - else: - crop = crop[1:, :] - elif h_c < w_c: - diff = (w_c - h_c) // 2 - if diff > 0: - crop = crop[:, diff:-diff] - else: - crop = crop[:, :-1] - - if crop.size == 0: - continue - - rgb_crop = cv2.cvtColor(crop, cv2.COLOR_BGR2RGB) - crops.append((i, Image.fromarray(rgb_crop), bbox)) - - return crops - - -def _cluster_faces( - crops: List[Tuple[int, Image.Image, list]], - similarity_threshold: float = 0.45, -) -> Dict[int, List]: - """Cluster face crops by identity using InceptionResnetV1 embeddings. - - Returns: - Dict mapping identity_index to list of (frame_idx, pil_img, bbox). - """ - if not crops: - return {} - - crops_images = [row[1] for row in crops] - - # Prepare face tensors for embedding extraction - faces = [_preprocess_face_for_clustering(face) for face in crops_images] - faces = np.stack([np.uint8(f) for f in faces]) - faces_tensor = torch.as_tensor(faces).permute(0, 3, 1, 2).float() - faces_tensor = fixed_image_standardization(faces_tensor) - faces_tensor = faces_tensor.to(_device) - - with torch.no_grad(): - embeddings = _embedding_model(faces_tensor).cpu().numpy() - - # Cosine similarity matrix - similarities = np.dot(embeddings, embeddings.T) - - components = _generate_connected_components( - similarities, similarity_threshold=similarity_threshold - ) - - clustered_faces: Dict[int, List] = {} - for identity_index, component in enumerate(components): - clustered_faces[identity_index] = [crops[fi] for fi in component] - - return clustered_faces - - -def _get_sorted_identities( - identities: Dict[int, List], - num_frames: int = NUM_FRAMES, - max_identities: int = MAX_IDENTITIES, -) -> List[list]: - """Sort identities by face size and allocate frame slots. - - Returns list of [identity_id, mean_side, num_faces, faces_list]. - """ - sorted_ids = [] - for identity in identities: - faces = identities[identity] - mean_side = mean([row[1].size[0] for row in faces]) - sorted_ids.append([identity, mean_side, len(faces), faces]) - - # Sort by face size descending (largest first) - sorted_ids.sort(key=lambda x: x[1], reverse=True) - - if len(sorted_ids) > max_identities: - sorted_ids = sorted_ids[:max_identities] - - identities_number = len(sorted_ids) - available_additional = [] - - if identities_number > 1: - max_faces_map = { - 1: [num_frames], - 2: [num_frames // 2, num_frames // 2], - 3: [num_frames // 3, num_frames // 3, num_frames // 4], - 4: [num_frames // 3, num_frames // 3, num_frames // 8, - num_frames // 8], - } - alloc = max_faces_map[identities_number] - - for i in range(identities_number): - if sorted_ids[i][2] < alloc[i] and i < identities_number - 1: - sorted_ids[i + 1][2] += alloc[i] - sorted_ids[i][2] - available_additional.append(0) - elif sorted_ids[i][2] > alloc[i]: - available_additional.append(sorted_ids[i][2] - alloc[i]) - sorted_ids[i][2] = alloc[i] - else: - available_additional.append(0) - else: - sorted_ids[0][2] = num_frames - available_additional.append(0) - - # Fill remaining slots if needed - input_len = sum(r[2] for r in sorted_ids) - if input_len < num_frames: - for i in range(identities_number): - needed = num_frames - input_len - if available_additional[i] > 0: - added = min(available_additional[i], needed) - sorted_ids[i][2] += added - input_len += added - if input_len == num_frames: - break - if input_len < num_frames: - sorted_ids[-1][2] += num_frames - input_len - - return sorted_ids - - -def _create_val_transform(size: int, additional_targets: dict): - """Create the validation-time albumentations transform.""" - from albumentations import Compose, PadIfNeeded, Resize - - return Compose( - [ - IsotropicResize( - max_side=size, - interpolation_down=cv2.INTER_AREA, - interpolation_up=cv2.INTER_CUBIC, - ), - PadIfNeeded( - min_height=size, - min_width=size, - border_mode=cv2.BORDER_CONSTANT, - ), - Resize(height=size, width=size), - ], - additional_targets=additional_targets, - ) - - -def _generate_masks( - video_width: int, - video_height: int, - identities: List[list], - num_frames: int = NUM_FRAMES, - image_size: int = IMAGE_SIZE, - num_patches: int = NUM_PATCHES, -) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor, - torch.Tensor, torch.Tensor, list]: - """Build input tensors, masks, size embeddings, and positions. - - Mirrors generate_masks from predict.py. - """ - mask = [] - sequence = [] - size_embeddings = [] - images_frames = [] - video_area = video_width * video_height / 2 - - for identity in identities: - max_faces = identity[2] - identity_images = identity[3] - - # Uniform sampling if too many faces - if len(identity_images) > max_faces: - idx = np.round( - np.linspace(0, len(identity_images) - 2, max_faces) - ).astype(int) - identity_images = list( - np.asarray(identity_images, dtype=object)[idx] - ) - - images_frames.extend(img[0] for img in identity_images) - pil_images = [img[1] for img in identity_images] - - # Size embeddings based on face-frame area ratio - identity_size_embs = [] - for img in pil_images: - face_area = img.size[0] * img.size[1] - ratio = int(face_area * 100 / max(video_area, 1)) - side_ranges = list( - map( - lambda a_: ratio in range(a_[0], a_[1] + 1), - SIZE_EMB_DICT, - ) - ) - matches = np.where(side_ranges)[0] - identity_size_embs.append( - int(matches[0] + 1) if len(matches) > 0 else 1 - ) - - # Pad with empty frames if needed - if len(pil_images) < max_faces: - diff = max_faces - len(identity_size_embs) - identity_size_embs = list(identity_size_embs) + [0] * diff - pil_images.extend( - [np.zeros((image_size, image_size, 3), dtype=np.uint8) - for _ in range(diff)] - ) - mask.extend( - [1 if i < max_faces - diff else 0 for i in range(max_faces)] - ) - images_frames.extend([max(images_frames)] * diff) - else: - mask.extend([1] * max_faces) - - size_embeddings.extend(identity_size_embs) - sequence.extend(pil_images) - - # Convert PIL images to numpy arrays - sequence = [np.asarray(img) for img in sequence] - - # Apply albumentations transform to all frames together - additional_targets_keys = [f"image{i}" for i in range(num_frames)] - additional_targets_values = ["image"] * num_frames - additional_targets = dict( - zip(additional_targets_keys, additional_targets_values) - ) - transform = _create_val_transform(image_size, additional_targets) - - # Build transform kwargs - transform_kwargs = {"image": sequence[0]} - for i in range(1, len(sequence)): - transform_kwargs[f"image{i}"] = sequence[i] - - transformed = transform(**transform_kwargs) - sequence = [transformed[k] for k in transformed] - - # Build identities_mask - identities_mask = [] - last_range_end = 0 - for identity in identities: - n_faces = identity[2] - identity_mask = [ - last_range_end <= i < last_range_end + n_faces - for i in range(num_frames) - ] - for _ in range(n_faces): - identities_mask.append(identity_mask) - last_range_end += n_faces - - # Coherent temporal-positional embedding - images_frames_positions = { - k: v + 1 for v, k in enumerate(sorted(set(images_frames))) - } - frame_positions = [images_frames_positions[f] for f in images_frames] - - if num_patches is not None: - positions = [] - for fp in frame_positions: - positions.extend( - [i + 1 for i in range((fp - 1) * num_patches, - num_patches * fp)] - ) - positions.insert(0, 0) # CLS token position - else: - positions = [] - - tokens_per_identity = [] - for i, ident in enumerate(identities): - if i > 0: - tokens_per_identity.append( - (ident[0], - ident[2] * num_patches + identities[i - 1][2] * num_patches) - ) - else: - tokens_per_identity.append((ident[0], ident[2] * num_patches)) - - return ( - torch.tensor([sequence]).float(), - torch.tensor([size_embeddings]).int(), - torch.tensor([mask]).bool(), - torch.tensor([identities_mask]).bool(), - torch.tensor([positions]), - tokens_per_identity, - ) - - -# ── Prediction endpoint ───────────────────────────────────────────────── - - -@app.post("/predict", response_model=PredictResponse) -async def predict(request: PredictRequest): - """Run MINTIME deepfake detection on a base64-encoded video. - - Pipeline: - 1. Decode video, extract all frames. - 2. Detect faces per-second with MTCNN. - 3. Crop faces and cluster by identity. - 4. Build identity-ordered input with masks and size embeddings. - 5. Extract Xception features, run TimeSformer. - 6. Return sigmoid probability. - - Returns probability=0.5 if no faces are detected. - """ - if not _is_model_loaded(): - _load_models() - - start_time = time.time() - - # ── Decode video ──────────────────────────────────────────────── - with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as tmp: - try: - video_bytes = base64.b64decode(request.video_data) - tmp.write(video_bytes) - tmp_path = tmp.name - except Exception as e: - raise HTTPException( - status_code=400, detail=f"Failed to decode video: {e}" - ) - - try: - # ── Extract frames ────────────────────────────────────────── - frames, fps, vid_w, vid_h = _extract_frames(tmp_path) - if not frames: - raise HTTPException( - status_code=400, - detail="Could not extract frames from video.", - ) - - # ── Detect faces ──────────────────────────────────────────── - bboxes_dict = _detect_faces_mtcnn(frames, fps) - - # Check if any faces found - has_faces = any( - v is not None and len(v) > 0 - for v in bboxes_dict.values() - ) - if not has_faces: - return PredictResponse( - probability=0.5, - prediction=0, - class_name="real", - inference_time=time.time() - start_time, - metadata={ - "frames_extracted": len(frames), - "faces_detected": 0, - "identities": 0, - "note": "no faces detected", - "device": str(_device), - }, - ) - - # ── Extract crops ─────────────────────────────────────────── - crops = _extract_crops(frames, bboxes_dict, fps) - if not crops: - return PredictResponse( - probability=0.5, - prediction=0, - class_name="real", - inference_time=time.time() - start_time, - metadata={ - "frames_extracted": len(frames), - "faces_detected": 0, - "identities": 0, - "note": "no valid face crops", - "device": str(_device), - }, - ) - - # ── Cluster by identity ───────────────────────────────────── - clustered = _cluster_faces(crops) - num_identities = len(clustered) - - # ── Build identity sequence ───────────────────────────────── - sorted_identities = _get_sorted_identities(clustered) - - ( - videos_tensor, - size_embeddings, - mask_tensor, - identities_mask, - positions, - tokens_per_identity, - ) = _generate_masks( - vid_w, vid_h, sorted_identities, - ) - - # ── Run inference ─────────────────────────────────────────── - b, f, h, w, c = videos_tensor.shape - videos_tensor = videos_tensor.to(_device) - identities_mask = identities_mask.to(_device) - mask_tensor = mask_tensor.to(_device) - positions = positions.to(_device) - - with torch.no_grad(): - # Feature extraction: (B*F, C, H, W) - video_input = rearrange( - videos_tensor, "b f h w c -> (b f) c h w" - ) - features = _extractor(video_input) # (B*F, 2048, 7, 7) - features = rearrange( - features, "(b f) c h w -> b f c h w", b=b, f=f - ) - - # TimeSformer classification - pred = _model( - features, - mask=mask_tensor, - size_embedding=size_embeddings, - identities_mask=identities_mask, - positions=positions, - ) - - probability = float(torch.sigmoid(pred[0]).item()) - prediction = 1 if probability >= request.threshold else 0 - class_name = "fake" if prediction == 1 else "real" - - return PredictResponse( - probability=probability, - prediction=prediction, - class_name=class_name, - inference_time=time.time() - start_time, - metadata={ - "frames_extracted": len(frames), - "faces_detected": len(crops), - "identities": num_identities, - "device": str(_device), - }, - ) - - except HTTPException: - raise - except Exception as e: - logger.exception("Error during MINTIME prediction") - raise HTTPException(status_code=500, detail=str(e)) - finally: - if os.path.exists(tmp_path): - os.remove(tmp_path) - gc.collect() - - -if __name__ == "__main__": - uvicorn.run(app, host="0.0.0.0", port=MODEL_PORT) diff --git a/video/mintime/model_code/.gitignore b/video/mintime/model_code/.gitignore deleted file mode 100644 index b4e20e28c5225ee552094037026b2f68c317b699..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*/__pycache__ -*/support_files -*/ouputs -outputs -preprocessing/data_preparation.py -preprocessing/get_sizes_ranges.py -__pycache__ -timesformer.py -runs -weights -test_linear.py -test_timesformer.py - diff --git a/video/mintime/model_code/README.md b/video/mintime/model_code/README.md deleted file mode 100644 index 961c194356a5b659df75db8a4cd0d0e821dcc40f..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/README.md +++ /dev/null @@ -1,525 +0,0 @@ -# MINTIME-DF Multi-Identity size-iNvariant TIMEsformer for Video Deepfake Detection - -![Header](images/header.gif) - -# [Paper](https://ieeexplore.ieee.org/document/10547206) - -[![PWC](https://img.shields.io/endpoint.svg?url=https://paperswithcode.com/badge/mintime-multi-identity-size-invariant-video/classification-on-forgerynet)](https://paperswithcode.com/sota/classification-on-forgerynet?p=mintime-multi-identity-size-invariant-video) - -## Motivations behind this study -The continuing advancement of deepfake generation techniques and the increasingly credible results obtained through these, makes it increasingly urgent to develop new techniques to distinguish a manipulated video from a real one. This is, however, a far from simple task that introduces multiple challenges to be overcome, challenges that form the basis of this research work. -- Generalization of the Deepfake concept: Deepfake generation methods tend to introduce specific anomalies within images and videos. Deepfake detection models often tend to learn to recognise these specific anomalies and are therefore ineffective in the real world when dealing with unseen manipulations. Our previous studies in this area suggest a greater capacity for generalisation by Vision Transformers than by Convolutional Neural Networks [
Coccomini et al, 2022]; -- Ability to pick up both spatial and temporal anomalies within a video: Very often the anomalies that are searched for by deepfake detectors are exclusively spatial with frame-by-frame classifications. However, some important anomalies lie precisely in the variation of the face over time, which can be unnatural and thus allow a manipulated video to be identified; -- Handling of multiple faces within the same video: A specific situation that can be exploited by an attacker to deceive a deepfake detection system is found in the case of videos or images with multiple faces (identities). An attacker could in fact decide to manipulate only one of the people in the video. However, if the detection is carried out en bloc for all the faces in the video, the negative contribution to the final prediction made by the fake faces could be 'masked' by the non-manipulated ones, thus deceiving the system. -- Management of different face-frame area ratios: Typically in deepfake detection systems, the person's face is extracted from the video or image to be classified and before being given as input to a neural model it is rescaled to be uniform with all the others. This results in an important loss of information, namely the ratio of the area of the subject's face to the rest of the scene. - -To solve all these problems, we propose a Size-Invariant Multi-Identity Transformer-based architecture which exploits a novel form of Divided Space-Time attention. -The new features, strengths and advantages introduced by our approach are as follows: -- Ability of our model to capture both spatial and temporal anomalies in a deepfake video by jointly exploiting both a convolutional network and a variant of the Transformer namely the TimeSformer; -- Ability to handle multi-identity cases effectively. In previous approaches, there is a tendency to ignore people who appear with a lower frequency in the video and to only analyze faces extracted from the most frequent identity. However, in the real world, this can result in a flaw that can be exploited by an attacker who might, for instance, deliberately decide to manipulate a face of an identity that appears for a smaller portion of the video than others and thus escape the deepfake detection algorithms. Our approach, through the introduction of several architectural innovations such as 'Adaptive Input Sequence Assignment', 'Temporal Positional Embedding' and 'Identity-based Attention Calculation', is able to handle any number of identities while remaining robust in terms of classification accuracy. The Adaptive Sequence Assignment approach is designed to construct the input sequence to the model coherently even in the presence of multiple identities. Temporal Positional Embedding is a modification to the classical positional embedding of Transformers that keeps tokens not only spatially but also temporally consistent in terms of the identities to which they belong. Finally, Identity-based Attention calculation is a particular way of calculating attention that we have developed so that the network first focuses separately on the different identities that occur in the video and then converges to a single CLS token that is influenced by and common to all of them. This CLS is finally used for the final video-level classification. -- Ability to handle different face-frame area ratios through the introduction of 'Size Embedding'. Typically in deepfake detection systems, the person's face is extracted from the video or image to be classified and before being given as input to a neural model it is rescaled to be uniform with all the others. This results in an important loss of information, namely the ratio of the area of the subject's face to the rest of the scene. This may be reflected in missclassification with faces with a particular ratio being classified as fakes even though they are not. -- Explainability of the results by analyzing the attention maps produced by the model. By looking at the attention values assigned by the model to the tokens associated with the individual faces as input, it is possible to obtain a more refined classification that is not only limited to saying whether or not the video is fake but also which of the multiple identities, if any, were manipulated and at what point in the video. -- Near state-of-the-art results on ForgeryNet dataset. -- Generalization capability on unseen deepfake generation methods demonstrated by analyzing the results obtained on approaches not considered in the training set obtaining or surpassing state-of-the-art accuracies on all setups. - - -## Setup -Clone the repository and move into it: - -``` -git clone https://github.com/davide-coccomini/MINTIME-Multi-Identity-size-iNvariant-TIMEsformer-for-Video-Deepfake-Detection.git - -cd MINTIME-Multi-Identity-size-iNvariant-TIMEsformer-for-Video-Deepfake-Detection -``` - -Setup Python environment using conda: - -``` -conda env create --file environment.yml -conda activate deepfakes -export PYTHONPATH=. -``` - - -## Run Deepfake Detection on a video -If you want to directly classify a video using pre-trained models, you can download the weights from the model zoo and use the following command: - -``` -python3 predict.py --video_path path/to/video.mp4 --model_weights path/to/model_weights --extractor_weights path/to/extractor_weights --config config/size_invariant_timesformer.yaml -``` - -The output video will be stored in the examples/preds folder: -![Prediction Example](images/example_detection.gif) - -For purposes of explainability the attention maps on the various slots of the input sequence are also saved. These are used to discover, in the multi-identity case, which identity is fake in each frame. - -In the following example, the 16 slots are distributed between the two identities according to the number of available faces, the first 6 for identity 0 (the man), the second 6 for identity 1 (the woman). The remaining 4 slots are ignored as there are no additional faces to fill them. -The attention values extracted from the various heads are combined considering the maximum values for each tokens. The tokens are then grouped according to the frame and identity they refer to, resulting in 16 attention values (of which 4 are null). The spatial and temporal attention is combined to obtain the final value via the average function. Finally, the softmax function is applied to emphasise the differences between the attention placed on one face rather than another. - -In this case, the attention in frame 20 of the second identity is particularly high, which indicates that there is an anomaly there. - -![Prediction Example](images/attention_analysis.gif) - -## Model ZOO - -To download the pre-trained models available click here. - -### Models comparison -| Model | Identities | Accuracy | AUC | -| --------------- | --------------- | --------------- | --------------- | -| MINTIME-XC | 1 | 85.96 | 93.20 | -| MINTIME-XC | 2 | 87.64 | 94.25 | -| MINTIME-XC | 3 | 86.98 | 94.10 | -| SlowFast R-50 Retrained | 1 | 82.59 | 90.86 | -| SlowFast R-50 | 1 | 88.78 | 93.88 | -| X3D-M | 1 | 87.93 | 93.75 | -| MINTIME-EF | 1 | 81.92 | 90.13 | -| MINTIME-EF | 2 | 82.28 | 90.45 | -| MINTIME-EF | 3 | 82.05 | 90.28 | -| EfficientNet-B0 + MLP | 1 | 65.33 | 71.42 | -| EfficientNet-B0 + MLP | 2 | 67.03 | 71.05 | -| EfficientNet-B0 + MLP | 3 | 66.89 | 70.92 | - - -### Multi-Identity videos only -Accuracy obtained from models on multi-identity videos only. - -| Model | Accuracy | AUC | -| ---- | ---- | ---- | -| MINTIME-XC | 86.68 | 94.12 | -| MINTIME-EF | 81.21 | 89.56 | -| SlowFast R-50 Retrained | 72.63 | 80.92 | -| EfficientNet-B0 + MLP | 67.69 | 74.26 | - - -### Per-class accuracy -Accuracy obtained by the models on the various deepfake generation methods in the test set. -| Model |Pristines | Method 1 | Method 2 | Method 3 | Method 4 | Method 5 | Method 6 | Method 7 | Method 8 | FPR | -| --------------- | --------------- | --------------- | --------------- | --------------- | --------------- | --------------- | --------------- | --------------- | --------------- | --------------- | -| MINTIME-XC | 88.15 | 79.94 | 84.64 | 82.17 | 84.05 | 77.59 | 85.37 | 92.03 | 79.91 | 14.06 | -| MINTIME-EF | 85.84 | 70.05 | 69.75 | 74.55 | 82.05 | 78.14 | 79.59 | 91.49 | 77.03 | 14.16 | -| SlowFast R-50 Retrained | 84.65 | 69.70 | 71.71 | 81.19 | 81.35 | 78.67 | 88.43 | 88.96 | 92.05 | 15.34 | 22.36 | -| EfficientNet-B0 + MLP | 51.68 | 67.67 | 84.41 | 67.58 | 65.80 | 78.68 | 69.72 | 92.87 | 79.04 | 48.31 | - - -### Size Embedding evaluation -| Model | Identities| Accuracy | AUC | -| --------------- | --------------- | --------------- | --------------- | -| MINTIME-EF with size-embedding | 2 | 82.05 | 90.28 | -| MINTIME-EF w/o size-embedding | 2 | 81.83 | 90.13 | -| MINTIME-XC with size-embedding | 2 | 87.64 | 94.25 | -| MINTIME-XC w/o size-embedding | 2 | 87.13 | 94.03 | - - - -### Cross-Forgery Analysis - -| | | ID-replaced | ID-remained | Identities | -| --------------- | --------------- | --------------- | --------------- | --------------- | -| | | Accuracy | Accuracy | | -| X3D-M | ID-replaced | 87.92 | 55.25 | 1 | -| | ID-remained | 55.93 | 88.85 | | -| SlowFast | ID-replaced | 88.26 | 52.64 | 1 | -| | ID-remained | 52.70 | 87.96 | | -| MINTIME-XC | ID-replaced | 86.58 | 84.02 | 2 | -| | ID-remained | 64.01 | 92.08 | | -| MINTIME-EF | ID-replaced | 80.18 | 79.03 | 2 | -| | ID-remained | 63.13 | 89.22 | | - -| | | ID-replaced | ID-remained | Identities | -| --------------- | --------------- | --------------- | --------------- | --------------- | -| | | AUC | AUC | | -| X3D-M | ID-replaced | 92.91 | 65.59| 1 | -| | ID-remained | 62.87 | 95.40| | -| SlowFast | ID-replaced | 92.88 | 64.83| 1 | -| | ID-remained | 61.50 | 95.47| | -| MINTIME-XC | ID-replaced | 93.66 | 88.43| 2 | -| | ID-remained | 68.53 | 97.26| | -| MINTIME-EF | ID-replaced | 83.86 | 86.98| 2 | -| | ID-remained | 66.26 | 95.02| | - -### Cross-Dataset Analysis -| Model | Identities | AUC | -| --------------- | --------------- | --------------- | -| Face X-ray | 1 | 65.50 | -| Patch-based | 1 | 65.60 | -| DSP-FWA | 1 | 67.30 | -| CSN | 1 | 68.10 | -| Multi-Task | 1 | 68.10 | -| CNN-GRU | 1 | 68.90 | -| Xception | 1 | 70.90 | -| CNN-aug | 1 | 72.10 | -| LipForensics | 1 | 73.50 | -| FTCN | 1 | 74.00 | -| RealForensics | 1 | 75.90 | -| MINTIME-EF | 2 | 68.57 | -| MINTIME-XC | 2 | 77.92 | - - - -### Multi-Identity Approaches evaluation -Considering only multi-identity videos - -| Model | Identities | Temporal Positional Embedding | Multi-Identity Attention | AUC | -| --------------- | --------------- | --------------- | --------------- | --------------- | -| MINTIME-XC | 2 | ✓ | ✓ | 94.12 | -| MINTIME-XC | 2 | X | X | 93.29 | -| MINTIME-XC | 3 | ✓ | ✓ | 93.32 | -| MINTIME-XC | 3 | X | X | 90.57 | - - -## Dataset -In order to conduct our research, it was necessary to analyse the various datasets in circulation in order to identify the one with the following characteristics: -- Containing a sufficient number of videos for effective training; -- Presence of multi-faces videos; -- Multiple face-frame area ratios present in the videos; -- Large variety of subjects, scenes, perturbations, manipulation techniques. - -For these reasons, ForgeryNet was chosen as the dataset for our experiments. It is in fact characterised by a number of videos equal to 221,247 divided into 99,630 pristine videos and 121,617 manipulated ones with a frame rate between 20 and 30 FPS and variable duration. -From an analysis conducted during our research, we identified the presence of 11,785 video multi-faces with a maximum of 23 faces per video. The face-frame area ratio also appears to be highly distributed with videos containing faces covering an area up to almost, in some rare cases, even 100% of the entire image. - -![ForgeryNet face/frame ratio distribution](images/forgery_net_ratios.png) - -Furthermore, the EfficientNet B0 used as a patch extraction backbone was trained in our previous research work on the DFDC and FaceForensics++ datasets. - -The datasets can be downloaded at the following links: -- ForgeryNet: https://yinanhe.github.io/projects/forgerynet.html#download -- DFDC: https://dfdc.ai/ -- FaceForensics++: https://github.com/ondyari/FaceForensics/blob/master/dataset/ - - -## Preprocessing -In order to use the proposed model, some preprocessing steps are required to convert the ForgeryNet into the desired format. - -In case you want to retrain the convolutional backbone patch extraction the preprocessing of DFDC and FaceForensics++ datasets, the procedure is described in this repository. Otherwise you can directly use the pretrained model as explained in the training section. - -### Face Detection and Extraction -To perform deepfake detection it is necessary to first identify and extract faces from all the videos in the dataset. -Detect the faces inside the videos: -``` -cd preprocessing -python3 detect_faces.py --data_path "path/to/videos" -``` - -The extracted boxes will be saved inside the "path/to/videos/boxes" folder. -In order to get the best possible result, make sure that at least one face is identified in each video. If not, you can reduce the threshold values of the MTCNN on line 38 of face_detector.py and run the command again until at least one detection occurs. -At the end of the execution of face_detector.py an error message will appear if the detector was unable to find faces inside some videos. - -If you want to manually check that at least one face has been identified in each video, make sure that the number of files in the "boxes" folder is equal to the number of videos. To count the files in the folder use: -``` -cd path/to/videos/boxes -ls | wc -l -``` - -Extract the detected faces obtaining the images: -``` -python3 extract_crops.py --data_path "path/to/videos" --output_path "path/to/output" -``` - -Repeat detection and extraction for all the different parts of your dataset. - -After extracting all the faces from the videos in your dataset, organise the "dataset" folder as follows: -``` -- ForgeryNet - - Training - - crops - - train_video_release - - 1 - - video_name_0 - 0_0.png - 1_0.png - 2_0.png - ... - N_0.png - ... - - video_name_K - 0_0.png - 1_0.png - 2_0.png - ... - M_0.png - ... - - 19 - - video_name_0 - 0_0.png - 1_0.png - 2_0.png - ... - S_0.png - ... - - video_name_Y - 0_0.png - 1_0.png - 2_0.png - ... - J_0.png - - Validation - - crops - - val_video_release - ... - ... - ... - ... - ... -``` - -We suggest to exploit the --output_path parameter when executing extract_crops.py to build the folders structure properly. - - -### Split the Dataset -Since the labels of the ForgeryNet test set were not made public at the time of the study, the Validation Set will be used as our Test Set while our Validation Set is obtained through a customised split on the distribution of the training set. -The CSV files containing the videos belonging to each set are available in the "splits" folder, however, should you wish to redo the process of splitting the dataset, you can follow the steps below. -``` -cd preprocessing -python3 split_dataset.py --train_list_file path/to/training_list_file.txt --validation_list_file path/to/validation_list_file.txt -``` -The script will analyse the distribution of deepfake generation methods in the training set and move the videos within three separate folders train, val and test accordingly inside the "faces" folder. - -![ForgeryNet custom split deepfake generation methods distribution](images/resulting_distribution.png) - - -The dataset at the end of this process will have the following structure: - -``` -- ForgeryNet - - faces - - train - - 1 - - video_name_0 - 0_0.png - 1_0.png - 2_0.png - ... - N_0.png - ... - - video_name_K - 0_0.png - 1_0.png - 2_0.png - ... - M_0.png - ... - - 19 - - video_name_0 - 0_0.png - 1_0.png - 2_0.png - ... - S_0.png - ... - - video_name_Y - 0_0.png - 1_0.png - 2_0.png - ... - J_0.png - - val - ... - ... - ... - - - test - ... - ... - ... - -``` - -This split was used only as an additional experimental field but all the reported results are obtained on the ForgeryNet Validation set. - -### Identity Clustering -Having to manage multi-face videos and wanting to detect temporal and not just spatial anomalies, it is necessary to clustered the faces in each video on the basis of their similarity and maintaining the temporal order of their appearance in the frames. To do this, a clustering algorithm was developed that groups the faces extracted from the videos into sequences. - -To run the clustering split use the following commands: -``` -cd preprocessing -python3 cluster_faces.py --faces_path path/to/faces -``` - -The algorithm is structured as follows: -- The features of each face are extracted via an InceptionResnetV1 pretrained on FaceNet; -- The distance between each face and all faces identified in the video is calculated; -- A graph is constructed with hard connection if the similarity is higher than the threshold; -- Clusters are obtained based on the graph and small clusters are discarded; -- The faces inside the clusters are temporally reordered; -- The clusters are enumerated based on mean faces size during data loading. - -![Clustering algorithm for multi-faces videos](images/clustering_deepfake_global.gif) - - -The following parameters can be changed as desired to achieve different clustering: -- --similarity_threshold: Threshold used to discard faces with high distance value (default 0.8); -- --valid_cluster_size_ratio: Valid cluster size percentage (default: 0.2) - -The dataset at the end of this process will have the following structure: -``` -- ForgeryNet - - faces - - train - - 1 - - video_name_0 - - identity_0 - 0_0.png - 1_0.png - 2_0.png - ... - D_0.png - ... - - identity_U - 0_0.png - 1_0.png - 2_0.png - ... - T_0.png - ... - - video_name_K - - identity_0 - 0_0.png - 1_0.png - 2_0.png - ... - P_0.png - ... - - identity_X - 0_0.png - 1_0.png - 2_0.png - ... - R_0.png - ... - - 19 - ... - ... - ... - - val - ... - ... - ... - ... - - - test - ... - ... - ... - ... -``` - -## Training -After transforming each video in the dataset into temporally and spatially coherent sequences, one can move on to the training phase of the model. - -To download the pretrained weights of the models you can run the following commands: -``` -mkdir weights -cd weights -wget ... -wget ... -wget ... -``` - - -If you are unable to use the previous urls you can download the weights from [Google Drive](https://drive.google.com/drive/folders/19bNOs8_rZ7LmPP3boDS3XvZcR1iryHR1?usp=sharing). - - -The network is trained to perform pristine/fake binary classification. The features are extracted from a pertrained EfficientNet B0 and the training of the TimeSformer is also influenced by the presence of an additional embedding, namely the size embedding. It is calculated from the face-frame area ratio for each face of the video and concatenated to each token obtained from it. - -![Size Invariant TimeSformer](images/size_invariant_timesformer.gif) - -### Masking and Sampling -The number of frames per video, and thus consecutive faces to be considered for classification, is set via the num-frames parameter in the configuration file. In the event that there are fewer faces in the considered identity than necessary, more empty ones are added and then a mask is used to drive the calculation of attention properly. In the case of longer sequences, however, uniform sampling is performed. Like a kind of data augmentation, this uniform sampling is performed by alternating various combinations of frames as shown in figure. - -![Mask Generation and Sequence Sampling](images/masking.png) - - -### Adaptive Input Sequence Assignment -To enable the model to handle multiple identities within one video, the number of available frames is divided among the identities of the video. -The maximum number of identities per video is set via the max-identities parameter in the configuration file. - -The identities are reordered according to the size of the faces within them, and the most important identities are given a higher number of frames to be exploited in the input sequence, in order to give more importance to faces that cover a larger area and are therefore likely to be more relevant in the video, as opposed to smaller faces. -![Input Sequence Assignemnt Example 1](images/sequence_generation_0.gif) - - -In the event that an identity does not have enough faces to satisfy the number of slots allocated to it, the remaining slots are inherited by the next identity. -![Input Sequence Assignemnt Example 2](images/sequence_generation_1.gif) - - -### Temporal Coherent Positional Embedding -Classical positional embedding was then evolved to ensure temporal consistency between frames as well as spatial consistency between tokens. -Tokens are numbered in such a way that two faces, of different identities but belonging to the same frame, have the same numbering. -Temporal coherence is maintained both locally by having an increasing numbering sequence as well as the frames from which the faces originate and globally by being generated on the basis of the global distribution of frames of all identities in the video. -In this first example, the two sequences are of the same length and have the same frame numbering. Therefore, the tokens are also numbered in the same way. -![Temporal Positional Embedding Example 1](images/temporal_positional_embedding_0.gif) - -In example number two, however, although the two identities have the same number of faces, they are extracted from different frames. The numbering of the tokens therefore in this case, in addition to being generated by taking the sequentiality locally for each identity into account, is also assigned on the basis of the global distribution of frames. -![Temporal Positional Embedding Example 2](images/temporal_positional_embedding_1.gif) - -### Identity-based Attention Calculation -For our TimeSformer we apply the version of attention that was most effective in the original paper, namely Divided Space-Time Attention. Attention is calculated spatially between all patches in the same frame, but is then also calculated between the corresponding patches in the next and previous frames using a moving window. - -![Divided Space-Time Attention](images/divided_space_time_attention.gif) - -As far as spatial attention is concerned, no further effort is required for this to be applied to our case. -Not being interested in capturing the relationships between faces of different identities, the calculation of temporal attention in our case is carried out exclusively between faces belonging to the same identity. - -![Multi-Face Identity-based Attention Calculation](images/identity_attention.gif) - -All faces, however, influence the CLS that is global and unique for all identities. -In the animation below, it is shown how attention is calculated exclusively by tokens referring to identity 0 faces (green), ignoring those referring to identity 1 faces (red) and vice versa. While all refer to the global CLS. - -![Multi-Face Identity-based Attention Calculation](images/attention_calculations_multi_face.gif) - -### Multi-Face Size-Invariant TimeSformer - -![Multi-Face Size-Invariant TimeSformer](images/multi_face_size_invariant_timesformer.gif) - -To run the training process use the following commands: -``` -python3 train.py --config config/size_invariant_timesformer.yaml --model 1 --train_list_file path/to/training_list_file.txt --validation_list_file path/to/validation_list_file.txt --extractor_weights path/to/backbone_weights -``` - -The following parameters can be changed as desired to perform different training: -- --num_epochs: Number of training epochs (default: 300); -- --resume: Path to latest checkpoint (default: none); -- --restore_epoch: Restart from the checkpoint's epoch if --resume option specified (default: False) -- --freeze_backbone: Maintain the network freezed or train it (default: False); -- --extractor_unfreeze_blocks: Number of blocks to train in the backbone (default: All); -- --max_videos: Maximum number of videos to use for training (default: all); -- --patience: How many epochs wait before stopping for validation loss not improving (default: 5); -- --logger_name: Path to the folder for tensorboard logging (default: runs/train); - - -### Baseline -To validate the real effectiveness of the implementation choices made on the presented architecture, we also conducted some alternative architecture training. In particular, the simplest of the two consists of a freezed EfficientNet-B0 pre-trained on the DFDC and FaceForensics++ datasets but whose output features, instead of going into a Transformer as in the original architecture, are given as input directly to a simple MLP. -![Baseline](images/baseline.gif) - -The MLP performs frame-by-frame classification for each face of the video and the predictions are then averaged and evaluated against a fixed threshold. - - -## Inference -To run the evaluation process of a trained model on a test set, use the following command: -``` -test.py --model_weights path/to/model --extractor_weights path/to/model --video_path path/to/videos --data_path path/to/faces --test_list_file path/to/test.csv --model model_type --config path/to/config -``` - -You can also use the option --save_attentions to save space, time and combined attention plots. - - -## Additional Parameters -In almost all the scripts the following parameters can be also customized: - -- --gpu_id: ID of GPU to use for processing or -1 to use multi-gpu only for the training (default: 0); -- --workers: Number of data loader workers (default: 8); -- --random_state: Random state number for reproducibility (default: 42) - -# Reference -``` -@misc{https://doi.org/10.48550/arxiv.2211.10996, - doi = {10.48550/ARXIV.2211.10996}, - url = {https://arxiv.org/abs/2211.10996}, - author = {Coccomini, Davide Alessandro and Zilos, Giorgos Kordopatis and Amato, Giuseppe and Caldelli, Roberto and Falchi, Fabrizio and Papadopoulos, Symeon and Gennaro, Claudio}, - keywords = {Computer Vision and Pattern Recognition (cs.CV), FOS: Computer and information sciences, FOS: Computer and information sciences}, - title = {MINTIME: Multi-Identity Size-Invariant Video Deepfake Detection}, - publisher = {arXiv}, - year = {2022}, - copyright = {arXiv.org perpetual, non-exclusive license} -} -``` diff --git a/video/mintime/model_code/config/baseline.yaml b/video/mintime/model_code/config/baseline.yaml deleted file mode 100644 index bdfa2a2cb0390aed327085782a31f59c8228f9a0..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/config/baseline.yaml +++ /dev/null @@ -1,21 +0,0 @@ -training: - lr: 0.01 - weight-decay: 0.0001 - bs: 8 - val_bs: 8 - optimizer: 'SGD' - scheduler: 'cosinelr' - gamma: 0.1 - step-size: 5 - augmentation: 'max' - -test: - bs: 1 - -model: - image-size: 224 - num-classes: 1 - dim: 1280 - mlp-dim: 512 - num-frames: 16 - max-identities: 2 diff --git a/video/mintime/model_code/config/convolutional_timesformer.yaml b/video/mintime/model_code/config/convolutional_timesformer.yaml deleted file mode 100644 index 19539b0677d14246ba70c1c9e6da2bd45c181ca9..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/config/convolutional_timesformer.yaml +++ /dev/null @@ -1,92 +0,0 @@ -training: - lr: 0.01 - weight-decay: 0.0001 - bs: 1 - val_bs: 1 - scheduler: 'steplr' - gamma: 0.1 - step-size: 15 - - -model: - image-size: 224 - patch-size: 1 - num-classes: 1 - num-frames: 8 - num-patches: 1280 - dim: 256 #512 - depth: 4 # 6 - dim-head: 64 - channels: 1280 - heads: 6 # 8 - emb-dim: 32 - attn-dropout: 0. - ff-dropout: 0. - efficient-net-block: 20 - rotary-emb: False - shift-tokens: False - -#model: -# image-size: 224 -# patch-size: 14 -# num-classes: 1 -# num-frames: 16 -# num-patches: 112 -# dim: 512 -# depth: 6 -# dim-head: 64 -# channels: 3 -# heads: 8 -# emb-dim: 32 -# attn-dropout: 0. -# ff-dropout: 0. -# efficient-net-block: 9 -# rotary-emb: False -# shift-tokens: False - - - -#model: -# image-size: 224 -# patch-size: 7 -# num-classes: 1 -# num-frames: 8 -# num-patches: 1280 -# dim: 512 -# depth: 6 -# dim-head: 64 -# channels: 3 -# heads: 8 -# emb-dim: 32 -# attn-dropout: 0. -# ff-dropout: 0. -# efficient-net-block: 20 -# rotary-emb: False -# shift-tokens: False - - -# -#torch.Size([64, 1280, 7, 7]) -#torch.Size([8, 10240, 1024]) -# - - -#model: -# image-size: 224 -# patch-size: 14 -# num-classes: 1 -# num-frames: 16 -# num-patches: 80 -# dim: 1024 -# depth: 6 -# dim-head: 64 -# channels: 3 -# heads: 16 -# emb-dim: 32 -# attn-dropout: 0. -# ff-dropout: 0. -# efficient-net-block: 6 -# rotary-emb: False -# shift-tokens: False - - diff --git a/video/mintime/model_code/config/size_invariant_timesformer.yaml b/video/mintime/model_code/config/size_invariant_timesformer.yaml deleted file mode 100644 index 492c0e2fdbfe794f98b14d4981e310a8e60911b7..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/config/size_invariant_timesformer.yaml +++ /dev/null @@ -1,32 +0,0 @@ -training: - lr: 0.01 - weight-decay: 0.0001 - bs: 8 #32 - val_bs: 8 #32 - optimizer: 'SGD' - scheduler: 'cosinelr' - gamma: 0.1 - step-size: 5 - augmentation: 'max' # min/max - -test: - bs: 1 - -model: - image-size: 224 - patch-size: 1 - num-classes: 1 - num-patches: 49 - num-frames: 16 - max-identities: 2 - dim: 512 - depth: 9 # 9 v2 3 v3 - dim-head: 64 - channels: 2048 # Xception: 2048 | EfficientNet: 1280 - heads: 8 - attn-dropout: 0. - ff-dropout: 0. - shift-tokens: False - enable-size-emb: True - enable-pos-emb: True - enable-identity-attention: True diff --git a/video/mintime/model_code/config/slowfast.yaml b/video/mintime/model_code/config/slowfast.yaml deleted file mode 100644 index 10e7d2474137faefe162b565a8121748bbb5a584..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/config/slowfast.yaml +++ /dev/null @@ -1,22 +0,0 @@ -training: - lr: 0.001 - weight-decay: 0.0001 - bs: 32 - val_bs: 32 - optimizer: 'SGD' - scheduler: 'cosinelr' - gamma: 0.1 - step-size: 5 - augmentation: 'max' # min/max - -test: - bs: 32 - -model: - image-size: 256 - num-classes: 1 - num-frames: 16 - max-identities: 1 - enable-size-emb: False - enable-pos-emb: False - enable-identity-attention: False diff --git a/video/mintime/model_code/cross-efficient-vit/configs/architecture.yaml b/video/mintime/model_code/cross-efficient-vit/configs/architecture.yaml deleted file mode 100644 index 1d9f3249c096d7f995046afe230955f0ea71ae4a..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/configs/architecture.yaml +++ /dev/null @@ -1,35 +0,0 @@ -training: - lr: 0.01 - weight-decay: 0.0000001 - bs: 16 - scheduler: 'steplr' - gamma: 0.1 - step-size: 15 - rebalancing-fake: 0.3 - rebalancing-real: 1 - frames-per-video: 30 # Equidistant frames - -model: - image-size: 224 - num-classes: 1 - depth: 4 # number of multi-scale encoding blocks - sm-dim: 192 # high res dimension - sm-patch-size: 7 # high res patch size (should be smaller than lg-patch-size) - sm-enc-depth: 2 # high res depth - sm-enc-dim-head: 64 - sm-enc-heads: 8 # high res heads - sm-enc-mlp-dim: 2048 # high res feedforward dimension - lg-dim: 384 # low res dimension - lg-patch-size: 56 # low res patch size - lg-enc-depth: 3 # low res depth - lg-enc-dim-head: 64 - lg-enc-heads: 8 # low res heads - lg-enc-mlp-dim: 2048 # low res feedforward dimensions - cross-attn-depth: 2 # cross attention rounds - cross-attn-dim-head: 64 - cross-attn-heads: 8 # cross attention heads - lg-channels: 24 - sm-channels: 1280 - dropout: 0.15 - emb-dropout: 0.15 - \ No newline at end of file diff --git a/video/mintime/model_code/cross-efficient-vit/deepfakes_dataset.py b/video/mintime/model_code/cross-efficient-vit/deepfakes_dataset.py deleted file mode 100644 index 778275638b2ed729235c5d5015f643309960142b..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/deepfakes_dataset.py +++ /dev/null @@ -1,67 +0,0 @@ -import torch -from torch.utils.data import DataLoader, TensorDataset, Dataset -import cv2 -import numpy as np - -import uuid -from albumentations import Compose, RandomBrightnessContrast, \ - HorizontalFlip, FancyPCA, HueSaturationValue, OneOf, ToGray, \ - ShiftScaleRotate, ImageCompression, PadIfNeeded, GaussNoise, GaussianBlur, Rotate - -from transforms.albu import IsotropicResize - -class DeepFakesDataset(Dataset): - def __init__(self, images, labels, image_size, mode = 'train'): - self.x = images - self.y = torch.from_numpy(labels) - self.image_size = image_size - self.mode = mode - self.n_samples = images.shape[0] - - def create_train_transforms(self, size): - return Compose([ - ImageCompression(quality_lower=60, quality_upper=100, p=0.2), - GaussNoise(p=0.3), - #GaussianBlur(blur_limit=3, p=0.05), - HorizontalFlip(), - OneOf([ - IsotropicResize(max_side=size, interpolation_down=cv2.INTER_AREA, interpolation_up=cv2.INTER_CUBIC), - IsotropicResize(max_side=size, interpolation_down=cv2.INTER_AREA, interpolation_up=cv2.INTER_LINEAR), - IsotropicResize(max_side=size, interpolation_down=cv2.INTER_LINEAR, interpolation_up=cv2.INTER_LINEAR), - ], p=1), - PadIfNeeded(min_height=size, min_width=size, border_mode=cv2.BORDER_CONSTANT), - OneOf([RandomBrightnessContrast(), FancyPCA(), HueSaturationValue()], p=0.4), - ToGray(p=0.2), - ShiftScaleRotate(shift_limit=0.1, scale_limit=0.2, rotate_limit=5, border_mode=cv2.BORDER_CONSTANT, p=0.5), - ] - ) - - def create_val_transform(self, size): - return Compose([ - IsotropicResize(max_side=size, interpolation_down=cv2.INTER_AREA, interpolation_up=cv2.INTER_CUBIC), - PadIfNeeded(min_height=size, min_width=size, border_mode=cv2.BORDER_CONSTANT), - ]) - - def __getitem__(self, index): - image = np.asarray(self.x[index]) - - if self.mode == 'train': - transform = self.create_train_transforms(self.image_size) - else: - transform = self.create_val_transform(self.image_size) - - #unique = uuid.uuid4() - #cv2.imwrite("../dataset/augmented_frames/vit_augmentation/square_fda/"+str(unique)+"_"+str(index)+"_original.png", image) - - image = transform(image=image)['image'] - - #cv2.imwrite("../dataset/augmented_frames/vit_augmentation/square_fda/"+str(unique)+"_"+str(index)+".png", image) - - return torch.tensor(image).float(), self.y[index] - - - - def __len__(self): - return self.n_samples - - diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/LICENSE b/video/mintime/model_code/cross-efficient-vit/efficient_net/LICENSE deleted file mode 100644 index d645695673349e3947e8e5ae42332d0ac3164cd7..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/README.md b/video/mintime/model_code/cross-efficient-vit/efficient_net/README.md deleted file mode 100644 index 78f6fd41e7dd8d41c0064271849c65b0abbdd2d6..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/README.md +++ /dev/null @@ -1,269 +0,0 @@ -# EfficientNet PyTorch - -### Quickstart - -Install with `pip install efficientnet_pytorch` and load a pretrained EfficientNet with: -```python -from efficientnet_pytorch import EfficientNet -model = EfficientNet.from_pretrained('efficientnet-b0') -``` - -### Updates - -#### Update (April 2, 2021) - -The [EfficientNetV2 paper](https://arxiv.org/abs/2104.00298) has been released! I am working on implementing it as you read this :) - -About EfficientNetV2: -> EfficientNetV2 is a new family of convolutional networks that have faster training speed and better parameter efficiency than previous models. To develop this family of models, we use a combination of training-aware neural architecture search and scaling, to jointly optimize training speed and parameter efficiency. The models were searched from the search space enriched with new ops such as Fused-MBConv. - -Here is a comparison: -> - - -#### Update (Aug 25, 2020) - -This update adds: - * A new `include_top` (default: `True`) option ([#208](https://github.com/lukemelas/EfficientNet-PyTorch/pull/208)) - * Continuous testing with [sotabench](https://sotabench.com/) - * Code quality improvements and fixes ([#215](https://github.com/lukemelas/EfficientNet-PyTorch/pull/215) [#223](https://github.com/lukemelas/EfficientNet-PyTorch/pull/223)) - -#### Update (May 14, 2020) - -This update adds comprehensive comments and documentation (thanks to @workingcoder). - -#### Update (January 23, 2020) - -This update adds a new category of pre-trained model based on adversarial training, called _advprop_. It is important to note that the preprocessing required for the advprop pretrained models is slightly different from normal ImageNet preprocessing. As a result, by default, advprop models are not used. To load a model with advprop, use: -```python -model = EfficientNet.from_pretrained("efficientnet-b0", advprop=True) -``` -There is also a new, large `efficientnet-b8` pretrained model that is only available in advprop form. When using these models, replace ImageNet preprocessing code as follows: -```python -if advprop: # for models using advprop pretrained weights - normalize = transforms.Lambda(lambda img: img * 2.0 - 1.0) -else: - normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], - std=[0.229, 0.224, 0.225]) -``` -This update also addresses multiple other issues ([#115](https://github.com/lukemelas/EfficientNet-PyTorch/issues/115), [#128](https://github.com/lukemelas/EfficientNet-PyTorch/issues/128)). - -#### Update (October 15, 2019) - -This update allows you to choose whether to use a memory-efficient Swish activation. The memory-efficient version is chosen by default, but it cannot be used when exporting using PyTorch JIT. For this purpose, we have also included a standard (export-friendly) swish activation function. To switch to the export-friendly version, simply call `model.set_swish(memory_efficient=False)` after loading your desired model. This update addresses issues [#88](https://github.com/lukemelas/EfficientNet-PyTorch/pull/88) and [#89](https://github.com/lukemelas/EfficientNet-PyTorch/pull/89). - -#### Update (October 12, 2019) - -This update makes the Swish activation function more memory-efficient. It also addresses pull requests [#72](https://github.com/lukemelas/EfficientNet-PyTorch/pull/72), [#73](https://github.com/lukemelas/EfficientNet-PyTorch/pull/73), [#85](https://github.com/lukemelas/EfficientNet-PyTorch/pull/85), and [#86](https://github.com/lukemelas/EfficientNet-PyTorch/pull/86). Thanks to the authors of all the pull requests! - -#### Update (July 31, 2019) - -_Upgrade the pip package with_ `pip install --upgrade efficientnet-pytorch` - -The B6 and B7 models are now available. Additionally, _all_ pretrained models have been updated to use AutoAugment preprocessing, which translates to better performance across the board. Usage is the same as before: -```python -from efficientnet_pytorch import EfficientNet -model = EfficientNet.from_pretrained('efficientnet-b7') -``` - -#### Update (June 29, 2019) - -This update adds easy model exporting ([#20](https://github.com/lukemelas/EfficientNet-PyTorch/issues/20)) and feature extraction ([#38](https://github.com/lukemelas/EfficientNet-PyTorch/issues/38)). - - * [Example: Export to ONNX](#example-export) - * [Example: Extract features](#example-feature-extraction) - * Also: fixed a CUDA/CPU bug ([#32](https://github.com/lukemelas/EfficientNet-PyTorch/issues/32)) - -It is also now incredibly simple to load a pretrained model with a new number of classes for transfer learning: -```python -model = EfficientNet.from_pretrained('efficientnet-b1', num_classes=23) -``` - - -#### Update (June 23, 2019) - -The B4 and B5 models are now available. Their usage is identical to the other models: -```python -from efficientnet_pytorch import EfficientNet -model = EfficientNet.from_pretrained('efficientnet-b4') -``` - -### Overview -This repository contains an op-for-op PyTorch reimplementation of [EfficientNet](https://arxiv.org/abs/1905.11946), along with pre-trained models and examples. - -The goal of this implementation is to be simple, highly extensible, and easy to integrate into your own projects. This implementation is a work in progress -- new features are currently being implemented. - -At the moment, you can easily: - * Load pretrained EfficientNet models - * Use EfficientNet models for classification or feature extraction - * Evaluate EfficientNet models on ImageNet or your own images - -_Upcoming features_: In the next few days, you will be able to: - * Train new models from scratch on ImageNet with a simple command - * Quickly finetune an EfficientNet on your own dataset - * Export EfficientNet models for production - -### Table of contents -1. [About EfficientNet](#about-efficientnet) -2. [About EfficientNet-PyTorch](#about-efficientnet-pytorch) -3. [Installation](#installation) -4. [Usage](#usage) - * [Load pretrained models](#loading-pretrained-models) - * [Example: Classify](#example-classification) - * [Example: Extract features](#example-feature-extraction) - * [Example: Export to ONNX](#example-export) -6. [Contributing](#contributing) - -### About EfficientNet - -If you're new to EfficientNets, here is an explanation straight from the official TensorFlow implementation: - -EfficientNets are a family of image classification models, which achieve state-of-the-art accuracy, yet being an order-of-magnitude smaller and faster than previous models. We develop EfficientNets based on AutoML and Compound Scaling. In particular, we first use [AutoML Mobile framework](https://ai.googleblog.com/2018/08/mnasnet-towards-automating-design-of.html) to develop a mobile-size baseline network, named as EfficientNet-B0; Then, we use the compound scaling method to scale up this baseline to obtain EfficientNet-B1 to B7. - - - - - - -
- - - -
- -EfficientNets achieve state-of-the-art accuracy on ImageNet with an order of magnitude better efficiency: - - -* In high-accuracy regime, our EfficientNet-B7 achieves state-of-the-art 84.4% top-1 / 97.1% top-5 accuracy on ImageNet with 66M parameters and 37B FLOPS, being 8.4x smaller and 6.1x faster on CPU inference than previous best [Gpipe](https://arxiv.org/abs/1811.06965). - -* In middle-accuracy regime, our EfficientNet-B1 is 7.6x smaller and 5.7x faster on CPU inference than [ResNet-152](https://arxiv.org/abs/1512.03385), with similar ImageNet accuracy. - -* Compared with the widely used [ResNet-50](https://arxiv.org/abs/1512.03385), our EfficientNet-B4 improves the top-1 accuracy from 76.3% of ResNet-50 to 82.6% (+6.3%), under similar FLOPS constraint. - -### About EfficientNet PyTorch - -EfficientNet PyTorch is a PyTorch re-implementation of EfficientNet. It is consistent with the [original TensorFlow implementation](https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet), such that it is easy to load weights from a TensorFlow checkpoint. At the same time, we aim to make our PyTorch implementation as simple, flexible, and extensible as possible. - -If you have any feature requests or questions, feel free to leave them as GitHub issues! - -### Installation - -Install via pip: -```bash -pip install efficientnet_pytorch -``` - -Or install from source: -```bash -git clone https://github.com/lukemelas/EfficientNet-PyTorch -cd EfficientNet-Pytorch -pip install -e . -``` - -### Usage - -#### Loading pretrained models - -Load an EfficientNet: -```python -from efficientnet_pytorch import EfficientNet -model = EfficientNet.from_name('efficientnet-b0') -``` - -Load a pretrained EfficientNet: -```python -from efficientnet_pytorch import EfficientNet -model = EfficientNet.from_pretrained('efficientnet-b0') -``` - -Details about the models are below: - -| *Name* |*# Params*|*Top-1 Acc.*|*Pretrained?*| -|:-----------------:|:--------:|:----------:|:-----------:| -| `efficientnet-b0` | 5.3M | 76.3 | ✓ | -| `efficientnet-b1` | 7.8M | 78.8 | ✓ | -| `efficientnet-b2` | 9.2M | 79.8 | ✓ | -| `efficientnet-b3` | 12M | 81.1 | ✓ | -| `efficientnet-b4` | 19M | 82.6 | ✓ | -| `efficientnet-b5` | 30M | 83.3 | ✓ | -| `efficientnet-b6` | 43M | 84.0 | ✓ | -| `efficientnet-b7` | 66M | 84.4 | ✓ | - - -#### Example: Classification - -Below is a simple, complete example. It may also be found as a jupyter notebook in `examples/simple` or as a [Colab Notebook](https://colab.research.google.com/drive/1Jw28xZ1NJq4Cja4jLe6tJ6_F5lCzElb4). - -We assume that in your current directory, there is a `img.jpg` file and a `labels_map.txt` file (ImageNet class names). These are both included in `examples/simple`. - -```python -import json -from PIL import Image -import torch -from torchvision import transforms - -from efficientnet_pytorch import EfficientNet -model = EfficientNet.from_pretrained('efficientnet-b0') - -# Preprocess image -tfms = transforms.Compose([transforms.Resize(224), transforms.ToTensor(), - transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),]) -img = tfms(Image.open('img.jpg')).unsqueeze(0) -print(img.shape) # torch.Size([1, 3, 224, 224]) - -# Load ImageNet class names -labels_map = json.load(open('labels_map.txt')) -labels_map = [labels_map[str(i)] for i in range(1000)] - -# Classify -model.eval() -with torch.no_grad(): - outputs = model(img) - -# Print predictions -print('-----') -for idx in torch.topk(outputs, k=5).indices.squeeze(0).tolist(): - prob = torch.softmax(outputs, dim=1)[0, idx].item() - print('{label:<75} ({p:.2f}%)'.format(label=labels_map[idx], p=prob*100)) -``` - -#### Example: Feature Extraction - -You can easily extract features with `model.extract_features`: -```python -from efficientnet_pytorch import EfficientNet -model = EfficientNet.from_pretrained('efficientnet-b0') - -# ... image preprocessing as in the classification example ... -print(img.shape) # torch.Size([1, 3, 224, 224]) - -features = model.extract_features(img) -print(features.shape) # torch.Size([1, 1280, 7, 7]) -``` - -#### Example: Export to ONNX - -Exporting to ONNX for deploying to production is now simple: -```python -import torch -from efficientnet_pytorch import EfficientNet - -model = EfficientNet.from_pretrained('efficientnet-b1') -dummy_input = torch.randn(10, 3, 240, 240) - -model.set_swish(memory_efficient=False) -torch.onnx.export(model, dummy_input, "test-b1.onnx", verbose=True) -``` - -[Here](https://colab.research.google.com/drive/1rOAEXeXHaA8uo3aG2YcFDHItlRJMV0VP) is a Colab example. - - -#### ImageNet - -See `examples/imagenet` for details about evaluating on ImageNet. - -### Contributing - -If you find a bug, create a GitHub issue, or even better, submit a pull request. Similarly, if you have questions, simply post them as GitHub issues. - -I look forward to seeing what the community does with these models! diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/efficientnet_pytorch/__init__.py b/video/mintime/model_code/cross-efficient-vit/efficient_net/efficientnet_pytorch/__init__.py deleted file mode 100644 index 2b529dfe3f61da71f7427fbeb7ab47710450d372..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/efficientnet_pytorch/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -__version__ = "0.7.1" -from .model import EfficientNet, VALID_MODELS -from .utils import ( - GlobalParams, - BlockArgs, - BlockDecoder, - efficientnet, - get_model_params, -) diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/efficientnet_pytorch/model.py b/video/mintime/model_code/cross-efficient-vit/efficient_net/efficientnet_pytorch/model.py deleted file mode 100644 index ccc0014468bf094160a6ad334c3fed44a8a0cf18..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/efficientnet_pytorch/model.py +++ /dev/null @@ -1,459 +0,0 @@ -"""model.py - Model and module class for EfficientNet. - They are built to mirror those in the official TensorFlow implementation. -""" - -# Author: lukemelas (github username) -# Github repo: https://github.com/lukemelas/EfficientNet-PyTorch -# With adjustments and added comments by workingcoder (github username). -import numpy as np -import torch -from torch import nn -from torch.nn import functional as F -from .utils import ( - round_filters, - round_repeats, - drop_connect, - get_same_padding_conv2d, - get_model_params, - efficientnet_params, - load_pretrained_weights, - Swish, - MemoryEfficientSwish, - calculate_output_image_size -) - - -VALID_MODELS = ( - 'efficientnet-b0', 'efficientnet-b1', 'efficientnet-b2', 'efficientnet-b3', - 'efficientnet-b4', 'efficientnet-b5', 'efficientnet-b6', 'efficientnet-b7', - 'efficientnet-b8', - - # Support the construction of 'efficientnet-l2' without pretrained weights - 'efficientnet-l2' -) - - -class MBConvBlock(nn.Module): - """Mobile Inverted Residual Bottleneck Block. - - Args: - block_args (namedtuple): BlockArgs, defined in utils.py. - global_params (namedtuple): GlobalParam, defined in utils.py. - image_size (tuple or list): [image_height, image_width]. - - References: - [1] https://arxiv.org/abs/1704.04861 (MobileNet v1) - [2] https://arxiv.org/abs/1801.04381 (MobileNet v2) - [3] https://arxiv.org/abs/1905.02244 (MobileNet v3) - """ - - def __init__(self, block_args, global_params, image_size=None): - super().__init__() - self._block_args = block_args - self._bn_mom = 1 - global_params.batch_norm_momentum # pytorch's difference from tensorflow - self._bn_eps = global_params.batch_norm_epsilon - self.has_se = (self._block_args.se_ratio is not None) and (0 < self._block_args.se_ratio <= 1) - self.id_skip = block_args.id_skip # whether to use skip connection and drop connect - - # Expansion phase (Inverted Bottleneck) - inp = self._block_args.input_filters # number of input channels - oup = self._block_args.input_filters * self._block_args.expand_ratio # number of output channels - if self._block_args.expand_ratio != 1: - Conv2d = get_same_padding_conv2d(image_size=image_size) - self._expand_conv = Conv2d(in_channels=inp, out_channels=oup, kernel_size=1, bias=False) - self._bn0 = nn.BatchNorm2d(num_features=oup, momentum=self._bn_mom, eps=self._bn_eps) - # image_size = calculate_output_image_size(image_size, 1) <-- this wouldn't modify image_size - - # Depthwise convolution phase - k = self._block_args.kernel_size - s = self._block_args.stride - Conv2d = get_same_padding_conv2d(image_size=image_size) - self._depthwise_conv = Conv2d( - in_channels=oup, out_channels=oup, groups=oup, # groups makes it depthwise - kernel_size=k, stride=s, bias=False) - self._bn1 = nn.BatchNorm2d(num_features=oup, momentum=self._bn_mom, eps=self._bn_eps) - image_size = calculate_output_image_size(image_size, s) - - # Squeeze and Excitation layer, if desired - if self.has_se: - Conv2d = get_same_padding_conv2d(image_size=(1, 1)) - num_squeezed_channels = max(1, int(self._block_args.input_filters * self._block_args.se_ratio)) - self._se_reduce = Conv2d(in_channels=oup, out_channels=num_squeezed_channels, kernel_size=1) - self._se_expand = Conv2d(in_channels=num_squeezed_channels, out_channels=oup, kernel_size=1) - - # Pointwise convolution phase - final_oup = self._block_args.output_filters - Conv2d = get_same_padding_conv2d(image_size=image_size) - self._project_conv = Conv2d(in_channels=oup, out_channels=final_oup, kernel_size=1, bias=False) - self._bn2 = nn.BatchNorm2d(num_features=final_oup, momentum=self._bn_mom, eps=self._bn_eps) - self._swish = MemoryEfficientSwish() - - def forward(self, inputs, drop_connect_rate=None): - """MBConvBlock's forward function. - - Args: - inputs (tensor): Input tensor. - drop_connect_rate (bool): Drop connect rate (float, between 0 and 1). - - Returns: - Output of this block after processing. - """ - - # Expansion and Depthwise Convolution - x = inputs - if self._block_args.expand_ratio != 1: - x = self._expand_conv(inputs) - x = self._bn0(x) - x = self._swish(x) - - x = self._depthwise_conv(x) - x = self._bn1(x) - x = self._swish(x) - - # Squeeze and Excitation - if self.has_se: - x_squeezed = F.adaptive_avg_pool2d(x, 1) - x_squeezed = self._se_reduce(x_squeezed) - x_squeezed = self._swish(x_squeezed) - x_squeezed = self._se_expand(x_squeezed) - x = torch.sigmoid(x_squeezed) * x - - # Pointwise Convolution - x = self._project_conv(x) - x = self._bn2(x) - - # Skip connection and drop connect - input_filters, output_filters = self._block_args.input_filters, self._block_args.output_filters - if self.id_skip and self._block_args.stride == 1 and input_filters == output_filters: - # The combination of skip connection and drop connect brings about stochastic depth. - if drop_connect_rate: - x = drop_connect(x, p=drop_connect_rate, training=self.training) - x = x + inputs # skip connection - return x - - def set_swish(self, memory_efficient=True): - """Sets swish function as memory efficient (for training) or standard (for export). - - Args: - memory_efficient (bool): Whether to use memory-efficient version of swish. - """ - self._swish = MemoryEfficientSwish() if memory_efficient else Swish() - - -class EfficientNet(nn.Module): - """EfficientNet model. - Most easily loaded with the .from_name or .from_pretrained methods. - - Args: - blocks_args (list[namedtuple]): A list of BlockArgs to construct blocks. - global_params (namedtuple): A set of GlobalParams shared between blocks. - - References: - [1] https://arxiv.org/abs/1905.11946 (EfficientNet) - - Example: - >>> import torch - >>> from efficientnet.model import EfficientNet - >>> inputs = torch.rand(1, 3, 224, 224) - >>> model = EfficientNet.from_pretrained('efficientnet-b0') - >>> model.eval() - >>> outputs = model(inputs) - """ - - def __init__(self, blocks_args=None, global_params=None): - super().__init__() - assert isinstance(blocks_args, list), 'blocks_args should be a list' - assert len(blocks_args) > 0, 'block args must be greater than 0' - self._global_params = global_params - self._blocks_args = blocks_args - - # Batch norm parameters - bn_mom = 1 - self._global_params.batch_norm_momentum - bn_eps = self._global_params.batch_norm_epsilon - - # Get stem static or dynamic convolution depending on image size - image_size = global_params.image_size - Conv2d = get_same_padding_conv2d(image_size=image_size) - - # Stem - in_channels = 3 # rgb - out_channels = round_filters(32, self._global_params) # number of output channels - self._conv_stem = Conv2d(in_channels, out_channels, kernel_size=3, stride=2, bias=False) - self._bn0 = nn.BatchNorm2d(num_features=out_channels, momentum=bn_mom, eps=bn_eps) - image_size = calculate_output_image_size(image_size, 2) - - # Build blocks - self._blocks = nn.ModuleList([]) - for block_args in self._blocks_args: - - # Update block input and output filters based on depth multiplier. - block_args = block_args._replace( - input_filters=round_filters(block_args.input_filters, self._global_params), - output_filters=round_filters(block_args.output_filters, self._global_params), - num_repeat=round_repeats(block_args.num_repeat, self._global_params) - ) - - # The first block needs to take care of stride and filter size increase. - self._blocks.append(MBConvBlock(block_args, self._global_params, image_size=image_size)) - image_size = calculate_output_image_size(image_size, block_args.stride) - if block_args.num_repeat > 1: # modify block_args to keep same output size - block_args = block_args._replace(input_filters=block_args.output_filters, stride=1) - for _ in range(block_args.num_repeat - 1): - self._blocks.append(MBConvBlock(block_args, self._global_params, image_size=image_size)) - # image_size = calculate_output_image_size(image_size, block_args.stride) # stride = 1 - - # Head - in_channels = block_args.output_filters # output of final block - out_channels = round_filters(1280, self._global_params) - Conv2d = get_same_padding_conv2d(image_size=image_size) - self._conv_head = Conv2d(in_channels, out_channels, kernel_size=1, bias=False) - self._bn1 = nn.BatchNorm2d(num_features=out_channels, momentum=bn_mom, eps=bn_eps) - - # Final linear layer - self._avg_pooling = nn.AdaptiveAvgPool2d(1) - if self._global_params.include_top: - self._dropout = nn.Dropout(self._global_params.dropout_rate) - self._fc = nn.Linear(out_channels, self._global_params.num_classes) - - # set activation to memory efficient swish by default - self._swish = MemoryEfficientSwish() - - def set_swish(self, memory_efficient=True): - """Sets swish function as memory efficient (for training) or standard (for export). - - Args: - memory_efficient (bool): Whether to use memory-efficient version of swish. - """ - self._swish = MemoryEfficientSwish() if memory_efficient else Swish() - for block in self._blocks: - block.set_swish(memory_efficient) - - def extract_endpoints(self, inputs): - """Use convolution layer to extract features - from reduction levels i in [1, 2, 3, 4, 5]. - - Args: - inputs (tensor): Input tensor. - - Returns: - Dictionary of last intermediate features - with reduction levels i in [1, 2, 3, 4, 5]. - Example: - >>> import torch - >>> from efficientnet.model import EfficientNet - >>> inputs = torch.rand(1, 3, 224, 224) - >>> model = EfficientNet.from_pretrained('efficientnet-b0') - >>> endpoints = model.extract_endpoints(inputs) - >>> print(endpoints['reduction_1'].shape) # torch.Size([1, 16, 112, 112]) - >>> print(endpoints['reduction_2'].shape) # torch.Size([1, 24, 56, 56]) - >>> print(endpoints['reduction_3'].shape) # torch.Size([1, 40, 28, 28]) - >>> print(endpoints['reduction_4'].shape) # torch.Size([1, 112, 14, 14]) - >>> print(endpoints['reduction_5'].shape) # torch.Size([1, 320, 7, 7]) - >>> print(endpoints['reduction_6'].shape) # torch.Size([1, 1280, 7, 7]) - """ - endpoints = dict() - - # Stem - x = self._swish(self._bn0(self._conv_stem(inputs))) - prev_x = x - - # Blocks - for idx, block in enumerate(self._blocks): - drop_connect_rate = self._global_params.drop_connect_rate - if drop_connect_rate: - drop_connect_rate *= float(idx) / len(self._blocks) # scale drop connect_rate - x = block(x, drop_connect_rate=drop_connect_rate) - if prev_x.size(2) > x.size(2): - endpoints['reduction_{}'.format(len(endpoints) + 1)] = prev_x - elif idx == len(self._blocks) - 1: - endpoints['reduction_{}'.format(len(endpoints) + 1)] = x - prev_x = x - - # Head - x = self._swish(self._bn1(self._conv_head(x))) - endpoints['reduction_{}'.format(len(endpoints) + 1)] = x - - return endpoints - - def extract_features(self, inputs): - """use convolution layer to extract feature . - - Args: - inputs (tensor): Input tensor. - - Returns: - Output of the final convolution - layer in the efficientnet model. - """ - # Stem - x = self._swish(self._bn0(self._conv_stem(inputs))) - - # Blocks - for idx, block in enumerate(self._blocks): - drop_connect_rate = self._global_params.drop_connect_rate - if drop_connect_rate: - drop_connect_rate *= float(idx) / len(self._blocks) # scale drop connect_rate - x = block(x, drop_connect_rate=drop_connect_rate) - - # Head - x = self._swish(self._bn1(self._conv_head(x))) - - return x - - def delete_blocks(self, limit): - ''' - tmp_blocks = nn.ModuleList([]) - for idx, block in enumerate(self._blocks): - if idx < limit: - tmp_blocks.append(self._blocks) - - self._blocks = tmp_blocks - ''' - self._blocks = self._blocks - - def extract_features_at_block(self, inputs, selected_block): - """use convolution layer to extract feature . - - Args: - inputs (tensor): Input tensor. - - Returns: - Output of the final convolution - layer in the efficientnet model. - """ - # Stem - x = self._swish(self._bn0(self._conv_stem(inputs))) - - # Blocks - for idx, block in enumerate(self._blocks): - drop_connect_rate = self._global_params.drop_connect_rate - if drop_connect_rate: - drop_connect_rate *= float(idx) / len(self._blocks) # scale drop connect_rate - x = block(x, drop_connect_rate=drop_connect_rate) - - if idx > selected_block: - break - - # Head - if selected_block >= len(self._blocks): - x = self._swish(self._bn1(self._conv_head(x))) - - return x - - def forward(self, inputs): - """EfficientNet's forward function. - Calls extract_features to extract features, applies final linear layer, and returns logits. - - Args: - inputs (tensor): Input tensor. - - Returns: - Output of this model after processing. - """ - # Convolution layers - x = self.extract_features(inputs) - # Pooling and final linear layer - x = self._avg_pooling(x) - if self._global_params.include_top: - x = x.flatten(start_dim=1) - x = self._dropout(x) - x = self._fc(x) - return x - - @classmethod - def from_name(cls, model_name, in_channels=3, **override_params): - """Create an efficientnet model according to name. - - Args: - model_name (str): Name for efficientnet. - in_channels (int): Input data's channel number. - override_params (other key word params): - Params to override model's global_params. - Optional key: - 'width_coefficient', 'depth_coefficient', - 'image_size', 'dropout_rate', - 'num_classes', 'batch_norm_momentum', - 'batch_norm_epsilon', 'drop_connect_rate', - 'depth_divisor', 'min_depth' - - Returns: - An efficientnet model. - """ - cls._check_model_name_is_valid(model_name) - blocks_args, global_params = get_model_params(model_name, override_params) - model = cls(blocks_args, global_params) - model._change_in_channels(in_channels) - return model - - @classmethod - def from_pretrained(cls, model_name, weights_path=None, advprop=False, - in_channels=3, num_classes=1000, **override_params): - """Create an efficientnet model according to name. - - Args: - model_name (str): Name for efficientnet. - weights_path (None or str): - str: path to pretrained weights file on the local disk. - None: use pretrained weights downloaded from the Internet. - advprop (bool): - Whether to load pretrained weights - trained with advprop (valid when weights_path is None). - in_channels (int): Input data's channel number. - num_classes (int): - Number of categories for classification. - It controls the output size for final linear layer. - override_params (other key word params): - Params to override model's global_params. - Optional key: - 'width_coefficient', 'depth_coefficient', - 'image_size', 'dropout_rate', - 'batch_norm_momentum', - 'batch_norm_epsilon', 'drop_connect_rate', - 'depth_divisor', 'min_depth' - - Returns: - A pretrained efficientnet model. - """ - model = cls.from_name(model_name, num_classes=num_classes, **override_params) - load_pretrained_weights(model, model_name, weights_path=weights_path, - load_fc=(num_classes == 1000), advprop=advprop) - model._change_in_channels(in_channels) - return model - - @classmethod - def get_image_size(cls, model_name): - """Get the input image size for a given efficientnet model. - - Args: - model_name (str): Name for efficientnet. - - Returns: - Input image size (resolution). - """ - cls._check_model_name_is_valid(model_name) - _, _, res, _ = efficientnet_params(model_name) - return res - - @classmethod - def _check_model_name_is_valid(cls, model_name): - """Validates model name. - - Args: - model_name (str): Name for efficientnet. - - Returns: - bool: Is a valid name or not. - """ - if model_name not in VALID_MODELS: - raise ValueError('model_name should be one of: ' + ', '.join(VALID_MODELS)) - - def _change_in_channels(self, in_channels): - """Adjust model's first convolution layer to in_channels, if in_channels not equals 3. - - Args: - in_channels (int): Input data's channel number. - """ - if in_channels != 3: - Conv2d = get_same_padding_conv2d(image_size=self._global_params.image_size) - out_channels = round_filters(32, self._global_params) - self._conv_stem = Conv2d(in_channels, out_channels, kernel_size=3, stride=2, bias=False) diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/efficientnet_pytorch/utils.py b/video/mintime/model_code/cross-efficient-vit/efficient_net/efficientnet_pytorch/utils.py deleted file mode 100644 index 826a62790920706d2c9f742fbe18386bf712ae4b..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/efficientnet_pytorch/utils.py +++ /dev/null @@ -1,616 +0,0 @@ -"""utils.py - Helper functions for building the model and for loading model parameters. - These helper functions are built to mirror those in the official TensorFlow implementation. -""" - -# Author: lukemelas (github username) -# Github repo: https://github.com/lukemelas/EfficientNet-PyTorch -# With adjustments and added comments by workingcoder (github username). - -import re -import math -import collections -from functools import partial -import torch -from torch import nn -from torch.nn import functional as F -from torch.utils import model_zoo - - -################################################################################ -# Help functions for model architecture -################################################################################ - -# GlobalParams and BlockArgs: Two namedtuples -# Swish and MemoryEfficientSwish: Two implementations of the method -# round_filters and round_repeats: -# Functions to calculate params for scaling model width and depth ! ! ! -# get_width_and_height_from_size and calculate_output_image_size -# drop_connect: A structural design -# get_same_padding_conv2d: -# Conv2dDynamicSamePadding -# Conv2dStaticSamePadding -# get_same_padding_maxPool2d: -# MaxPool2dDynamicSamePadding -# MaxPool2dStaticSamePadding -# It's an additional function, not used in EfficientNet, -# but can be used in other model (such as EfficientDet). - -# Parameters for the entire model (stem, all blocks, and head) -GlobalParams = collections.namedtuple('GlobalParams', [ - 'width_coefficient', 'depth_coefficient', 'image_size', 'dropout_rate', - 'num_classes', 'batch_norm_momentum', 'batch_norm_epsilon', - 'drop_connect_rate', 'depth_divisor', 'min_depth', 'include_top']) - -# Parameters for an individual model block -BlockArgs = collections.namedtuple('BlockArgs', [ - 'num_repeat', 'kernel_size', 'stride', 'expand_ratio', - 'input_filters', 'output_filters', 'se_ratio', 'id_skip']) - -# Set GlobalParams and BlockArgs's defaults -GlobalParams.__new__.__defaults__ = (None,) * len(GlobalParams._fields) -BlockArgs.__new__.__defaults__ = (None,) * len(BlockArgs._fields) - -# Swish activation function -if hasattr(nn, 'SiLU'): - Swish = nn.SiLU -else: - # For compatibility with old PyTorch versions - class Swish(nn.Module): - def forward(self, x): - return x * torch.sigmoid(x) - - -# A memory-efficient implementation of Swish function -class SwishImplementation(torch.autograd.Function): - @staticmethod - def forward(ctx, i): - result = i * torch.sigmoid(i) - ctx.save_for_backward(i) - return result - - @staticmethod - def backward(ctx, grad_output): - i = ctx.saved_tensors[0] - sigmoid_i = torch.sigmoid(i) - return grad_output * (sigmoid_i * (1 + i * (1 - sigmoid_i))) - - -class MemoryEfficientSwish(nn.Module): - def forward(self, x): - return SwishImplementation.apply(x) - - -def round_filters(filters, global_params): - """Calculate and round number of filters based on width multiplier. - Use width_coefficient, depth_divisor and min_depth of global_params. - - Args: - filters (int): Filters number to be calculated. - global_params (namedtuple): Global params of the model. - - Returns: - new_filters: New filters number after calculating. - """ - multiplier = global_params.width_coefficient - if not multiplier: - return filters - # TODO: modify the params names. - # maybe the names (width_divisor,min_width) - # are more suitable than (depth_divisor,min_depth). - divisor = global_params.depth_divisor - min_depth = global_params.min_depth - filters *= multiplier - min_depth = min_depth or divisor # pay attention to this line when using min_depth - # follow the formula transferred from official TensorFlow implementation - new_filters = max(min_depth, int(filters + divisor / 2) // divisor * divisor) - if new_filters < 0.9 * filters: # prevent rounding by more than 10% - new_filters += divisor - return int(new_filters) - - -def round_repeats(repeats, global_params): - """Calculate module's repeat number of a block based on depth multiplier. - Use depth_coefficient of global_params. - - Args: - repeats (int): num_repeat to be calculated. - global_params (namedtuple): Global params of the model. - - Returns: - new repeat: New repeat number after calculating. - """ - multiplier = global_params.depth_coefficient - if not multiplier: - return repeats - # follow the formula transferred from official TensorFlow implementation - return int(math.ceil(multiplier * repeats)) - - -def drop_connect(inputs, p, training): - """Drop connect. - - Args: - input (tensor: BCWH): Input of this structure. - p (float: 0.0~1.0): Probability of drop connection. - training (bool): The running mode. - - Returns: - output: Output after drop connection. - """ - assert 0 <= p <= 1, 'p must be in range of [0,1]' - - if not training: - return inputs - - batch_size = inputs.shape[0] - keep_prob = 1 - p - - # generate binary_tensor mask according to probability (p for 0, 1-p for 1) - random_tensor = keep_prob - random_tensor += torch.rand([batch_size, 1, 1, 1], dtype=inputs.dtype, device=inputs.device) - binary_tensor = torch.floor(random_tensor) - - output = inputs / keep_prob * binary_tensor - return output - - -def get_width_and_height_from_size(x): - """Obtain height and width from x. - - Args: - x (int, tuple or list): Data size. - - Returns: - size: A tuple or list (H,W). - """ - if isinstance(x, int): - return x, x - if isinstance(x, list) or isinstance(x, tuple): - return x - else: - raise TypeError() - - -def calculate_output_image_size(input_image_size, stride): - """Calculates the output image size when using Conv2dSamePadding with a stride. - Necessary for static padding. Thanks to mannatsingh for pointing this out. - - Args: - input_image_size (int, tuple or list): Size of input image. - stride (int, tuple or list): Conv2d operation's stride. - - Returns: - output_image_size: A list [H,W]. - """ - if input_image_size is None: - return None - image_height, image_width = get_width_and_height_from_size(input_image_size) - stride = stride if isinstance(stride, int) else stride[0] - image_height = int(math.ceil(image_height / stride)) - image_width = int(math.ceil(image_width / stride)) - return [image_height, image_width] - - -# Note: -# The following 'SamePadding' functions make output size equal ceil(input size/stride). -# Only when stride equals 1, can the output size be the same as input size. -# Don't be confused by their function names ! ! ! - -def get_same_padding_conv2d(image_size=None): - """Chooses static padding if you have specified an image size, and dynamic padding otherwise. - Static padding is necessary for ONNX exporting of models. - - Args: - image_size (int or tuple): Size of the image. - - Returns: - Conv2dDynamicSamePadding or Conv2dStaticSamePadding. - """ - if image_size is None: - return Conv2dDynamicSamePadding - else: - return partial(Conv2dStaticSamePadding, image_size=image_size) - - -class Conv2dDynamicSamePadding(nn.Conv2d): - """2D Convolutions like TensorFlow, for a dynamic image size. - The padding is operated in forward function by calculating dynamically. - """ - - # Tips for 'SAME' mode padding. - # Given the following: - # i: width or height - # s: stride - # k: kernel size - # d: dilation - # p: padding - # Output after Conv2d: - # o = floor((i+p-((k-1)*d+1))/s+1) - # If o equals i, i = floor((i+p-((k-1)*d+1))/s+1), - # => p = (i-1)*s+((k-1)*d+1)-i - - def __init__(self, in_channels, out_channels, kernel_size, stride=1, dilation=1, groups=1, bias=True): - super().__init__(in_channels, out_channels, kernel_size, stride, 0, dilation, groups, bias) - self.stride = self.stride if len(self.stride) == 2 else [self.stride[0]] * 2 - - def forward(self, x): - ih, iw = x.size()[-2:] - kh, kw = self.weight.size()[-2:] - sh, sw = self.stride - oh, ow = math.ceil(ih / sh), math.ceil(iw / sw) # change the output size according to stride ! ! ! - pad_h = max((oh - 1) * self.stride[0] + (kh - 1) * self.dilation[0] + 1 - ih, 0) - pad_w = max((ow - 1) * self.stride[1] + (kw - 1) * self.dilation[1] + 1 - iw, 0) - if pad_h > 0 or pad_w > 0: - x = F.pad(x, [pad_w // 2, pad_w - pad_w // 2, pad_h // 2, pad_h - pad_h // 2]) - return F.conv2d(x, self.weight, self.bias, self.stride, self.padding, self.dilation, self.groups) - - -class Conv2dStaticSamePadding(nn.Conv2d): - """2D Convolutions like TensorFlow's 'SAME' mode, with the given input image size. - The padding mudule is calculated in construction function, then used in forward. - """ - - # With the same calculation as Conv2dDynamicSamePadding - - def __init__(self, in_channels, out_channels, kernel_size, stride=1, image_size=None, **kwargs): - super().__init__(in_channels, out_channels, kernel_size, stride, **kwargs) - self.stride = self.stride if len(self.stride) == 2 else [self.stride[0]] * 2 - - # Calculate padding based on image size and save it - assert image_size is not None - ih, iw = (image_size, image_size) if isinstance(image_size, int) else image_size - kh, kw = self.weight.size()[-2:] - sh, sw = self.stride - oh, ow = math.ceil(ih / sh), math.ceil(iw / sw) - pad_h = max((oh - 1) * self.stride[0] + (kh - 1) * self.dilation[0] + 1 - ih, 0) - pad_w = max((ow - 1) * self.stride[1] + (kw - 1) * self.dilation[1] + 1 - iw, 0) - if pad_h > 0 or pad_w > 0: - self.static_padding = nn.ZeroPad2d((pad_w // 2, pad_w - pad_w // 2, - pad_h // 2, pad_h - pad_h // 2)) - else: - self.static_padding = nn.Identity() - - def forward(self, x): - x = self.static_padding(x) - x = F.conv2d(x, self.weight, self.bias, self.stride, self.padding, self.dilation, self.groups) - return x - - -def get_same_padding_maxPool2d(image_size=None): - """Chooses static padding if you have specified an image size, and dynamic padding otherwise. - Static padding is necessary for ONNX exporting of models. - - Args: - image_size (int or tuple): Size of the image. - - Returns: - MaxPool2dDynamicSamePadding or MaxPool2dStaticSamePadding. - """ - if image_size is None: - return MaxPool2dDynamicSamePadding - else: - return partial(MaxPool2dStaticSamePadding, image_size=image_size) - - -class MaxPool2dDynamicSamePadding(nn.MaxPool2d): - """2D MaxPooling like TensorFlow's 'SAME' mode, with a dynamic image size. - The padding is operated in forward function by calculating dynamically. - """ - - def __init__(self, kernel_size, stride, padding=0, dilation=1, return_indices=False, ceil_mode=False): - super().__init__(kernel_size, stride, padding, dilation, return_indices, ceil_mode) - self.stride = [self.stride] * 2 if isinstance(self.stride, int) else self.stride - self.kernel_size = [self.kernel_size] * 2 if isinstance(self.kernel_size, int) else self.kernel_size - self.dilation = [self.dilation] * 2 if isinstance(self.dilation, int) else self.dilation - - def forward(self, x): - ih, iw = x.size()[-2:] - kh, kw = self.kernel_size - sh, sw = self.stride - oh, ow = math.ceil(ih / sh), math.ceil(iw / sw) - pad_h = max((oh - 1) * self.stride[0] + (kh - 1) * self.dilation[0] + 1 - ih, 0) - pad_w = max((ow - 1) * self.stride[1] + (kw - 1) * self.dilation[1] + 1 - iw, 0) - if pad_h > 0 or pad_w > 0: - x = F.pad(x, [pad_w // 2, pad_w - pad_w // 2, pad_h // 2, pad_h - pad_h // 2]) - return F.max_pool2d(x, self.kernel_size, self.stride, self.padding, - self.dilation, self.ceil_mode, self.return_indices) - - -class MaxPool2dStaticSamePadding(nn.MaxPool2d): - """2D MaxPooling like TensorFlow's 'SAME' mode, with the given input image size. - The padding mudule is calculated in construction function, then used in forward. - """ - - def __init__(self, kernel_size, stride, image_size=None, **kwargs): - super().__init__(kernel_size, stride, **kwargs) - self.stride = [self.stride] * 2 if isinstance(self.stride, int) else self.stride - self.kernel_size = [self.kernel_size] * 2 if isinstance(self.kernel_size, int) else self.kernel_size - self.dilation = [self.dilation] * 2 if isinstance(self.dilation, int) else self.dilation - - # Calculate padding based on image size and save it - assert image_size is not None - ih, iw = (image_size, image_size) if isinstance(image_size, int) else image_size - kh, kw = self.kernel_size - sh, sw = self.stride - oh, ow = math.ceil(ih / sh), math.ceil(iw / sw) - pad_h = max((oh - 1) * self.stride[0] + (kh - 1) * self.dilation[0] + 1 - ih, 0) - pad_w = max((ow - 1) * self.stride[1] + (kw - 1) * self.dilation[1] + 1 - iw, 0) - if pad_h > 0 or pad_w > 0: - self.static_padding = nn.ZeroPad2d((pad_w // 2, pad_w - pad_w // 2, pad_h // 2, pad_h - pad_h // 2)) - else: - self.static_padding = nn.Identity() - - def forward(self, x): - x = self.static_padding(x) - x = F.max_pool2d(x, self.kernel_size, self.stride, self.padding, - self.dilation, self.ceil_mode, self.return_indices) - return x - - -################################################################################ -# Helper functions for loading model params -################################################################################ - -# BlockDecoder: A Class for encoding and decoding BlockArgs -# efficientnet_params: A function to query compound coefficient -# get_model_params and efficientnet: -# Functions to get BlockArgs and GlobalParams for efficientnet -# url_map and url_map_advprop: Dicts of url_map for pretrained weights -# load_pretrained_weights: A function to load pretrained weights - -class BlockDecoder(object): - """Block Decoder for readability, - straight from the official TensorFlow repository. - """ - - @staticmethod - def _decode_block_string(block_string): - """Get a block through a string notation of arguments. - - Args: - block_string (str): A string notation of arguments. - Examples: 'r1_k3_s11_e1_i32_o16_se0.25_noskip'. - - Returns: - BlockArgs: The namedtuple defined at the top of this file. - """ - assert isinstance(block_string, str) - - ops = block_string.split('_') - options = {} - for op in ops: - splits = re.split(r'(\d.*)', op) - if len(splits) >= 2: - key, value = splits[:2] - options[key] = value - - # Check stride - assert (('s' in options and len(options['s']) == 1) or - (len(options['s']) == 2 and options['s'][0] == options['s'][1])) - - return BlockArgs( - num_repeat=int(options['r']), - kernel_size=int(options['k']), - stride=[int(options['s'][0])], - expand_ratio=int(options['e']), - input_filters=int(options['i']), - output_filters=int(options['o']), - se_ratio=float(options['se']) if 'se' in options else None, - id_skip=('noskip' not in block_string)) - - @staticmethod - def _encode_block_string(block): - """Encode a block to a string. - - Args: - block (namedtuple): A BlockArgs type argument. - - Returns: - block_string: A String form of BlockArgs. - """ - args = [ - 'r%d' % block.num_repeat, - 'k%d' % block.kernel_size, - 's%d%d' % (block.strides[0], block.strides[1]), - 'e%s' % block.expand_ratio, - 'i%d' % block.input_filters, - 'o%d' % block.output_filters - ] - if 0 < block.se_ratio <= 1: - args.append('se%s' % block.se_ratio) - if block.id_skip is False: - args.append('noskip') - return '_'.join(args) - - @staticmethod - def decode(string_list): - """Decode a list of string notations to specify blocks inside the network. - - Args: - string_list (list[str]): A list of strings, each string is a notation of block. - - Returns: - blocks_args: A list of BlockArgs namedtuples of block args. - """ - assert isinstance(string_list, list) - blocks_args = [] - for block_string in string_list: - blocks_args.append(BlockDecoder._decode_block_string(block_string)) - return blocks_args - - @staticmethod - def encode(blocks_args): - """Encode a list of BlockArgs to a list of strings. - - Args: - blocks_args (list[namedtuples]): A list of BlockArgs namedtuples of block args. - - Returns: - block_strings: A list of strings, each string is a notation of block. - """ - block_strings = [] - for block in blocks_args: - block_strings.append(BlockDecoder._encode_block_string(block)) - return block_strings - - -def efficientnet_params(model_name): - """Map EfficientNet model name to parameter coefficients. - - Args: - model_name (str): Model name to be queried. - - Returns: - params_dict[model_name]: A (width,depth,res,dropout) tuple. - """ - params_dict = { - # Coefficients: width,depth,res,dropout - 'efficientnet-b0': (1.0, 1.0, 224, 0.2), - 'efficientnet-b1': (1.0, 1.1, 240, 0.2), - 'efficientnet-b2': (1.1, 1.2, 260, 0.3), - 'efficientnet-b3': (1.2, 1.4, 300, 0.3), - 'efficientnet-b4': (1.4, 1.8, 380, 0.4), - 'efficientnet-b5': (1.6, 2.2, 456, 0.4), - 'efficientnet-b6': (1.8, 2.6, 528, 0.5), - 'efficientnet-b7': (2.0, 3.1, 600, 0.5), - 'efficientnet-b8': (2.2, 3.6, 672, 0.5), - 'efficientnet-l2': (4.3, 5.3, 800, 0.5), - } - return params_dict[model_name] - - -def efficientnet(width_coefficient=None, depth_coefficient=None, image_size=None, - dropout_rate=0.2, drop_connect_rate=0.2, num_classes=1000, include_top=True): - """Create BlockArgs and GlobalParams for efficientnet model. - - Args: - width_coefficient (float) - depth_coefficient (float) - image_size (int) - dropout_rate (float) - drop_connect_rate (float) - num_classes (int) - - Meaning as the name suggests. - - Returns: - blocks_args, global_params. - """ - - # Blocks args for the whole model(efficientnet-b0 by default) - # It will be modified in the construction of EfficientNet Class according to model - blocks_args = [ - 'r1_k3_s11_e1_i32_o16_se0.25', - 'r2_k3_s22_e6_i16_o24_se0.25', - 'r2_k5_s22_e6_i24_o40_se0.25', - 'r3_k3_s22_e6_i40_o80_se0.25', - 'r3_k5_s11_e6_i80_o112_se0.25', - 'r4_k5_s22_e6_i112_o192_se0.25', - 'r1_k3_s11_e6_i192_o320_se0.25', - ] - blocks_args = BlockDecoder.decode(blocks_args) - - global_params = GlobalParams( - width_coefficient=width_coefficient, - depth_coefficient=depth_coefficient, - image_size=image_size, - dropout_rate=dropout_rate, - - num_classes=num_classes, - batch_norm_momentum=0.99, - batch_norm_epsilon=1e-3, - drop_connect_rate=drop_connect_rate, - depth_divisor=8, - min_depth=None, - include_top=include_top, - ) - - return blocks_args, global_params - - -def get_model_params(model_name, override_params): - """Get the block args and global params for a given model name. - - Args: - model_name (str): Model's name. - override_params (dict): A dict to modify global_params. - - Returns: - blocks_args, global_params - """ - if model_name.startswith('efficientnet'): - w, d, s, p = efficientnet_params(model_name) - # note: all models have drop connect rate = 0.2 - blocks_args, global_params = efficientnet( - width_coefficient=w, depth_coefficient=d, dropout_rate=p, image_size=s) - else: - raise NotImplementedError('model name is not pre-defined: {}'.format(model_name)) - if override_params: - # ValueError will be raised here if override_params has fields not included in global_params. - global_params = global_params._replace(**override_params) - return blocks_args, global_params - - -# train with Standard methods -# check more details in paper(EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks) -url_map = { - 'efficientnet-b0': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b0-355c32eb.pth', - 'efficientnet-b1': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b1-f1951068.pth', - 'efficientnet-b2': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b2-8bb594d6.pth', - 'efficientnet-b3': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b3-5fb5a3c3.pth', - 'efficientnet-b4': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b4-6ed6700e.pth', - 'efficientnet-b5': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b5-b6417697.pth', - 'efficientnet-b6': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b6-c76e70fd.pth', - 'efficientnet-b7': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b7-dcc49843.pth', -} - -# train with Adversarial Examples(AdvProp) -# check more details in paper(Adversarial Examples Improve Image Recognition) -url_map_advprop = { - 'efficientnet-b0': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b0-b64d5a18.pth', - 'efficientnet-b1': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b1-0f3ce85a.pth', - 'efficientnet-b2': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b2-6e9d97e5.pth', - 'efficientnet-b3': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b3-cdd7c0f4.pth', - 'efficientnet-b4': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b4-44fb3a87.pth', - 'efficientnet-b5': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b5-86493f6b.pth', - 'efficientnet-b6': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b6-ac80338e.pth', - 'efficientnet-b7': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b7-4652b6dd.pth', - 'efficientnet-b8': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b8-22a8fe65.pth', -} - -# TODO: add the petrained weights url map of 'efficientnet-l2' - - -def load_pretrained_weights(model, model_name, weights_path=None, load_fc=True, advprop=False, verbose=True): - """Loads pretrained weights from weights path or download using url. - - Args: - model (Module): The whole model of efficientnet. - model_name (str): Model name of efficientnet. - weights_path (None or str): - str: path to pretrained weights file on the local disk. - None: use pretrained weights downloaded from the Internet. - load_fc (bool): Whether to load pretrained weights for fc layer at the end of the model. - advprop (bool): Whether to load pretrained weights - trained with advprop (valid when weights_path is None). - """ - if isinstance(weights_path, str): - state_dict = torch.load(weights_path) - else: - # AutoAugment or Advprop (different preprocessing) - url_map_ = url_map_advprop if advprop else url_map - state_dict = model_zoo.load_url(url_map_[model_name]) - - if load_fc: - ret = model.load_state_dict(state_dict, strict=False) - assert not ret.missing_keys, 'Missing keys when loading pretrained weights: {}'.format(ret.missing_keys) - else: - state_dict.pop('_fc.weight') - state_dict.pop('_fc.bias') - ret = model.load_state_dict(state_dict, strict=False) - assert set(ret.missing_keys) == set( - ['_fc.weight', '_fc.bias']), 'Missing keys when loading pretrained weights: {}'.format(ret.missing_keys) - assert not ret.unexpected_keys, 'Missing keys when loading pretrained weights: {}'.format(ret.unexpected_keys) - - if verbose: - print('Loaded pretrained weights for {}'.format(model_name)) diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/imagenet/README.md b/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/imagenet/README.md deleted file mode 100644 index fcafce33a6d3915a353eae374b55e72a3c1cc143..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/imagenet/README.md +++ /dev/null @@ -1,23 +0,0 @@ -### Imagenet - -This is a preliminary directory for evaluating the model on ImageNet. It is adapted from the standard PyTorch Imagenet script. - -For now, only evaluation is supported, but I am currently building scripts to assist with training new models on Imagenet. - -The evaluation results are slightly different from the original TensorFlow repository, due to differences in data preprocessing. For example, with the current preprocessing, `efficientnet-b3` gives a top-1 accuracy of `80.8`, rather than `81.1` in the paper. I am working on porting the TensorFlow preprocessing into PyTorch to address this issue. - -To run on Imagenet, place your `train` and `val` directories in `data`. - -Example commands: -```bash -# Evaluate small EfficientNet on CPU -python main.py data -e -a 'efficientnet-b0' --pretrained -``` -```bash -# Evaluate medium EfficientNet on GPU -python main.py data -e -a 'efficientnet-b3' --pretrained --gpu 0 --batch-size 128 -``` -```bash -# Evaluate ResNet-50 for comparison -python main.py data -e -a 'resnet50' --pretrained --gpu 0 -``` diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/imagenet/data/README.md b/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/imagenet/data/README.md deleted file mode 100644 index 310c6e0df88a16c4fc922b00adb50841f711080d..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/imagenet/data/README.md +++ /dev/null @@ -1,5 +0,0 @@ -### ImageNet - -Download ImageNet and place it into `train` and `val` folders here. - -More details may be found with the official PyTorch ImageNet example [here](https://github.com/pytorch/examples/blob/master/imagenet). diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/imagenet/main.py b/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/imagenet/main.py deleted file mode 100644 index 6f8c92296952c76792024ce9cccc46b274fd9f55..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/imagenet/main.py +++ /dev/null @@ -1,443 +0,0 @@ -""" -Evaluate on ImageNet. Note that at the moment, training is not implemented (I am working on it). -that being said, evaluation is working. -""" - -import argparse -import os -import random -import shutil -import time -import warnings -import PIL - -import torch -import torch.nn as nn -import torch.nn.parallel -import torch.backends.cudnn as cudnn -import torch.distributed as dist -import torch.optim -import torch.multiprocessing as mp -import torch.utils.data -import torch.utils.data.distributed -import torchvision.transforms as transforms -import torchvision.datasets as datasets -import torchvision.models as models - -from efficientnet_pytorch import EfficientNet - -parser = argparse.ArgumentParser(description='PyTorch ImageNet Training') -parser.add_argument('data', metavar='DIR', - help='path to dataset') -parser.add_argument('-a', '--arch', metavar='ARCH', default='resnet18', - help='model architecture (default: resnet18)') -parser.add_argument('-j', '--workers', default=4, type=int, metavar='N', - help='number of data loading workers (default: 4)') -parser.add_argument('--epochs', default=90, type=int, metavar='N', - help='number of total epochs to run') -parser.add_argument('--start-epoch', default=0, type=int, metavar='N', - help='manual epoch number (useful on restarts)') -parser.add_argument('-b', '--batch-size', default=256, type=int, - metavar='N', - help='mini-batch size (default: 256), this is the total ' - 'batch size of all GPUs on the current node when ' - 'using Data Parallel or Distributed Data Parallel') -parser.add_argument('--lr', '--learning-rate', default=0.1, type=float, - metavar='LR', help='initial learning rate', dest='lr') -parser.add_argument('--momentum', default=0.9, type=float, metavar='M', - help='momentum') -parser.add_argument('--wd', '--weight-decay', default=1e-4, type=float, - metavar='W', help='weight decay (default: 1e-4)', - dest='weight_decay') -parser.add_argument('-p', '--print-freq', default=10, type=int, - metavar='N', help='print frequency (default: 10)') -parser.add_argument('--resume', default='', type=str, metavar='PATH', - help='path to latest checkpoint (default: none)') -parser.add_argument('-e', '--evaluate', dest='evaluate', action='store_true', - help='evaluate model on validation set') -parser.add_argument('--pretrained', dest='pretrained', action='store_true', - help='use pre-trained model') -parser.add_argument('--world-size', default=-1, type=int, - help='number of nodes for distributed training') -parser.add_argument('--rank', default=-1, type=int, - help='node rank for distributed training') -parser.add_argument('--dist-url', default='tcp://224.66.41.62:23456', type=str, - help='url used to set up distributed training') -parser.add_argument('--dist-backend', default='nccl', type=str, - help='distributed backend') -parser.add_argument('--seed', default=None, type=int, - help='seed for initializing training. ') -parser.add_argument('--gpu', default=None, type=int, - help='GPU id to use.') -parser.add_argument('--image_size', default=224, type=int, - help='image size') -parser.add_argument('--advprop', default=False, action='store_true', - help='use advprop or not') -parser.add_argument('--multiprocessing-distributed', action='store_true', - help='Use multi-processing distributed training to launch ' - 'N processes per node, which has N GPUs. This is the ' - 'fastest way to use PyTorch for either single node or ' - 'multi node data parallel training') - -best_acc1 = 0 - - -def main(): - args = parser.parse_args() - - if args.seed is not None: - random.seed(args.seed) - torch.manual_seed(args.seed) - cudnn.deterministic = True - warnings.warn('You have chosen to seed training. ' - 'This will turn on the CUDNN deterministic setting, ' - 'which can slow down your training considerably! ' - 'You may see unexpected behavior when restarting ' - 'from checkpoints.') - - if args.gpu is not None: - warnings.warn('You have chosen a specific GPU. This will completely ' - 'disable data parallelism.') - - if args.dist_url == "env://" and args.world_size == -1: - args.world_size = int(os.environ["WORLD_SIZE"]) - - args.distributed = args.world_size > 1 or args.multiprocessing_distributed - - ngpus_per_node = torch.cuda.device_count() - if args.multiprocessing_distributed: - # Since we have ngpus_per_node processes per node, the total world_size - # needs to be adjusted accordingly - args.world_size = ngpus_per_node * args.world_size - # Use torch.multiprocessing.spawn to launch distributed processes: the - # main_worker process function - mp.spawn(main_worker, nprocs=ngpus_per_node, args=(ngpus_per_node, args)) - else: - # Simply call main_worker function - main_worker(args.gpu, ngpus_per_node, args) - - -def main_worker(gpu, ngpus_per_node, args): - global best_acc1 - args.gpu = gpu - - if args.gpu is not None: - print("Use GPU: {} for training".format(args.gpu)) - - if args.distributed: - if args.dist_url == "env://" and args.rank == -1: - args.rank = int(os.environ["RANK"]) - if args.multiprocessing_distributed: - # For multiprocessing distributed training, rank needs to be the - # global rank among all the processes - args.rank = args.rank * ngpus_per_node + gpu - dist.init_process_group(backend=args.dist_backend, init_method=args.dist_url, - world_size=args.world_size, rank=args.rank) - # create model - if 'efficientnet' in args.arch: # NEW - if args.pretrained: - model = EfficientNet.from_pretrained(args.arch, advprop=args.advprop) - print("=> using pre-trained model '{}'".format(args.arch)) - else: - print("=> creating model '{}'".format(args.arch)) - model = EfficientNet.from_name(args.arch) - - else: - if args.pretrained: - print("=> using pre-trained model '{}'".format(args.arch)) - model = models.__dict__[args.arch](pretrained=True) - else: - print("=> creating model '{}'".format(args.arch)) - model = models.__dict__[args.arch]() - - if args.distributed: - # For multiprocessing distributed, DistributedDataParallel constructor - # should always set the single device scope, otherwise, - # DistributedDataParallel will use all available devices. - if args.gpu is not None: - torch.cuda.set_device(args.gpu) - model.cuda(args.gpu) - # When using a single GPU per process and per - # DistributedDataParallel, we need to divide the batch size - # ourselves based on the total number of GPUs we have - args.batch_size = int(args.batch_size / ngpus_per_node) - args.workers = int(args.workers / ngpus_per_node) - model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[args.gpu]) - else: - model.cuda() - # DistributedDataParallel will divide and allocate batch_size to all - # available GPUs if device_ids are not set - model = torch.nn.parallel.DistributedDataParallel(model) - elif args.gpu is not None: - torch.cuda.set_device(args.gpu) - model = model.cuda(args.gpu) - else: - # DataParallel will divide and allocate batch_size to all available GPUs - if args.arch.startswith('alexnet') or args.arch.startswith('vgg'): - model.features = torch.nn.DataParallel(model.features) - model.cuda() - else: - model = torch.nn.DataParallel(model).cuda() - - # define loss function (criterion) and optimizer - criterion = nn.CrossEntropyLoss().cuda(args.gpu) - - optimizer = torch.optim.SGD(model.parameters(), args.lr, - momentum=args.momentum, - weight_decay=args.weight_decay) - - # optionally resume from a checkpoint - if args.resume: - if os.path.isfile(args.resume): - print("=> loading checkpoint '{}'".format(args.resume)) - checkpoint = torch.load(args.resume) - args.start_epoch = checkpoint['epoch'] - best_acc1 = checkpoint['best_acc1'] - if args.gpu is not None: - # best_acc1 may be from a checkpoint from a different GPU - best_acc1 = best_acc1.to(args.gpu) - model.load_state_dict(checkpoint['state_dict']) - optimizer.load_state_dict(checkpoint['optimizer']) - print("=> loaded checkpoint '{}' (epoch {})" - .format(args.resume, checkpoint['epoch'])) - else: - print("=> no checkpoint found at '{}'".format(args.resume)) - - cudnn.benchmark = True - - # Data loading code - traindir = os.path.join(args.data, 'train') - valdir = os.path.join(args.data, 'val') - if args.advprop: - normalize = transforms.Lambda(lambda img: img * 2.0 - 1.0) - else: - normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], - std=[0.229, 0.224, 0.225]) - - if 'efficientnet' in args.arch: - image_size = EfficientNet.get_image_size(args.arch) - else: - image_size = args.image_size - - train_dataset = datasets.ImageFolder( - traindir, - transforms.Compose([ - transforms.RandomResizedCrop(image_size), - transforms.RandomHorizontalFlip(), - transforms.ToTensor(), - normalize, - ])) - - if args.distributed: - train_sampler = torch.utils.data.distributed.DistributedSampler(train_dataset) - else: - train_sampler = None - - train_loader = torch.utils.data.DataLoader( - train_dataset, batch_size=args.batch_size, shuffle=(train_sampler is None), - num_workers=args.workers, pin_memory=True, sampler=train_sampler) - - val_transforms = transforms.Compose([ - transforms.Resize(image_size, interpolation=PIL.Image.BICUBIC), - transforms.CenterCrop(image_size), - transforms.ToTensor(), - normalize, - ]) - print('Using image size', image_size) - - val_loader = torch.utils.data.DataLoader( - datasets.ImageFolder(valdir, val_transforms), - batch_size=args.batch_size, shuffle=False, - num_workers=args.workers, pin_memory=True) - - if args.evaluate: - res = validate(val_loader, model, criterion, args) - with open('res.txt', 'w') as f: - print(res, file=f) - return - - for epoch in range(args.start_epoch, args.epochs): - if args.distributed: - train_sampler.set_epoch(epoch) - adjust_learning_rate(optimizer, epoch, args) - - # train for one epoch - train(train_loader, model, criterion, optimizer, epoch, args) - - # evaluate on validation set - acc1 = validate(val_loader, model, criterion, args) - - # remember best acc@1 and save checkpoint - is_best = acc1 > best_acc1 - best_acc1 = max(acc1, best_acc1) - - if not args.multiprocessing_distributed or (args.multiprocessing_distributed - and args.rank % ngpus_per_node == 0): - save_checkpoint({ - 'epoch': epoch + 1, - 'arch': args.arch, - 'state_dict': model.state_dict(), - 'best_acc1': best_acc1, - 'optimizer' : optimizer.state_dict(), - }, is_best) - - -def train(train_loader, model, criterion, optimizer, epoch, args): - batch_time = AverageMeter('Time', ':6.3f') - data_time = AverageMeter('Data', ':6.3f') - losses = AverageMeter('Loss', ':.4e') - top1 = AverageMeter('Acc@1', ':6.2f') - top5 = AverageMeter('Acc@5', ':6.2f') - progress = ProgressMeter(len(train_loader), batch_time, data_time, losses, top1, - top5, prefix="Epoch: [{}]".format(epoch)) - - # switch to train mode - model.train() - - end = time.time() - for i, (images, target) in enumerate(train_loader): - # measure data loading time - data_time.update(time.time() - end) - - if args.gpu is not None: - images = images.cuda(args.gpu, non_blocking=True) - target = target.cuda(args.gpu, non_blocking=True) - - # compute output - output = model(images) - loss = criterion(output, target) - - # measure accuracy and record loss - acc1, acc5 = accuracy(output, target, topk=(1, 5)) - losses.update(loss.item(), images.size(0)) - top1.update(acc1[0], images.size(0)) - top5.update(acc5[0], images.size(0)) - - # compute gradient and do SGD step - optimizer.zero_grad() - loss.backward() - optimizer.step() - - # measure elapsed time - batch_time.update(time.time() - end) - end = time.time() - - if i % args.print_freq == 0: - progress.print(i) - - -def validate(val_loader, model, criterion, args): - batch_time = AverageMeter('Time', ':6.3f') - losses = AverageMeter('Loss', ':.4e') - top1 = AverageMeter('Acc@1', ':6.2f') - top5 = AverageMeter('Acc@5', ':6.2f') - progress = ProgressMeter(len(val_loader), batch_time, losses, top1, top5, - prefix='Test: ') - - # switch to evaluate mode - model.eval() - - with torch.no_grad(): - end = time.time() - for i, (images, target) in enumerate(val_loader): - if args.gpu is not None: - images = images.cuda(args.gpu, non_blocking=True) - target = target.cuda(args.gpu, non_blocking=True) - - # compute output - output = model(images) - loss = criterion(output, target) - - # measure accuracy and record loss - acc1, acc5 = accuracy(output, target, topk=(1, 5)) - losses.update(loss.item(), images.size(0)) - top1.update(acc1[0], images.size(0)) - top5.update(acc5[0], images.size(0)) - - # measure elapsed time - batch_time.update(time.time() - end) - end = time.time() - - if i % args.print_freq == 0: - progress.print(i) - - # TODO: this should also be done with the ProgressMeter - print(' * Acc@1 {top1.avg:.3f} Acc@5 {top5.avg:.3f}' - .format(top1=top1, top5=top5)) - - return top1.avg - - -def save_checkpoint(state, is_best, filename='checkpoint.pth.tar'): - torch.save(state, filename) - if is_best: - shutil.copyfile(filename, 'model_best.pth.tar') - - -class AverageMeter(object): - """Computes and stores the average and current value""" - def __init__(self, name, fmt=':f'): - self.name = name - self.fmt = fmt - self.reset() - - def reset(self): - self.val = 0 - self.avg = 0 - self.sum = 0 - self.count = 0 - - def update(self, val, n=1): - self.val = val - self.sum += val * n - self.count += n - self.avg = self.sum / self.count - - def __str__(self): - fmtstr = '{name} {val' + self.fmt + '} ({avg' + self.fmt + '})' - return fmtstr.format(**self.__dict__) - - -class ProgressMeter(object): - def __init__(self, num_batches, *meters, prefix=""): - self.batch_fmtstr = self._get_batch_fmtstr(num_batches) - self.meters = meters - self.prefix = prefix - - def print(self, batch): - entries = [self.prefix + self.batch_fmtstr.format(batch)] - entries += [str(meter) for meter in self.meters] - print('\t'.join(entries)) - - def _get_batch_fmtstr(self, num_batches): - num_digits = len(str(num_batches // 1)) - fmt = '{:' + str(num_digits) + 'd}' - return '[' + fmt + '/' + fmt.format(num_batches) + ']' - - -def adjust_learning_rate(optimizer, epoch, args): - """Sets the learning rate to the initial LR decayed by 10 every 30 epochs""" - lr = args.lr * (0.1 ** (epoch // 30)) - for param_group in optimizer.param_groups: - param_group['lr'] = lr - - -def accuracy(output, target, topk=(1,)): - """Computes the accuracy over the k top predictions for the specified values of k""" - with torch.no_grad(): - maxk = max(topk) - batch_size = target.size(0) - - _, pred = output.topk(maxk, 1, True, True) - pred = pred.t() - correct = pred.eq(target.view(1, -1).expand_as(pred)) - - res = [] - for k in topk: - correct_k = correct[:k].reshape(-1).float().sum(0, keepdim=True) - res.append(correct_k.mul_(100.0 / batch_size)) - return res - - -if __name__ == '__main__': - main() diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/simple/check.ipynb b/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/simple/check.ipynb deleted file mode 100644 index a147ef04e7176bcde27f64daf78175d2309619f7..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/simple/check.ipynb +++ /dev/null @@ -1,177 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## TensorFlow Consistency Check\n", - "\n", - "In this example, we demonstrate that our model gives the same output as the original TensorFlow implementation, when using the same image pre-processing. Note that this notebook requires TensorFlow in order to do the pre-processing. " - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import json\n", - "from PIL import Image\n", - "\n", - "import torch\n", - "import tensorflow as tf\n", - "\n", - "from efficientnet_pytorch import EfficientNet" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "model_name = 'efficientnet-b0'\n", - "image_size = EfficientNet.get_image_size(model_name) # 224" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAArgAAAJlCAIAAAC+AhaJAAEAAElEQVR4nHT9WY8sW5odiO15b5t9jjnOOffcIe+QebMqs7JYlVVsNptsSNCLIKEF6J/oTwgQoEe9S4AgoNESSUENkt3VLGZlsoac7nzumWMOn2y2PethR/iNvEXaQ8DD3dzcbJv7Xutb3/q+Df/P/6f/Y1EUm6asu5ZFwgD06PG7/+K/+d8cn74DPAUIDlcX//DLv1ovz/IEY+icQHGUZkVuPeyGASCkrVsul33fE0IAcNPJeDTKL87evH39SgihPdlsNqPxeDabHR0dLxaLq+vby8vrpmnenF84C6qqghDFaSKlXMz368327Oxstth3AK5XmzdnV0LEt7e3QsR5kjJCOaGcEaM0Ai7P85//+Z+cXZz/q3/1r/b29tqh18rMFvOLq8tyW3/4ycfFePTs2bPxdP7+++9vt1vC6NnV18bYtu44i7S21oA8LZqm2dvbqzbbpq0Q9nmaZFmSpJEQnFiMCL68vFxvN0cnJ6ePH5Vl+fLN6ydPnv7o40/evn17cXb++9/8djGfHx4eVtty4rhzLs/zOI7jNGKMNX0HADg42v+bv/mb6WL+L//lv8xHmffeObdarX75+3+4uLiICB/l4x99+PHl+dV//9//DwcHB4RRC0Fvhj/6059MDhbZtPAEAgTXy9uubRlj3377bd+0R0dH2/Wm3pZaa2etYJxzTiAihBhjyrLce//Jp59++u/+3b+LomQ+nX3++Rec8/Xt+mD/iHMOHKzrZhgGAJD3Xmtdl6brOkyJc2a13QAATk5ODg4OxqPpxx9+SDHbm8y6pv/rv/oPb1+/qaqKzMef/vBHl5eXRZZ89rvfz8aTvb29YpRfXV31fS+1TvNkb29vtrd4+frVL37xi+OjJ2kae+/Wm2VVraNYzOfToihubm6urm7KbSN4GseZdxBCwqhQ8poQMpqOEIJlvY0iHqWiqipljIfIGm8cpFzEUc4YBwCgZAAAOOes8cYYpYxW1lq3vLkVIqaUG+2UUt4DSimltFuvkiSJ4xhCb4xxzmEEEELG6JgLiPwwDN6aoigWi0We59ATQoj1DgDw9uzs/OpSRKzve4QQxrirG4rJ3nxhtSw3W875wUG62WyA81maCEqSWBRpRjE5OTl57733Xr9+e35xVRSjQZmLi6vzy4s4TrMkff36NbLeWfv45NF//V/9s8vLy9/97rNtWW7r6vD4qOr6LM9ne4s/+skff/v8y81mU9e1994YI2WPEIqi6Ob2CmMshEAIMMYWi0Wapm3bwsYqpYz13gOlTNP2UkpvwXw+F5yqtgfOeGv+1//yX/7yb/4jhBBCHMfxer1u23pvb288HkdRNJ2OvfcvXn57cXFBKbXWnpwcG2MQQhHGP/z0x998803b9cenjy9uVtc3twCAvYPDsixHebZYLA72987evJJSDsPQdY0Qwnv/5uwCQjiaTLXWIooJZ6v1tus6kaQHBwe//d3vwt2cF6ht2+Pj4yiKOGVZlimlpuPJaDRqmqZcb25vb733x8fHo9GobZqX1zd1XTvnFosFgoQxNhqNrq9vvPe//e1vx+NpFEUffPDBe++99//5f//rf/Nv/s0HP/qAMtE0jYNIG1d3PYCoLEspJULovXef/ulPfzIqsrPXry4vL4G3xfS4aRqttfceQpimOaW0ruu6bouiuLy8xIimaeqcG41GWuu+H7TWWmvvHaU0S+M0jaMoMmrQWjnnvDNd122362EYIIRphIo8PzjY04OczWbWKELIarnBGFMublfbuuny8QQi1g9SCKFVixB6/OjR+fl5GgnBueoHa21VbYui+PrbZ9bbKE2qquJCAACkNAAArXWe59PJfLvddl23WCwIYQAAIQSEuGkaay1CSCkFCEYIaa3btlNKEUKEEJRwjDGEGCFkjOm6bhgUpTRJEsKdcw4AQClljHmIwuW3/UAphRDGUZpkqVKqbVuMsdceYwwhlFJWVdW2LQCAc44QCscBAFhrrbWUUiFEnKfX19ec8zzP67bV2hBCejlAgKuqqtrGGAMhBgBACBHGnDHnnLUWAIAQghCGYxJCwl/GGADAe08I4ZwTdvdeIcSomKRpGi4QQrxara6vr5umBQBgjO+nHei9996HwzrnjDHWWu89xjhchdbaWgshRAh568JEFI4QnsQYSymNMRBCQgiEMAwaAEApRSkFAFgtvfeUIO+9kZJRzCnjnApGIITAeeet995jrLV2zkEIwxQRjrk7w92HQgghhAWGSqko4pwzaSShKMsySjHBmJd1M0gZx7HD8PbyhvGk6xqAoGlrp3Tdbi00ZbMtt52I0HRSSKuQV8b5bpBERABiCGwkKEKoqtrXr7dXF7gsN5vNhnM+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bb1czm/eutu0VV1X33zz1fHxMaAjtBNCOFnXlU5iVxR9KSVnab83GfS3er3hRx/9II7j99794PDweHt7N45jzsTZ8mi1uryzde/OW/c+++SL2dQWeYEIzrp+nyMUXacRnHet9Z33aJQGfz2V+h11NMsS9BvLwc1NK3iaZw8ePbp37/7nX3395NmzB48e33/n0ddffztdLkSWaOsIInDqCVBGMKZaa2Yz03WeEkv4bC1n6wtnVVn5JBu1XX7z1h4X2/PFdLVadK2klFqYWUwN5OBRGaOcocip4M26Iox6cFHE93f3Tk7Ophez0Wik2q5put3d3Z2tHQB67+5Dj+TsYvbr3/yubSWltO2U936YZePJdtu26DEax3GWauu79dooxSOBiGVZCSFaqY1xJydH55cXeZ7HcXz//v1WdjwSq3L9V3/1V0+ePLm4uJjP55PJ5OL0rCiKO7duc87X63XExa3d/STB5Xw2nU4fPnh078HD5y9eNdJ6333z/LfK2OFg3HWqVTKKIhs7rbUGrNtuPOipdmVk+9UXn/70h9/7+c9+nCb83t37QPhsOV/Xqq7rddPOpguPHWMsyrLReDAc9hFxVa5U11mp2nKN3r589tQax0QE6IQQSEFr7bwLekrO2SuqTShsNGUeiWAUnXPeWw2mNy52tveklHXdtp0ybSNolCRR16mqbYx34/GSEk6RRDwyHhizSmkjldbW+oAQE8owioRzJo6F6WpnLBIf6PNtK2ezGSAHZFGciijiLCrrinPaNpJzkmXJ1vaIUtCm1eUqjuPxaPDO2w8fPHiwXiysUkYqdnp66r1HRpu2Nei1d+uuqZoaCFHOamdRK2V04HAKIeI4bTsVwt5sufziqy+jJP7h93/w7Mnzw4Pjum7TONPKLKqOJQWlvLOG8JhznkYpRWa1o4SF/gIiFr18uVxShlXbeOLjNKnqstfrEYpSylhE/X7fOTedThljxvmIMmWs1MYY00nL4my1WqVFbq09OzvzYOI009Z89fW3dV1W9TpJU8IEpVFdlqVoA01GSimlJoQkSeI7r7V23hAKSLzfhA0LKIxRSvkootZopZRHQq8Oa51WSnmvtA10QgAQSRxF0drYwEptmq5tW9XpJEkYYzFHwhhBorTS2hpjnQPnALylBDjjlFLG+aDfo2EmmkCWxh5j55xgeZZEbDKKIs4isapK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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Show image\n", - "Image.open('img.jpg')" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "# Preprocess image with TensorFlow\n", - "tf.enable_eager_execution()\n", - "\n", - "# Constants\n", - "MEAN_RGB = [0.485 * 255, 0.456 * 255, 0.406 * 255]\n", - "STDDEV_RGB = [0.229 * 255, 0.224 * 255, 0.225 * 255]\n", - "CROP_PADDING = 32\n", - "image_size = 224\n", - "\n", - "# Helper function\n", - "def _decode_and_center_crop(image_bytes, image_size):\n", - " shape = tf.image.extract_jpeg_shape(image_bytes)\n", - " image_height = shape[0]\n", - " image_width = shape[1]\n", - " padded_center_crop_size = tf.cast(\n", - " ((image_size / (image_size + CROP_PADDING)) *\n", - " tf.cast(tf.minimum(image_height, image_width), tf.float32)),\n", - " tf.int32)\n", - " offset_height = ((image_height - padded_center_crop_size) + 1) // 2\n", - " offset_width = ((image_width - padded_center_crop_size) + 1) // 2\n", - " crop_window = tf.stack([offset_height, offset_width, padded_center_crop_size, padded_center_crop_size])\n", - " image = tf.image.decode_and_crop_jpeg(image_bytes, crop_window, channels=3)\n", - " image = tf.image.resize_bicubic([image], [image_size, image_size])[0]\n", - " return image\n", - "\n", - "# Process\n", - "tf_img_bytes = tf.read_file('img.jpg')\n", - "tf_img = _decode_and_center_crop(tf_img_bytes, image_size)\n", - "tf_img = tf.image.resize_bicubic([tf_img], [image_size, image_size])[0] # ok it matches up to here\n", - "use_bfloat16 = 224 # bug in the original repo! \n", - "tf_img = tf.image.convert_image_dtype(tf_img, dtype=tf.bfloat16 if use_bfloat16 else tf.float32)\n", - "tf_img = tf.cast(tf_img, tf.float32)\n", - "tf_img = (tf_img - MEAN_RGB) / (STDDEV_RGB) # this is exactly the input to the model\n", - "img = torch.from_numpy(tf_img.numpy()).unsqueeze(0).permute((0,3,1,2))" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "# Load class names\n", - "labels_map = json.load(open('labels_map.txt'))\n", - "labels_map = [labels_map[str(i)] for i in range(1000)]" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loaded pretrained weights for efficientnet-b0\n", - "-----\n", - "giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (82.79%)\n", - "ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus (1.52%)\n", - "lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (0.37%)\n", - "American black bear, black bear, Ursus americanus, Euarctos americanus (0.23%)\n", - "brown bear, bruin, Ursus arctos (0.17%)\n" - ] - } - ], - "source": [ - "# Classify with EfficientNet\n", - "model = EfficientNet.from_pretrained(model_name)\n", - "model.eval()\n", - "with torch.no_grad():\n", - " logits = model(img)\n", - "preds = torch.topk(logits, k=5).indices.squeeze(0).tolist()\n", - "\n", - "print('-----')\n", - "for idx in preds:\n", - " label = labels_map[idx]\n", - " prob = torch.softmax(logits, dim=1)[0, idx].item()\n", - " print('{:<75} ({:.2f}%)'.format(label, prob*100))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is the result obtained by the TensorFlow implementation. " - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.8" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/simple/example.ipynb b/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/simple/example.ipynb deleted file mode 100644 index 6af47a4b6ab43c85f50333ce9c641114b4d3bf48..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/simple/example.ipynb +++ /dev/null @@ -1,144 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Example\n", - "\n", - "In this simple example, we load an image, pre-process it, and classify it with a pretrained EfficientNet." - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [], - "source": [ - "import json\n", - "from PIL import Image\n", - "\n", - "import torch\n", - "from torchvision import transforms\n", - "\n", - "from efficientnet_pytorch import EfficientNet" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "model_name = 'efficientnet-b0'\n", - "image_size = EfficientNet.get_image_size(model_name) # 224" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAArgAAAJlCAIAAAC+AhaJAAEAAElEQVR4nHT9WY8sW5odiO15b5t9jjnOOffcIe+QebMqs7JYlVVsNptsSNCLIKEF6J/oTwgQoEe9S4AgoNESSUENkt3VLGZlsoac7nzumWMOn2y2PethR/iNvEXaQ8DD3dzcbJv7Xutb3/q+Df/P/6f/Y1EUm6asu5ZFwgD06PG7/+K/+d8cn74DPAUIDlcX//DLv1ovz/IEY+icQHGUZkVuPeyGASCkrVsul33fE0IAcNPJeDTKL87evH39SgihPdlsNqPxeDabHR0dLxaLq+vby8vrpmnenF84C6qqghDFaSKlXMz368327Oxstth3AK5XmzdnV0LEt7e3QsR5kjJCOaGcEaM0Ai7P85//+Z+cXZz/q3/1r/b29tqh18rMFvOLq8tyW3/4ycfFePTs2bPxdP7+++9vt1vC6NnV18bYtu44i7S21oA8LZqm2dvbqzbbpq0Q9nmaZFmSpJEQnFiMCL68vFxvN0cnJ6ePH5Vl+fLN6ydPnv7o40/evn17cXb++9/8djGfHx4eVtty4rhzLs/zOI7jNGKMNX0HADg42v+bv/mb6WL+L//lv8xHmffeObdarX75+3+4uLiICB/l4x99+PHl+dV//9//DwcHB4RRC0Fvhj/6059MDhbZtPAEAgTXy9uubRlj3377bd+0R0dH2/Wm3pZaa2etYJxzTiAihBhjyrLce//Jp59++u/+3b+LomQ+nX3++Rec8/Xt+mD/iHMOHKzrZhgGAJD3Xmtdl6brOkyJc2a13QAATk5ODg4OxqPpxx9+SDHbm8y6pv/rv/oPb1+/qaqKzMef/vBHl5eXRZZ89rvfz8aTvb29YpRfXV31fS+1TvNkb29vtrd4+frVL37xi+OjJ2kae+/Wm2VVraNYzOfToihubm6urm7KbSN4GseZdxBCwqhQ8poQMpqOEIJlvY0iHqWiqipljIfIGm8cpFzEUc4YBwCgZAAAOOes8cYYpYxW1lq3vLkVIqaUG+2UUt4DSimltFuvkiSJ4xhCb4xxzmEEEELG6JgLiPwwDN6aoigWi0We59ATQoj1DgDw9uzs/OpSRKzve4QQxrirG4rJ3nxhtSw3W875wUG62WyA81maCEqSWBRpRjE5OTl57733Xr9+e35xVRSjQZmLi6vzy4s4TrMkff36NbLeWfv45NF//V/9s8vLy9/97rNtWW7r6vD4qOr6LM9ne4s/+skff/v8y81mU9e1994YI2WPEIqi6Ob2CmMshEAIMMYWi0Wapm3bwsYqpYz13gOlTNP2UkpvwXw+F5yqtgfOeGv+1//yX/7yb/4jhBBCHMfxer1u23pvb288HkdRNJ2OvfcvXn57cXFBKbXWnpwcG2MQQhHGP/z0x998803b9cenjy9uVtc3twCAvYPDsixHebZYLA72987evJJSDsPQdY0Qwnv/5uwCQjiaTLXWIooJZ6v1tus6kaQHBwe//d3vwt2cF6ht2+Pj4yiKOGVZlimlpuPJaDRqmqZcb25vb733x8fHo9GobZqX1zd1XTvnFosFgoQxNhqNrq9vvPe//e1vx+NpFEUffPDBe++99//5f//rf/Nv/s0HP/qAMtE0jYNIG1d3PYCoLEspJULovXef/ulPfzIqsrPXry4vL4G3xfS4aRqttfceQpimOaW0ruu6bouiuLy8xIimaeqcG41GWuu+H7TWWmvvHaU0S+M0jaMoMmrQWjnnvDNd122362EYIIRphIo8PzjY04OczWbWKELIarnBGFMublfbuuny8QQi1g9SCKFVixB6/OjR+fl5GgnBueoHa21VbYui+PrbZ9bbKE2qquJCAACkNAAArXWe59PJfLvddl23WCwIYQAAIQSEuGkaay1CSCkFCEYIaa3btlNKEUKEEJRwjDGEGCFkjOm6bhgUpTRJEsKdcw4AQClljHmIwuW3/UAphRDGUZpkqVKqbVuMsdceYwwhlFJWVdW2LQCAc44QCscBAFhrrbWUUiFEnKfX19ec8zzP67bV2hBCejlAgKuqqtrGGAMhBgBACBHGnDHnnLUWAIAQghCGYxJCwl/GGADAe08I4ZwTdvdeIcSomKRpGi4QQrxara6vr5umBQBgjO+nHei9996HwzrnjDHWWu89xjhchdbaWgshRAh568JEFI4QnsQYSymNMRBCQgiEMAwaAEApRSkFAFgtvfeUIO+9kZJRzCnjnApGIITAeeet995jrLV2zkEIwxQRjrk7w92HQgghhAWGSqko4pwzaSShKMsySjHBmJd1M0gZx7HD8PbyhvGk6xqAoGlrp3Tdbi00ZbMtt52I0HRSSKuQV8b5bpBERABiCGwkKEKoqtrXr7dXF7gsN5vNhnM+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bb1czm/eutu0VV1X33zz1fHxMaAjtBNCOFnXlU5iVxR9KSVnab83GfS3er3hRx/9II7j99794PDweHt7N45jzsTZ8mi1uryzde/OW/c+++SL2dQWeYEIzrp+nyMUXacRnHet9Z33aJQGfz2V+h11NMsS9BvLwc1NK3iaZw8ePbp37/7nX3395NmzB48e33/n0ddffztdLkSWaOsIInDqCVBGMKZaa2Yz03WeEkv4bC1n6wtnVVn5JBu1XX7z1h4X2/PFdLVadK2klFqYWUwN5OBRGaOcocip4M26Iox6cFHE93f3Tk7Ophez0Wik2q5put3d3Z2tHQB67+5Dj+TsYvbr3/yubSWltO2U936YZePJdtu26DEax3GWauu79dooxSOBiGVZCSFaqY1xJydH55cXeZ7HcXz//v1WdjwSq3L9V3/1V0+ePLm4uJjP55PJ5OL0rCiKO7duc87X63XExa3d/STB5Xw2nU4fPnh078HD5y9eNdJ6333z/LfK2OFg3HWqVTKKIhs7rbUGrNtuPOipdmVk+9UXn/70h9/7+c9+nCb83t37QPhsOV/Xqq7rddPOpguPHWMsyrLReDAc9hFxVa5U11mp2nKN3r589tQax0QE6IQQSEFr7bwLekrO2SuqTShsNGUeiWAUnXPeWw2mNy52tveklHXdtp0ybSNolCRR16mqbYx34/GSEk6RRDwyHhizSmkjldbW+oAQE8owioRzJo6F6WpnLBIf6PNtK2ezGSAHZFGciijiLCrrinPaNpJzkmXJ1vaIUtCm1eUqjuPxaPDO2w8fPHiwXiysUkYqdnp66r1HRpu2Nei1d+uuqZoaCFHOamdRK2V04HAKIeI4bTsVwt5sufziqy+jJP7h93/w7Mnzw4Pjum7TONPKLKqOJQWlvLOG8JhznkYpRWa1o4SF/gIiFr18uVxShlXbeOLjNKnqstfrEYpSylhE/X7fOTedThljxvmIMmWs1MYY00nL4my1WqVFbq09OzvzYOI009Z89fW3dV1W9TpJU8IEpVFdlqVoA01GSimlJoQkSeI7r7V23hAKSLzfhA0LKIxRSvkootZopZRHQq8Oa51WSnmvtA10QgAQSRxF0drYwEptmq5tW9XpJEkYYzFHwhhBorTS2hpjnQPnALylBDjjlFLG+aDfo2EmmkCWxh5j55xgeZZEbDKKIs4isapK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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Open image\n", - "img = Image.open('img.jpg')\n", - "img" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "# Preprocess image\n", - "tfms = transforms.Compose([transforms.Resize(image_size), transforms.CenterCrop(image_size), \n", - " transforms.ToTensor(),\n", - " transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),])\n", - "img = tfms(img).unsqueeze(0)" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [], - "source": [ - "# Load class names\n", - "labels_map = json.load(open('labels_map.txt'))\n", - "labels_map = [labels_map[str(i)] for i in range(1000)]" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loaded pretrained weights for efficientnet-b0\n", - "-----\n", - "giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (90.04%)\n", - "ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus (0.62%)\n", - "lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (0.19%)\n", - "soccer ball (0.14%)\n", - "badger (0.10%)\n" - ] - } - ], - "source": [ - "# Classify with EfficientNet\n", - "model = EfficientNet.from_pretrained(model_name)\n", - "model.eval()\n", - "with torch.no_grad():\n", - " logits = model(img)\n", - "preds = torch.topk(logits, k=5).indices.squeeze(0).tolist()\n", - "\n", - "print('-----')\n", - "for idx in preds:\n", - " label = labels_map[idx]\n", - " prob = torch.softmax(logits, dim=1)[0, idx].item()\n", - " print('{:<75} ({:.2f}%)'.format(label, prob*100))" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.8" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/simple/img.jpg b/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/simple/img.jpg deleted file mode 100644 index 413902a8f0ffbc2cf37cabde8b86a7638d7efa7b..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/simple/img.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2389d1990f74682ab3fb7df3e31ef15d7da7cd0368f85c594f74c76a3eebc0ad -size 116068 diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/simple/img2.jpg b/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/simple/img2.jpg deleted file mode 100644 index 2917e2a8c97adaa297c57db228db261cba690fbc..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/simple/img2.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7407adfee586ed9d3812103209b0d7f3fc2db47f2ad4f6e455181da02ff48553 -size 17374 diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/simple/labels_map.txt b/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/simple/labels_map.txt deleted file mode 100644 index 0c068388231deb885b38ebd2aacbf000e5a97ee5..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/examples/simple/labels_map.txt +++ /dev/null @@ -1 +0,0 @@ -{"0": "tench, Tinca tinca", "1": "goldfish, Carassius auratus", "2": "great white shark, white shark, man-eater, man-eating shark, Carcharodon carcharias", "3": "tiger shark, Galeocerdo cuvieri", "4": "hammerhead, hammerhead shark", "5": "electric ray, crampfish, numbfish, torpedo", "6": "stingray", "7": "cock", "8": "hen", "9": "ostrich, Struthio camelus", "10": "brambling, Fringilla montifringilla", "11": "goldfinch, Carduelis carduelis", "12": "house finch, linnet, Carpodacus mexicanus", "13": "junco, snowbird", "14": "indigo bunting, indigo finch, indigo bird, Passerina cyanea", "15": "robin, American robin, Turdus migratorius", "16": "bulbul", "17": "jay", "18": "magpie", "19": "chickadee", "20": "water ouzel, dipper", "21": "kite", "22": "bald eagle, American eagle, Haliaeetus leucocephalus", "23": "vulture", "24": "great grey owl, great gray owl, Strix nebulosa", "25": "European fire salamander, Salamandra salamandra", "26": "common newt, Triturus vulgaris", "27": "eft", "28": "spotted salamander, Ambystoma maculatum", "29": "axolotl, mud puppy, Ambystoma mexicanum", "30": "bullfrog, Rana catesbeiana", "31": "tree frog, tree-frog", "32": "tailed frog, bell toad, ribbed toad, tailed toad, Ascaphus trui", "33": "loggerhead, loggerhead turtle, Caretta caretta", "34": "leatherback turtle, leatherback, leathery turtle, Dermochelys coriacea", "35": "mud turtle", "36": "terrapin", "37": "box turtle, box tortoise", "38": "banded gecko", "39": "common iguana, iguana, Iguana iguana", "40": "American chameleon, anole, Anolis carolinensis", "41": "whiptail, whiptail lizard", "42": "agama", "43": "frilled lizard, Chlamydosaurus kingi", "44": "alligator lizard", "45": "Gila monster, Heloderma suspectum", "46": "green lizard, Lacerta viridis", "47": "African chameleon, Chamaeleo chamaeleon", "48": "Komodo dragon, Komodo lizard, dragon lizard, giant lizard, Varanus komodoensis", "49": "African crocodile, Nile crocodile, Crocodylus niloticus", "50": "American alligator, Alligator mississipiensis", "51": "triceratops", "52": "thunder snake, worm snake, Carphophis amoenus", "53": "ringneck snake, ring-necked snake, ring snake", "54": "hognose snake, puff adder, sand viper", "55": "green snake, grass snake", "56": "king snake, kingsnake", "57": "garter snake, grass snake", "58": "water snake", "59": "vine snake", "60": "night snake, Hypsiglena torquata", "61": "boa constrictor, Constrictor constrictor", "62": "rock python, rock snake, Python sebae", "63": "Indian cobra, Naja naja", "64": "green mamba", "65": "sea snake", "66": "horned viper, cerastes, sand viper, horned asp, Cerastes cornutus", "67": "diamondback, diamondback rattlesnake, Crotalus adamanteus", "68": "sidewinder, horned rattlesnake, Crotalus cerastes", "69": "trilobite", "70": "harvestman, daddy longlegs, Phalangium opilio", "71": "scorpion", "72": "black and gold garden spider, Argiope aurantia", "73": "barn spider, Araneus cavaticus", "74": "garden spider, Aranea diademata", "75": "black widow, Latrodectus mactans", "76": "tarantula", "77": "wolf spider, hunting spider", "78": "tick", "79": "centipede", "80": "black grouse", "81": "ptarmigan", "82": "ruffed grouse, partridge, Bonasa umbellus", "83": "prairie chicken, prairie grouse, prairie fowl", "84": "peacock", "85": "quail", "86": "partridge", "87": "African grey, African gray, Psittacus erithacus", "88": "macaw", "89": "sulphur-crested cockatoo, Kakatoe galerita, Cacatua galerita", "90": "lorikeet", "91": "coucal", "92": "bee eater", "93": "hornbill", "94": "hummingbird", "95": "jacamar", "96": "toucan", "97": "drake", "98": "red-breasted merganser, Mergus serrator", "99": "goose", "100": "black swan, Cygnus atratus", "101": "tusker", "102": "echidna, spiny anteater, anteater", "103": "platypus, duckbill, duckbilled platypus, duck-billed platypus, Ornithorhynchus anatinus", "104": "wallaby, brush kangaroo", "105": "koala, koala bear, kangaroo bear, native bear, Phascolarctos cinereus", "106": "wombat", "107": "jellyfish", "108": "sea anemone, anemone", "109": "brain coral", "110": "flatworm, platyhelminth", "111": "nematode, nematode worm, roundworm", "112": "conch", "113": "snail", "114": "slug", "115": "sea slug, nudibranch", "116": "chiton, coat-of-mail shell, sea cradle, polyplacophore", "117": "chambered nautilus, pearly nautilus, nautilus", "118": "Dungeness crab, Cancer magister", "119": "rock crab, Cancer irroratus", "120": "fiddler crab", "121": "king crab, Alaska crab, Alaskan king crab, Alaska king crab, Paralithodes camtschatica", "122": "American lobster, Northern lobster, Maine lobster, Homarus americanus", "123": "spiny lobster, langouste, rock lobster, crawfish, crayfish, sea crawfish", "124": "crayfish, crawfish, crawdad, crawdaddy", "125": "hermit crab", "126": "isopod", "127": "white stork, Ciconia ciconia", "128": "black stork, Ciconia nigra", "129": "spoonbill", "130": "flamingo", "131": "little blue heron, Egretta caerulea", "132": "American egret, great white heron, Egretta albus", "133": "bittern", "134": "crane", "135": "limpkin, Aramus pictus", "136": "European gallinule, Porphyrio porphyrio", "137": "American coot, marsh hen, mud hen, water hen, Fulica americana", "138": "bustard", "139": "ruddy turnstone, Arenaria interpres", "140": "red-backed sandpiper, dunlin, Erolia alpina", "141": "redshank, Tringa totanus", "142": "dowitcher", "143": "oystercatcher, oyster catcher", "144": "pelican", "145": "king penguin, Aptenodytes patagonica", "146": "albatross, mollymawk", "147": "grey whale, gray whale, devilfish, Eschrichtius gibbosus, Eschrichtius robustus", "148": "killer whale, killer, orca, grampus, sea wolf, Orcinus orca", "149": "dugong, Dugong dugon", "150": "sea lion", "151": "Chihuahua", "152": "Japanese spaniel", "153": "Maltese dog, Maltese terrier, Maltese", "154": "Pekinese, Pekingese, Peke", "155": "Shih-Tzu", "156": "Blenheim spaniel", "157": "papillon", "158": "toy terrier", "159": "Rhodesian ridgeback", "160": "Afghan hound, Afghan", "161": "basset, basset hound", "162": "beagle", "163": "bloodhound, sleuthhound", "164": "bluetick", "165": "black-and-tan coonhound", "166": "Walker hound, Walker foxhound", "167": "English foxhound", "168": "redbone", "169": "borzoi, Russian wolfhound", "170": "Irish wolfhound", "171": "Italian greyhound", "172": "whippet", "173": "Ibizan hound, Ibizan Podenco", "174": "Norwegian elkhound, elkhound", "175": "otterhound, otter hound", "176": "Saluki, gazelle hound", "177": "Scottish deerhound, deerhound", "178": "Weimaraner", "179": "Staffordshire bullterrier, Staffordshire bull terrier", "180": "American Staffordshire terrier, Staffordshire terrier, American pit bull terrier, pit bull terrier", "181": "Bedlington terrier", "182": "Border terrier", "183": "Kerry blue terrier", "184": "Irish terrier", "185": "Norfolk terrier", "186": "Norwich terrier", "187": "Yorkshire terrier", "188": "wire-haired fox terrier", "189": "Lakeland terrier", "190": "Sealyham terrier, Sealyham", "191": "Airedale, Airedale terrier", "192": "cairn, cairn terrier", "193": "Australian terrier", "194": "Dandie Dinmont, Dandie Dinmont terrier", "195": "Boston bull, Boston terrier", "196": "miniature schnauzer", "197": "giant schnauzer", "198": "standard schnauzer", "199": "Scotch terrier, Scottish terrier, Scottie", "200": "Tibetan terrier, chrysanthemum dog", "201": "silky terrier, Sydney silky", "202": "soft-coated wheaten terrier", "203": "West Highland white terrier", "204": "Lhasa, Lhasa apso", "205": "flat-coated retriever", "206": "curly-coated retriever", "207": "golden retriever", "208": "Labrador retriever", "209": "Chesapeake Bay retriever", "210": "German short-haired pointer", "211": "vizsla, Hungarian pointer", "212": "English setter", "213": "Irish setter, red setter", "214": "Gordon setter", "215": "Brittany spaniel", "216": "clumber, clumber spaniel", "217": "English springer, English springer spaniel", "218": "Welsh springer spaniel", "219": "cocker spaniel, English cocker spaniel, cocker", "220": "Sussex spaniel", "221": "Irish water spaniel", "222": "kuvasz", "223": "schipperke", "224": "groenendael", "225": "malinois", "226": "briard", "227": "kelpie", "228": "komondor", "229": "Old English sheepdog, bobtail", "230": "Shetland sheepdog, Shetland sheep dog, Shetland", "231": "collie", "232": "Border collie", "233": "Bouvier des Flandres, Bouviers des Flandres", "234": "Rottweiler", "235": "German shepherd, German shepherd dog, German police dog, alsatian", "236": "Doberman, Doberman pinscher", "237": "miniature pinscher", "238": "Greater Swiss Mountain dog", "239": "Bernese mountain dog", "240": "Appenzeller", "241": "EntleBucher", "242": "boxer", "243": "bull mastiff", "244": "Tibetan mastiff", "245": "French bulldog", "246": "Great Dane", "247": "Saint Bernard, St Bernard", "248": "Eskimo dog, husky", "249": "malamute, malemute, Alaskan malamute", "250": "Siberian husky", "251": "dalmatian, coach dog, carriage dog", "252": "affenpinscher, monkey pinscher, monkey dog", "253": "basenji", "254": "pug, pug-dog", "255": "Leonberg", "256": "Newfoundland, Newfoundland dog", "257": "Great Pyrenees", "258": "Samoyed, Samoyede", "259": "Pomeranian", "260": "chow, chow chow", "261": "keeshond", "262": "Brabancon griffon", "263": "Pembroke, Pembroke Welsh corgi", "264": "Cardigan, Cardigan Welsh corgi", "265": "toy poodle", "266": "miniature poodle", "267": "standard poodle", "268": "Mexican hairless", "269": "timber wolf, grey wolf, gray wolf, Canis lupus", "270": "white wolf, Arctic wolf, Canis lupus tundrarum", "271": "red wolf, maned wolf, Canis rufus, Canis niger", "272": "coyote, prairie wolf, brush wolf, Canis latrans", "273": "dingo, warrigal, warragal, Canis dingo", "274": "dhole, Cuon alpinus", "275": "African hunting dog, hyena dog, Cape hunting dog, Lycaon pictus", "276": "hyena, hyaena", "277": "red fox, Vulpes vulpes", "278": "kit fox, Vulpes macrotis", "279": "Arctic fox, white fox, Alopex lagopus", "280": "grey fox, gray fox, Urocyon cinereoargenteus", "281": "tabby, tabby cat", "282": "tiger cat", "283": "Persian cat", "284": "Siamese cat, Siamese", "285": "Egyptian cat", "286": "cougar, puma, catamount, mountain lion, painter, panther, Felis concolor", "287": "lynx, catamount", "288": "leopard, Panthera pardus", "289": "snow leopard, ounce, Panthera uncia", "290": "jaguar, panther, Panthera onca, Felis onca", "291": "lion, king of beasts, Panthera leo", "292": "tiger, Panthera tigris", "293": "cheetah, chetah, Acinonyx jubatus", "294": "brown bear, bruin, Ursus arctos", "295": "American black bear, black bear, Ursus americanus, Euarctos americanus", "296": "ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus", "297": "sloth bear, Melursus ursinus, Ursus ursinus", "298": "mongoose", "299": "meerkat, mierkat", "300": "tiger beetle", "301": "ladybug, ladybeetle, lady beetle, ladybird, ladybird beetle", "302": "ground beetle, carabid beetle", "303": "long-horned beetle, longicorn, longicorn beetle", "304": "leaf beetle, chrysomelid", "305": "dung beetle", "306": "rhinoceros beetle", "307": "weevil", "308": "fly", "309": "bee", "310": "ant, emmet, pismire", "311": "grasshopper, hopper", "312": "cricket", "313": "walking stick, walkingstick, stick insect", "314": "cockroach, roach", "315": "mantis, mantid", "316": "cicada, cicala", "317": "leafhopper", "318": "lacewing, lacewing fly", "319": "dragonfly, darning needle, devil's darning needle, sewing needle, snake feeder, snake doctor, mosquito hawk, skeeter hawk", "320": "damselfly", "321": "admiral", "322": "ringlet, ringlet butterfly", "323": "monarch, monarch butterfly, milkweed butterfly, Danaus plexippus", "324": "cabbage butterfly", "325": "sulphur butterfly, sulfur butterfly", "326": "lycaenid, lycaenid butterfly", "327": "starfish, sea star", "328": "sea urchin", "329": "sea cucumber, holothurian", "330": "wood rabbit, cottontail, cottontail rabbit", "331": "hare", "332": "Angora, Angora rabbit", "333": "hamster", "334": "porcupine, hedgehog", "335": "fox squirrel, eastern fox squirrel, Sciurus niger", "336": "marmot", "337": "beaver", "338": "guinea pig, Cavia cobaya", "339": "sorrel", "340": "zebra", "341": "hog, pig, grunter, squealer, Sus scrofa", "342": "wild boar, boar, Sus scrofa", "343": "warthog", "344": "hippopotamus, hippo, river horse, Hippopotamus amphibius", "345": "ox", "346": "water buffalo, water ox, Asiatic buffalo, Bubalus bubalis", "347": "bison", "348": "ram, tup", "349": "bighorn, bighorn sheep, cimarron, Rocky Mountain bighorn, Rocky Mountain sheep, Ovis canadensis", "350": "ibex, Capra ibex", "351": "hartebeest", "352": "impala, Aepyceros melampus", "353": "gazelle", "354": "Arabian camel, dromedary, Camelus dromedarius", "355": "llama", "356": "weasel", "357": "mink", "358": "polecat, fitch, foulmart, foumart, Mustela putorius", "359": "black-footed ferret, ferret, Mustela nigripes", "360": "otter", "361": "skunk, polecat, wood pussy", "362": "badger", "363": "armadillo", "364": "three-toed sloth, ai, Bradypus tridactylus", "365": "orangutan, orang, orangutang, Pongo pygmaeus", "366": "gorilla, Gorilla gorilla", "367": "chimpanzee, chimp, Pan troglodytes", "368": "gibbon, Hylobates lar", "369": "siamang, Hylobates syndactylus, Symphalangus syndactylus", "370": "guenon, guenon monkey", "371": "patas, hussar monkey, Erythrocebus patas", "372": "baboon", "373": "macaque", "374": "langur", "375": "colobus, colobus monkey", "376": "proboscis monkey, Nasalis larvatus", "377": "marmoset", "378": "capuchin, ringtail, Cebus capucinus", "379": "howler monkey, howler", "380": "titi, titi monkey", "381": "spider monkey, Ateles geoffroyi", "382": "squirrel monkey, Saimiri sciureus", "383": "Madagascar cat, ring-tailed lemur, Lemur catta", "384": "indri, indris, Indri indri, Indri brevicaudatus", "385": "Indian elephant, Elephas maximus", "386": "African elephant, Loxodonta africana", "387": "lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens", "388": "giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca", "389": "barracouta, snoek", "390": "eel", "391": "coho, cohoe, coho salmon, blue jack, silver salmon, Oncorhynchus kisutch", "392": "rock beauty, Holocanthus tricolor", "393": "anemone fish", "394": "sturgeon", "395": "gar, garfish, garpike, billfish, Lepisosteus osseus", "396": "lionfish", "397": "puffer, pufferfish, blowfish, globefish", "398": "abacus", "399": "abaya", "400": "academic gown, academic robe, judge's robe", "401": "accordion, piano accordion, squeeze box", "402": "acoustic guitar", "403": "aircraft carrier, carrier, flattop, attack aircraft carrier", "404": "airliner", "405": "airship, dirigible", "406": "altar", "407": "ambulance", "408": "amphibian, amphibious vehicle", "409": "analog clock", "410": "apiary, bee house", "411": "apron", "412": "ashcan, trash can, garbage can, wastebin, ash bin, ash-bin, ashbin, dustbin, trash barrel, trash bin", "413": "assault rifle, assault gun", "414": "backpack, back pack, knapsack, packsack, rucksack, haversack", "415": "bakery, bakeshop, bakehouse", "416": "balance beam, beam", "417": "balloon", "418": "ballpoint, ballpoint pen, ballpen, Biro", "419": "Band Aid", "420": "banjo", "421": "bannister, banister, balustrade, balusters, handrail", "422": "barbell", "423": "barber chair", "424": "barbershop", "425": "barn", "426": "barometer", "427": "barrel, cask", "428": "barrow, garden cart, lawn cart, wheelbarrow", "429": "baseball", "430": "basketball", "431": "bassinet", "432": "bassoon", "433": "bathing cap, swimming cap", "434": "bath towel", "435": "bathtub, bathing tub, bath, tub", "436": "beach wagon, station wagon, wagon, estate car, beach waggon, station waggon, waggon", "437": "beacon, lighthouse, beacon light, pharos", "438": "beaker", "439": "bearskin, busby, shako", "440": "beer bottle", "441": "beer glass", "442": "bell cote, bell cot", "443": "bib", "444": "bicycle-built-for-two, tandem bicycle, tandem", "445": "bikini, two-piece", "446": "binder, ring-binder", "447": "binoculars, field glasses, opera glasses", "448": "birdhouse", "449": "boathouse", "450": "bobsled, bobsleigh, bob", "451": "bolo tie, bolo, bola tie, bola", "452": "bonnet, poke bonnet", "453": "bookcase", "454": "bookshop, bookstore, bookstall", "455": "bottlecap", "456": "bow", "457": "bow tie, bow-tie, bowtie", "458": "brass, memorial tablet, plaque", "459": "brassiere, bra, bandeau", "460": "breakwater, groin, groyne, mole, bulwark, seawall, jetty", "461": "breastplate, aegis, egis", "462": "broom", "463": "bucket, pail", "464": "buckle", "465": "bulletproof vest", "466": "bullet train, bullet", "467": "butcher shop, meat market", "468": "cab, hack, taxi, taxicab", "469": "caldron, cauldron", "470": "candle, taper, wax light", "471": "cannon", "472": "canoe", "473": "can opener, tin opener", "474": "cardigan", "475": "car mirror", "476": "carousel, carrousel, merry-go-round, roundabout, whirligig", "477": "carpenter's kit, tool kit", "478": "carton", "479": "car wheel", "480": "cash machine, cash dispenser, automated teller machine, automatic teller machine, automated teller, automatic teller, ATM", "481": "cassette", "482": "cassette player", "483": "castle", "484": "catamaran", "485": "CD player", "486": "cello, violoncello", "487": "cellular telephone, cellular phone, cellphone, cell, mobile phone", "488": "chain", "489": "chainlink fence", "490": "chain mail, ring mail, mail, chain armor, chain armour, ring armor, ring armour", "491": "chain saw, chainsaw", "492": "chest", "493": "chiffonier, commode", "494": "chime, bell, gong", "495": "china cabinet, china closet", "496": "Christmas stocking", "497": "church, church building", "498": "cinema, movie theater, movie theatre, movie house, picture palace", "499": "cleaver, meat cleaver, chopper", "500": "cliff dwelling", "501": "cloak", "502": "clog, geta, patten, sabot", "503": "cocktail shaker", "504": "coffee mug", "505": "coffeepot", "506": "coil, spiral, volute, whorl, helix", "507": "combination lock", "508": "computer keyboard, keypad", "509": "confectionery, confectionary, candy store", "510": "container ship, containership, container vessel", "511": "convertible", "512": "corkscrew, bottle screw", "513": "cornet, horn, trumpet, trump", "514": "cowboy boot", "515": "cowboy hat, ten-gallon hat", "516": "cradle", "517": "crane", "518": "crash helmet", "519": "crate", "520": "crib, cot", "521": "Crock Pot", "522": "croquet ball", "523": "crutch", "524": "cuirass", "525": "dam, dike, dyke", "526": "desk", "527": "desktop computer", "528": "dial telephone, dial phone", "529": "diaper, nappy, napkin", "530": "digital clock", "531": "digital watch", "532": "dining table, board", "533": "dishrag, dishcloth", "534": "dishwasher, dish washer, dishwashing machine", "535": "disk brake, disc brake", "536": "dock, dockage, docking facility", "537": "dogsled, dog sled, dog sleigh", "538": "dome", "539": "doormat, welcome mat", "540": "drilling platform, offshore rig", "541": "drum, membranophone, tympan", "542": "drumstick", "543": "dumbbell", "544": "Dutch oven", "545": "electric fan, blower", "546": "electric guitar", "547": "electric locomotive", "548": "entertainment center", "549": "envelope", "550": "espresso maker", "551": "face powder", "552": "feather boa, boa", "553": "file, file cabinet, filing cabinet", "554": "fireboat", "555": "fire engine, fire truck", "556": "fire screen, fireguard", "557": "flagpole, flagstaff", "558": "flute, transverse flute", "559": "folding chair", "560": "football helmet", "561": "forklift", "562": "fountain", "563": "fountain pen", "564": "four-poster", "565": "freight car", "566": "French horn, horn", "567": "frying pan, frypan, skillet", "568": "fur coat", "569": "garbage truck, dustcart", "570": "gasmask, respirator, gas helmet", "571": "gas pump, gasoline pump, petrol pump, island dispenser", "572": "goblet", "573": "go-kart", "574": "golf ball", "575": "golfcart, golf cart", "576": "gondola", "577": "gong, tam-tam", "578": "gown", "579": "grand piano, grand", "580": "greenhouse, nursery, glasshouse", "581": "grille, radiator grille", "582": "grocery store, grocery, food market, market", "583": "guillotine", "584": "hair slide", "585": "hair spray", "586": "half track", "587": "hammer", "588": "hamper", "589": "hand blower, blow dryer, blow drier, hair dryer, hair drier", "590": "hand-held computer, hand-held microcomputer", "591": "handkerchief, hankie, hanky, hankey", "592": "hard disc, hard disk, fixed disk", "593": "harmonica, mouth organ, harp, mouth harp", "594": "harp", "595": "harvester, reaper", "596": "hatchet", "597": "holster", "598": "home theater, home theatre", "599": "honeycomb", "600": "hook, claw", "601": "hoopskirt, crinoline", "602": "horizontal bar, high bar", "603": "horse cart, horse-cart", "604": "hourglass", "605": "iPod", "606": "iron, smoothing iron", "607": "jack-o'-lantern", "608": "jean, blue jean, denim", "609": "jeep, landrover", "610": "jersey, T-shirt, tee shirt", "611": "jigsaw puzzle", "612": "jinrikisha, ricksha, rickshaw", "613": "joystick", "614": "kimono", "615": "knee pad", "616": "knot", "617": "lab coat, laboratory coat", "618": "ladle", "619": "lampshade, lamp shade", "620": "laptop, laptop computer", "621": "lawn mower, mower", "622": "lens cap, lens cover", "623": "letter opener, paper knife, paperknife", "624": "library", "625": "lifeboat", "626": "lighter, light, igniter, ignitor", "627": "limousine, limo", "628": "liner, ocean liner", "629": "lipstick, lip rouge", "630": "Loafer", "631": "lotion", "632": "loudspeaker, speaker, speaker unit, loudspeaker system, speaker system", "633": "loupe, jeweler's loupe", "634": "lumbermill, sawmill", "635": "magnetic compass", "636": "mailbag, postbag", "637": "mailbox, letter box", "638": "maillot", "639": "maillot, tank suit", "640": "manhole cover", "641": "maraca", "642": "marimba, xylophone", "643": "mask", "644": "matchstick", "645": "maypole", "646": "maze, labyrinth", "647": "measuring cup", "648": "medicine chest, medicine cabinet", "649": "megalith, megalithic structure", "650": "microphone, mike", "651": "microwave, microwave oven", "652": "military uniform", "653": "milk can", "654": "minibus", "655": "miniskirt, mini", "656": "minivan", "657": "missile", "658": "mitten", "659": "mixing bowl", "660": "mobile home, manufactured home", "661": "Model T", "662": "modem", "663": "monastery", "664": "monitor", "665": "moped", "666": "mortar", "667": "mortarboard", "668": "mosque", "669": "mosquito net", "670": "motor scooter, scooter", "671": "mountain bike, all-terrain bike, off-roader", "672": "mountain tent", "673": "mouse, computer mouse", "674": "mousetrap", "675": "moving van", "676": "muzzle", "677": "nail", "678": "neck brace", "679": "necklace", "680": "nipple", "681": "notebook, notebook computer", "682": "obelisk", "683": "oboe, hautboy, hautbois", "684": "ocarina, sweet potato", "685": "odometer, hodometer, mileometer, milometer", "686": "oil filter", "687": "organ, pipe organ", "688": "oscilloscope, scope, cathode-ray oscilloscope, CRO", "689": "overskirt", "690": "oxcart", "691": "oxygen mask", "692": "packet", "693": "paddle, boat paddle", "694": "paddlewheel, paddle wheel", "695": "padlock", "696": "paintbrush", "697": "pajama, pyjama, pj's, jammies", "698": "palace", "699": "panpipe, pandean pipe, syrinx", "700": "paper towel", "701": "parachute, chute", "702": "parallel bars, bars", "703": "park bench", "704": "parking meter", "705": "passenger car, coach, carriage", "706": "patio, terrace", "707": "pay-phone, pay-station", "708": "pedestal, plinth, footstall", "709": "pencil box, pencil case", "710": "pencil sharpener", "711": "perfume, essence", "712": "Petri dish", "713": "photocopier", "714": "pick, plectrum, plectron", "715": "pickelhaube", "716": "picket fence, paling", "717": "pickup, pickup truck", "718": "pier", "719": "piggy bank, penny bank", "720": "pill bottle", "721": "pillow", "722": "ping-pong ball", "723": "pinwheel", "724": "pirate, pirate ship", "725": "pitcher, ewer", "726": "plane, carpenter's plane, woodworking plane", "727": "planetarium", "728": "plastic bag", "729": "plate rack", "730": "plow, plough", "731": "plunger, plumber's helper", "732": "Polaroid camera, Polaroid Land camera", "733": "pole", "734": "police van, police wagon, paddy wagon, patrol wagon, wagon, black Maria", "735": "poncho", "736": "pool table, billiard table, snooker table", "737": "pop bottle, soda bottle", "738": "pot, flowerpot", "739": "potter's wheel", "740": "power drill", "741": "prayer rug, prayer mat", "742": "printer", "743": "prison, prison house", "744": "projectile, missile", "745": "projector", "746": "puck, hockey puck", "747": "punching bag, punch bag, punching ball, punchball", "748": "purse", "749": "quill, quill pen", "750": "quilt, comforter, comfort, puff", "751": "racer, race car, racing car", "752": "racket, racquet", "753": "radiator", "754": "radio, wireless", "755": "radio telescope, radio reflector", "756": "rain barrel", "757": "recreational vehicle, RV, R.V.", "758": "reel", "759": "reflex camera", "760": "refrigerator, icebox", "761": "remote control, remote", "762": "restaurant, eating house, eating place, eatery", "763": "revolver, six-gun, six-shooter", "764": "rifle", "765": "rocking chair, rocker", "766": "rotisserie", "767": "rubber eraser, rubber, pencil eraser", "768": "rugby ball", "769": "rule, ruler", "770": "running shoe", "771": "safe", "772": "safety pin", "773": "saltshaker, salt shaker", "774": "sandal", "775": "sarong", "776": "sax, saxophone", "777": "scabbard", "778": "scale, weighing machine", "779": "school bus", "780": "schooner", "781": "scoreboard", "782": "screen, CRT screen", "783": "screw", "784": "screwdriver", "785": "seat belt, seatbelt", "786": "sewing machine", "787": "shield, buckler", "788": "shoe shop, shoe-shop, shoe store", "789": "shoji", "790": "shopping basket", "791": "shopping cart", "792": "shovel", "793": "shower cap", "794": "shower curtain", "795": "ski", "796": "ski mask", "797": "sleeping bag", "798": "slide rule, slipstick", "799": "sliding door", "800": "slot, one-armed bandit", "801": "snorkel", "802": "snowmobile", "803": "snowplow, snowplough", "804": "soap dispenser", "805": "soccer ball", "806": "sock", "807": "solar dish, solar collector, solar furnace", "808": "sombrero", "809": "soup bowl", "810": "space bar", "811": "space heater", "812": "space shuttle", "813": "spatula", "814": "speedboat", "815": "spider web, spider's web", "816": "spindle", "817": "sports car, sport car", "818": "spotlight, spot", "819": "stage", "820": "steam locomotive", "821": "steel arch bridge", "822": "steel drum", "823": "stethoscope", "824": "stole", "825": "stone wall", "826": "stopwatch, stop watch", "827": "stove", "828": "strainer", "829": "streetcar, tram, tramcar, trolley, trolley car", "830": "stretcher", "831": "studio couch, day bed", "832": "stupa, tope", "833": "submarine, pigboat, sub, U-boat", "834": "suit, suit of clothes", "835": "sundial", "836": "sunglass", "837": "sunglasses, dark glasses, shades", "838": "sunscreen, sunblock, sun blocker", "839": "suspension bridge", "840": "swab, swob, mop", "841": "sweatshirt", "842": "swimming trunks, bathing trunks", "843": "swing", "844": "switch, electric switch, electrical switch", "845": "syringe", "846": "table lamp", "847": "tank, army tank, armored combat vehicle, armoured combat vehicle", "848": "tape player", "849": "teapot", "850": "teddy, teddy bear", "851": "television, television system", "852": "tennis ball", "853": "thatch, thatched roof", "854": "theater curtain, theatre curtain", "855": "thimble", "856": "thresher, thrasher, threshing machine", "857": "throne", "858": "tile roof", "859": "toaster", "860": "tobacco shop, tobacconist shop, tobacconist", "861": "toilet seat", "862": "torch", "863": "totem pole", "864": "tow truck, tow car, wrecker", "865": "toyshop", "866": "tractor", "867": "trailer truck, tractor trailer, trucking rig, rig, articulated lorry, semi", "868": "tray", "869": "trench coat", "870": "tricycle, trike, velocipede", "871": "trimaran", "872": "tripod", "873": "triumphal arch", "874": "trolleybus, trolley coach, trackless trolley", "875": "trombone", "876": "tub, vat", "877": "turnstile", "878": "typewriter keyboard", "879": "umbrella", "880": "unicycle, monocycle", "881": "upright, upright piano", "882": "vacuum, vacuum cleaner", "883": "vase", "884": "vault", "885": "velvet", "886": "vending machine", "887": "vestment", "888": "viaduct", "889": "violin, fiddle", "890": "volleyball", "891": "waffle iron", "892": "wall clock", "893": "wallet, billfold, notecase, pocketbook", "894": "wardrobe, closet, press", "895": "warplane, military plane", "896": "washbasin, handbasin, washbowl, lavabo, wash-hand basin", "897": "washer, automatic washer, washing machine", "898": "water bottle", "899": "water jug", "900": "water tower", "901": "whiskey jug", "902": "whistle", "903": "wig", "904": "window screen", "905": "window shade", "906": "Windsor tie", "907": "wine bottle", "908": "wing", "909": "wok", "910": "wooden spoon", "911": "wool, woolen, woollen", "912": "worm fence, snake fence, snake-rail fence, Virginia fence", "913": "wreck", "914": "yawl", "915": "yurt", "916": "web site, website, internet site, site", "917": "comic book", "918": "crossword puzzle, crossword", "919": "street sign", "920": "traffic light, traffic signal, stoplight", "921": "book jacket, dust cover, dust jacket, dust wrapper", "922": "menu", "923": "plate", "924": "guacamole", "925": "consomme", "926": "hot pot, hotpot", "927": "trifle", "928": "ice cream, icecream", "929": "ice lolly, lolly, lollipop, popsicle", "930": "French loaf", "931": "bagel, beigel", "932": "pretzel", "933": "cheeseburger", "934": "hotdog, hot dog, red hot", "935": "mashed potato", "936": "head cabbage", "937": "broccoli", "938": "cauliflower", "939": "zucchini, courgette", "940": "spaghetti squash", "941": "acorn squash", "942": "butternut squash", "943": "cucumber, cuke", "944": "artichoke, globe artichoke", "945": "bell pepper", "946": "cardoon", "947": "mushroom", "948": "Granny Smith", "949": "strawberry", "950": "orange", "951": "lemon", "952": "fig", "953": "pineapple, ananas", "954": "banana", "955": "jackfruit, jak, jack", "956": "custard apple", "957": "pomegranate", "958": "hay", "959": "carbonara", "960": "chocolate sauce, chocolate syrup", "961": "dough", "962": "meat loaf, meatloaf", "963": "pizza, pizza pie", "964": "potpie", "965": "burrito", "966": "red wine", "967": "espresso", "968": "cup", "969": "eggnog", "970": "alp", "971": "bubble", "972": "cliff, drop, drop-off", "973": "coral reef", "974": "geyser", "975": "lakeside, lakeshore", "976": "promontory, headland, head, foreland", "977": "sandbar, sand bar", "978": "seashore, coast, seacoast, sea-coast", "979": "valley, vale", "980": "volcano", "981": "ballplayer, baseball player", "982": "groom, bridegroom", "983": "scuba diver", "984": "rapeseed", "985": "daisy", "986": "yellow lady's slipper, yellow lady-slipper, Cypripedium calceolus, Cypripedium parviflorum", "987": "corn", "988": "acorn", "989": "hip, rose hip, rosehip", "990": "buckeye, horse chestnut, conker", "991": "coral fungus", "992": "agaric", "993": "gyromitra", "994": "stinkhorn, carrion fungus", "995": "earthstar", "996": "hen-of-the-woods, hen of the woods, Polyporus frondosus, Grifola frondosa", "997": "bolete", "998": "ear, spike, capitulum", "999": "toilet tissue, toilet paper, bathroom tissue"} \ No newline at end of file diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/hubconf.py b/video/mintime/model_code/cross-efficient-vit/efficient_net/hubconf.py deleted file mode 100644 index dd0ea978cabcc7676bff4fcd18e7a0555eda98ab..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/hubconf.py +++ /dev/null @@ -1,43 +0,0 @@ -from efficientnet_pytorch import EfficientNet as _EfficientNet - -dependencies = ['torch'] - - -def _create_model_fn(model_name): - def _model_fn(num_classes=1000, in_channels=3, pretrained='imagenet'): - """Create Efficient Net. - - Described in detail here: https://arxiv.org/abs/1905.11946 - - Args: - num_classes (int, optional): Number of classes, default is 1000. - in_channels (int, optional): Number of input channels, default - is 3. - pretrained (str, optional): One of [None, 'imagenet', 'advprop'] - If None, no pretrained model is loaded. - If 'imagenet', models trained on imagenet dataset are loaded. - If 'advprop', models trained using adversarial training called - advprop are loaded. It is important to note that the - preprocessing required for the advprop pretrained models is - slightly different from normal ImageNet preprocessing - """ - model_name_ = model_name.replace('_', '-') - if pretrained is not None: - model = _EfficientNet.from_pretrained( - model_name=model_name_, - advprop=(pretrained == 'advprop'), - num_classes=num_classes, - in_channels=in_channels) - else: - model = _EfficientNet.from_name( - model_name=model_name_, - override_params={'num_classes': num_classes}, - ) - model._change_in_channels(in_channels) - - return model - - return _model_fn - -for model_name in ['efficientnet_b' + str(i) for i in range(9)]: - locals()[model_name] = _create_model_fn(model_name) diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/logs b/video/mintime/model_code/cross-efficient-vit/efficient_net/logs deleted file mode 100644 index 01c8dba67c1647ce3e8b10bfad8521f2e112ee67..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/logs +++ /dev/null @@ -1,46 +0,0 @@ -Train images: 141230 Validation images: 8070 -__TRAINING STATS__ -Counter({1.0: 88531, 0.0: 52699}) -Weights 0.5952604172549728 -__VALIDATION STATS__ -Counter({0: 4198, 1: 3872}) - -#0/300 loss:0.5136975361087457 accuracy:0.5732563902853501 val_loss:0.5364688427299703 val_accuracy:0.6002478314745973 val_0s:4678/4198 val_1s:3392/3872 -#1/300 loss:0.4748700084961793 accuracy:0.6409332294838207 val_loss:0.5375074183976265 val_accuracy:0.6192069392812887 val_0s:4395/4198 val_1s:3675/3872 -#2/300 loss:0.4591452846219224 accuracy:0.6621114494087659 val_loss:0.5839169139465875 val_accuracy:0.614002478314746 val_0s:2867/4198 val_1s:5203/3872 -#3/300 loss:0.4471282922684823 accuracy:0.6749203427033916 val_loss:0.5183086053412465 val_accuracy:0.628004956629492 val_0s:4636/4198 val_1s:3434/3872 -#4/300 loss:0.4380730671197989 accuracy:0.6847766055370672 val_loss:0.5090801186943618 val_accuracy:0.5711276332094176 val_0s:7007/4198 val_1s:1063/3872 -#5/300 loss:0.4327000849617695 accuracy:0.6904552857041705 val_loss:0.5188724035608308 val_accuracy:0.6338289962825279 val_0s:4449/4198 val_1s:3621/3872 -#6/300 loss:0.42427017841971437 accuracy:0.6993769029243079 val_loss:0.527833827893175 val_accuracy:0.6415117719950434 val_0s:4149/4198 val_1s:3921/3872 -#7/300 loss:0.4212744265080735 accuracy:0.7030163562982369 val_loss:0.5026112759643917 val_accuracy:0.6396530359355638 val_0s:5058/4198 val_1s:3012/3872 -#8/300 loss:0.4154885301614286 accuracy:0.7076683424201657 val_loss:0.5432640949554897 val_accuracy:0.6465923172242874 val_0s:4044/4198 val_1s:4026/3872 -#9/300 loss:0.4123908241291415 accuracy:0.710812150392976 val_loss:0.5210385756676557 val_accuracy:0.6503097893432466 val_0s:4164/4198 val_1s:3906/3872 -#10/300 loss:0.40723704333050326 accuracy:0.7136939743680522 val_loss:0.5589614243323435 val_accuracy:0.6472118959107807 val_0s:3179/4198 val_1s:4891/3872 -#11/300 loss:0.402232795242142 accuracy:0.7185654605961906 val_loss:0.5192581602373888 val_accuracy:0.6350681536555143 val_0s:4991/4198 val_1s:3079/3872 -#12/300 loss:0.39900764655904725 accuracy:0.7225235431565531 val_loss:0.5632047477744805 val_accuracy:0.6503097893432466 val_0s:3448/4198 val_1s:4622/3872 -#14/300 loss:0.5343504934649247 accuracy:0.7136664258322681 val_loss:0.9343544303797466 val_accuracy:0.57053852 -#15/300 loss:0.525838890370766 accuracy:0.7187906408047574 val_loss:0.8023291139240499 val_accuracy:0.614572332 -#16/300 loss:0.5172125900240065 accuracy:0.7257766909353638 val_loss:0.6720759493670888 val_accuracy:0.64656812 -#17/300 loss:0.5092864763937068 accuracy:0.7304396154059912 val_loss:0.679392405063291 val_accuracy:0.6568109820485745 val_0s:37742 -#18/300 loss:0.5029607895438754 accuracy:0.7338798421608403 val_loss:1.3394683544303796 val_accuracy:0.50200632 -#19/300 loss:0.49735662843424994 accuracy:0.7380870338464959 val_loss:0.8208860759493672 val_accuracy:0.5971482 -#20/300 loss:0.4908455588156868 accuracy:0.7425498805090869 val_loss:0.668025316455696 val_accuracy:0.640232312 -#21/300 loss:0.48448919711923205 accuracy:0.745934530095037 val_loss:0.8548101265822788 val_accuracy:0.586272439281943 val_0s:71562 -#22/300 loss:0.4819138436916507 accuracy:0.7464736286333574 val_loss:0.8362784810126573 val_accuracy:0.6214361140443506 val_0s:1512 -#23/300 loss:0.4766591090957589 accuracy:0.7510865336519758 val_loss:0.8313924050632903 val_accuracy:0.6175290390707497 val_0s:5592 - -Train images: 324636 Validation images: 9470 -__TRAINING STATS__ -Counter({1.0: 184165, 0.0: 140471}) -Weights 0.7627453642114408 -__VALIDATION STATS__ -Counter({1: 5272, 0.0: 4198}) - - -#0/300 loss:0.577774820728925 accuracy:0.5991941743984032 val_loss:0.6628860759493668 val_accuracy:0.5971488912354804 val_0s:2313/4198 val_1s:7157/5272 -#1/300 loss:0.5315613218008431 accuracy:0.661925972473786 val_loss:0.6108101265822785 val_accuracy:0.5901795142555438 val_0s:3371/4198 val_1s:6099/5272 -#2/300 loss:0.5131625637613617 accuracy:0.6794471346369473 val_loss:0.6132911392405063 val_accuracy:0.5706441393875396 val_0s:6406/4198 val_1s:3064/5272 -#3/300 loss:0.49969690249131055 accuracy:0.6905796030015156 val_loss:0.5810126582278485 val_accuracy:0.6125659978880675 val_0s:5133/4198 val_1s:4337/5272 -#4/300 loss:0.4878531825238368 accuracy:0.7005754136941066 val_loss:0.5803544303797468 val_accuracy:0.6221752903907075 val_0s:4904/4198 val_1s:4566/5272 -#5/300 loss:0.47785761809713456 accuracy:0.7076171465887948 val_loss:0.599493670886076 val_accuracy:0.6082365364308342 val_0s:4704/4198 val_1s:4766/5272 -#6/300 loss:0.4679618540696333 accuracy:0.7164331743860817 val_loss:0.5943291139240504 val_accuracy:0.6158394931362197 val_0s:5984/4198 val_1s:3486/5272 \ No newline at end of file diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/setup.py b/video/mintime/model_code/cross-efficient-vit/efficient_net/setup.py deleted file mode 100644 index eb8d95a136169d2178f6525965afac2ab2a824aa..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/setup.py +++ /dev/null @@ -1,123 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# Note: To use the 'upload' functionality of this file, you must: -# $ pipenv install twine --dev - -import io -import os -import sys -from shutil import rmtree - -from setuptools import find_packages, setup, Command - -# Package meta-data. -NAME = 'efficientnet_pytorch' -DESCRIPTION = 'EfficientNet implemented in PyTorch.' -URL = 'https://github.com/lukemelas/EfficientNet-PyTorch' -EMAIL = 'lmelaskyriazi@college.harvard.edu' -AUTHOR = 'Luke' -REQUIRES_PYTHON = '>=3.5.0' -VERSION = '0.7.1' - -# What packages are required for this module to be executed? -REQUIRED = [ - 'torch' -] - -# What packages are optional? -EXTRAS = { - # 'fancy feature': ['django'], -} - -# The rest you shouldn't have to touch too much :) -# ------------------------------------------------ -# Except, perhaps the License and Trove Classifiers! -# If you do change the License, remember to change the Trove Classifier for that! - -here = os.path.abspath(os.path.dirname(__file__)) - -# Import the README and use it as the long-description. -# Note: this will only work if 'README.md' is present in your MANIFEST.in file! -try: - with io.open(os.path.join(here, 'README.md'), encoding='utf-8') as f: - long_description = '\n' + f.read() -except FileNotFoundError: - long_description = DESCRIPTION - -# Load the package's __version__.py module as a dictionary. -about = {} -if not VERSION: - project_slug = NAME.lower().replace("-", "_").replace(" ", "_") - with open(os.path.join(here, project_slug, '__version__.py')) as f: - exec(f.read(), about) -else: - about['__version__'] = VERSION - - -class UploadCommand(Command): - """Support setup.py upload.""" - - description = 'Build and publish the package.' - user_options = [] - - @staticmethod - def status(s): - """Prints things in bold.""" - print('\033[1m{0}\033[0m'.format(s)) - - def initialize_options(self): - pass - - def finalize_options(self): - pass - - def run(self): - try: - self.status('Removing previous builds…') - rmtree(os.path.join(here, 'dist')) - except OSError: - pass - - self.status('Building Source and Wheel (universal) distribution…') - os.system('{0} setup.py sdist bdist_wheel --universal'.format(sys.executable)) - - self.status('Uploading the package to PyPI via Twine…') - os.system('twine upload dist/*') - - self.status('Pushing git tags…') - os.system('git tag v{0}'.format(about['__version__'])) - os.system('git push --tags') - - sys.exit() - - -# Where the magic happens: -setup( - name=NAME, - version=about['__version__'], - description=DESCRIPTION, - long_description=long_description, - long_description_content_type='text/markdown', - author=AUTHOR, - author_email=EMAIL, - python_requires=REQUIRES_PYTHON, - url=URL, - packages=find_packages(exclude=["tests", "*.tests", "*.tests.*", "tests.*"]), - # py_modules=['model'], # If your package is a single module, use this instead of 'packages' - install_requires=REQUIRED, - extras_require=EXTRAS, - include_package_data=True, - license='Apache', - classifiers=[ - # Full list: https://pypi.python.org/pypi?%3Aaction=list_classifiers - 'License :: OSI Approved :: Apache Software License', - 'Programming Language :: Python', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - ], - # $ setup.py publish support. - cmdclass={ - 'upload': UploadCommand, - }, -) diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/sotabench.py b/video/mintime/model_code/cross-efficient-vit/efficient_net/sotabench.py deleted file mode 100644 index 67816ff301d8cae39dde534edf688eeb010320c8..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/sotabench.py +++ /dev/null @@ -1,71 +0,0 @@ -import os -import numpy as np -import PIL -import torch -from torch.utils.data import DataLoader -import torchvision.transforms as transforms -from torchvision.datasets import ImageNet - -from efficientnet_pytorch import EfficientNet - -from sotabencheval.image_classification import ImageNetEvaluator -from sotabencheval.utils import is_server - -if is_server(): - DATA_ROOT = DATA_ROOT = os.environ.get('IMAGENET_DIR', './imagenet') # './.data/vision/imagenet' -else: # local settings - DATA_ROOT = os.environ['IMAGENET_DIR'] - assert bool(DATA_ROOT), 'please set IMAGENET_DIR environment variable' - print('Local data root: ', DATA_ROOT) - -model_name = 'EfficientNet-B5' -model = EfficientNet.from_pretrained(model_name.lower()) -image_size = EfficientNet.get_image_size(model_name.lower()) - -input_transform = transforms.Compose([ - transforms.Resize(image_size, PIL.Image.BICUBIC), - transforms.CenterCrop(image_size), - transforms.ToTensor(), - transforms.Normalize( - mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), -]) - -test_dataset = ImageNet( - DATA_ROOT, - split="val", - transform=input_transform, - target_transform=None, -) - -test_loader = DataLoader( - test_dataset, - batch_size=128, - shuffle=False, - num_workers=4, - pin_memory=True, -) - -model = model.cuda() -model.eval() - -evaluator = ImageNetEvaluator(model_name=model_name, - paper_arxiv_id='1905.11946') - -def get_img_id(image_name): - return image_name.split('/')[-1].replace('.JPEG', '') - -with torch.no_grad(): - for i, (input, target) in enumerate(test_loader): - input = input.to(device='cuda', non_blocking=True) - target = target.to(device='cuda', non_blocking=True) - output = model(input) - image_ids = [get_img_id(img[0]) for img in test_loader.dataset.imgs[i*test_loader.batch_size:(i+1)*test_loader.batch_size]] - evaluator.add(dict(zip(image_ids, list(output.cpu().numpy())))) - if evaluator.cache_exists: - break - -if not is_server(): - print("Results:") - print(evaluator.get_results()) - -evaluator.save() diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/sotabench_setup.sh b/video/mintime/model_code/cross-efficient-vit/efficient_net/sotabench_setup.sh deleted file mode 100644 index e45bdeaebb0e1e9b27caa419b3a38623ffff5983..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/sotabench_setup.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash -x -source /workspace/venv/bin/activate -PYTHON=${PYTHON:-"python"} -$PYTHON -m pip install torch -$PYTHON -m pip install torchvision -$PYTHON -m pip install scipy diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/tests/test_model.py b/video/mintime/model_code/cross-efficient-vit/efficient_net/tests/test_model.py deleted file mode 100644 index 0a034677324a19b82f6dc279bf5b27aad6c835f3..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/tests/test_model.py +++ /dev/null @@ -1,124 +0,0 @@ -from collections import OrderedDict - -import pytest -import torch -import torch.nn as nn - -from efficientnet_pytorch import EfficientNet - - -# -- fixtures ------------------------------------------------------------------------------------- - -@pytest.fixture(scope='module', params=[x for x in range(4)]) -def model(request): - return 'efficientnet-b{}'.format(request.param) - - -@pytest.fixture(scope='module', params=[True, False]) -def pretrained(request): - return request.param - - -@pytest.fixture(scope='function') -def net(model, pretrained): - return EfficientNet.from_pretrained(model) if pretrained else EfficientNet.from_name(model) - - -# -- tests ---------------------------------------------------------------------------------------- - -@pytest.mark.parametrize('img_size', [224, 256, 512]) -def test_forward(net, img_size): - """Test `.forward()` doesn't throw an error""" - data = torch.zeros((1, 3, img_size, img_size)) - output = net(data) - assert not torch.isnan(output).any() - - -def test_dropout_training(net): - """Test dropout `.training` is set by `.train()` on parent `nn.module`""" - net.train() - assert net._dropout.training == True - - -def test_dropout_eval(net): - """Test dropout `.training` is set by `.eval()` on parent `nn.module`""" - net.eval() - assert net._dropout.training == False - - -def test_dropout_update(net): - """Test dropout `.training` is updated by `.train()` and `.eval()` on parent `nn.module`""" - net.train() - assert net._dropout.training == True - net.eval() - assert net._dropout.training == False - net.train() - assert net._dropout.training == True - net.eval() - assert net._dropout.training == False - - -@pytest.mark.parametrize('img_size', [224, 256, 512]) -def test_modify_dropout(net, img_size): - """Test ability to modify dropout and fc modules of network""" - dropout = nn.Sequential(OrderedDict([ - ('_bn2', nn.BatchNorm1d(net._bn1.num_features)), - ('_drop1', nn.Dropout(p=net._global_params.dropout_rate)), - ('_linear1', nn.Linear(net._bn1.num_features, 512)), - ('_relu', nn.ReLU()), - ('_bn3', nn.BatchNorm1d(512)), - ('_drop2', nn.Dropout(p=net._global_params.dropout_rate / 2)) - ])) - fc = nn.Linear(512, net._global_params.num_classes) - - net._dropout = dropout - net._fc = fc - - data = torch.zeros((2, 3, img_size, img_size)) - output = net(data) - assert not torch.isnan(output).any() - - -@pytest.mark.parametrize('img_size', [224, 256, 512]) -def test_modify_pool(net, img_size): - """Test ability to modify pooling module of network""" - - class AdaptiveMaxAvgPool(nn.Module): - - def __init__(self): - super().__init__() - self.ada_avgpool = nn.AdaptiveAvgPool2d(1) - self.ada_maxpool = nn.AdaptiveMaxPool2d(1) - - def forward(self, x): - avg_x = self.ada_avgpool(x) - max_x = self.ada_maxpool(x) - x = torch.cat((avg_x, max_x), dim=1) - return x - - avg_pooling = AdaptiveMaxAvgPool() - fc = nn.Linear(net._fc.in_features * 2, net._global_params.num_classes) - - net._avg_pooling = avg_pooling - net._fc = fc - - data = torch.zeros((2, 3, img_size, img_size)) - output = net(data) - assert not torch.isnan(output).any() - - -@pytest.mark.parametrize('img_size', [224, 256, 512]) -def test_extract_endpoints(net, img_size): - """Test `.extract_endpoints()` doesn't throw an error""" - data = torch.zeros((1, 3, img_size, img_size)) - endpoints = net.extract_endpoints(data) - assert not torch.isnan(endpoints['reduction_1']).any() - assert not torch.isnan(endpoints['reduction_2']).any() - assert not torch.isnan(endpoints['reduction_3']).any() - assert not torch.isnan(endpoints['reduction_4']).any() - assert not torch.isnan(endpoints['reduction_5']).any() - assert endpoints['reduction_1'].size(2) == img_size // 2 - assert endpoints['reduction_2'].size(2) == img_size // 4 - assert endpoints['reduction_3'].size(2) == img_size // 8 - assert endpoints['reduction_4'].size(2) == img_size // 16 - assert endpoints['reduction_5'].size(2) == img_size // 32 diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/README.md b/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/README.md deleted file mode 100644 index 9699aa807198df8a5b776fd35fce5052baaf6783..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/README.md +++ /dev/null @@ -1,25 +0,0 @@ -### TensorFlow to PyTorch Conversion - -This directory is used to convert TensorFlow weights to PyTorch. It was hacked together fairly quickly, so the code is not the most beautiful (just a warning!), but it does the job. I will be refactoring it soon. - -I should also emphasize that you do *not* need to run any of this code to load pretrained weights. Simply use `EfficientNet.from_pretrained(...)`. - -That being said, the main script here is `convert_to_tf/load_tf_weights.py`. In order to use it, you should first download the pretrained TensorFlow weights: - ```bash -cd pretrained_tensorflow -./download.sh efficientnet-b0 -cd .. -``` -Then -```bash -mkdir -p pretrained_pytorch -cd convert_tf_to_pt -python load_tf_weights.py \ - --model_name efficientnet-b0 \ - --tf_checkpoint ../pretrained_tensorflow/efficientnet-b0/ \ - --output_file ../pretrained_pytorch/efficientnet-b0.pth -``` - - diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/download.sh b/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/download.sh deleted file mode 100644 index 6405dbd93e4f54338b1c7874ef89926491742f38..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/download.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -mkdir original_tf -cd original_tf -touch __init__.py -wget https://raw.githubusercontent.com/tensorflow/tpu/master/models/official/efficientnet/efficientnet_builder.py -wget https://raw.githubusercontent.com/tensorflow/tpu/master/models/official/efficientnet/efficientnet_model.py -wget https://raw.githubusercontent.com/tensorflow/tpu/master/models/official/efficientnet/eval_ckpt_main.py -wget https://raw.githubusercontent.com/tensorflow/tpu/master/models/official/efficientnet/utils.py -wget https://raw.githubusercontent.com/tensorflow/tpu/master/models/official/efficientnet/preprocessing.py -cd .. -mkdir -p tmp \ No newline at end of file diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/load_tf_weights.py b/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/load_tf_weights.py deleted file mode 100644 index 22e296e87558b521a3c60f8de3c4a8031743d1b4..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/load_tf_weights.py +++ /dev/null @@ -1,174 +0,0 @@ -import numpy as np -import tensorflow as tf -import torch - -tf.compat.v1.disable_v2_behavior() - -def load_param(checkpoint_file, conversion_table, model_name): - """ - Load parameters according to conversion_table. - - Args: - checkpoint_file (string): pretrained checkpoint model file in tensorflow - conversion_table (dict): { pytorch tensor in a model : checkpoint variable name } - """ - for pyt_param, tf_param_name in conversion_table.items(): - tf_param_name = str(model_name) + '/' + tf_param_name - tf_param = tf.train.load_variable(checkpoint_file, tf_param_name) - if 'conv' in tf_param_name and 'kernel' in tf_param_name: - tf_param = np.transpose(tf_param, (3, 2, 0, 1)) - if 'depthwise' in tf_param_name: - tf_param = np.transpose(tf_param, (1, 0, 2, 3)) - elif tf_param_name.endswith('kernel'): # for weight(kernel), we should do transpose - tf_param = np.transpose(tf_param) - assert pyt_param.size() == tf_param.shape, \ - 'Dim Mismatch: %s vs %s ; %s' % (tuple(pyt_param.size()), tf_param.shape, tf_param_name) - pyt_param.data = torch.from_numpy(tf_param) - - -def load_efficientnet(model, checkpoint_file, model_name): - """ - Load PyTorch EfficientNet from TensorFlow checkpoint file - """ - - # This will store the enire conversion table - conversion_table = {} - merge = lambda dict1, dict2: {**dict1, **dict2} - - # All the weights not in the conv blocks - conversion_table_for_weights_outside_blocks = { - model._conv_stem.weight: 'stem/conv2d/kernel', # [3, 3, 3, 32]), - model._bn0.bias: 'stem/tpu_batch_normalization/beta', # [32]), - model._bn0.weight: 'stem/tpu_batch_normalization/gamma', # [32]), - model._bn0.running_mean: 'stem/tpu_batch_normalization/moving_mean', # [32]), - model._bn0.running_var: 'stem/tpu_batch_normalization/moving_variance', # [32]), - model._conv_head.weight: 'head/conv2d/kernel', # [1, 1, 320, 1280]), - model._bn1.bias: 'head/tpu_batch_normalization/beta', # [1280]), - model._bn1.weight: 'head/tpu_batch_normalization/gamma', # [1280]), - model._bn1.running_mean: 'head/tpu_batch_normalization/moving_mean', # [32]), - model._bn1.running_var: 'head/tpu_batch_normalization/moving_variance', # [32]), - model._fc.bias: 'head/dense/bias', # [1000]), - model._fc.weight: 'head/dense/kernel', # [1280, 1000]), - } - conversion_table = merge(conversion_table, conversion_table_for_weights_outside_blocks) - - # The first conv block is special because it does not have _expand_conv - conversion_table_for_first_block = { - model._blocks[0]._project_conv.weight: 'blocks_0/conv2d/kernel', # 1, 1, 32, 16]), - model._blocks[0]._depthwise_conv.weight: 'blocks_0/depthwise_conv2d/depthwise_kernel', # [3, 3, 32, 1]), - model._blocks[0]._se_reduce.bias: 'blocks_0/se/conv2d/bias', # , [8]), - model._blocks[0]._se_reduce.weight: 'blocks_0/se/conv2d/kernel', # , [1, 1, 32, 8]), - model._blocks[0]._se_expand.bias: 'blocks_0/se/conv2d_1/bias', # , [32]), - model._blocks[0]._se_expand.weight: 'blocks_0/se/conv2d_1/kernel', # , [1, 1, 8, 32]), - model._blocks[0]._bn1.bias: 'blocks_0/tpu_batch_normalization/beta', # [32]), - model._blocks[0]._bn1.weight: 'blocks_0/tpu_batch_normalization/gamma', # [32]), - model._blocks[0]._bn1.running_mean: 'blocks_0/tpu_batch_normalization/moving_mean', - model._blocks[0]._bn1.running_var: 'blocks_0/tpu_batch_normalization/moving_variance', - model._blocks[0]._bn2.bias: 'blocks_0/tpu_batch_normalization_1/beta', # [16]), - model._blocks[0]._bn2.weight: 'blocks_0/tpu_batch_normalization_1/gamma', # [16]), - model._blocks[0]._bn2.running_mean: 'blocks_0/tpu_batch_normalization_1/moving_mean', - model._blocks[0]._bn2.running_var: 'blocks_0/tpu_batch_normalization_1/moving_variance', - } - conversion_table = merge(conversion_table, conversion_table_for_first_block) - - # Conv blocks - for i in range(len(model._blocks)): - - is_first_block = '_expand_conv.weight' not in [n for n, p in model._blocks[i].named_parameters()] - - if is_first_block: - conversion_table_block = { - model._blocks[i]._project_conv.weight: 'blocks_' + str(i) + '/conv2d/kernel', # 1, 1, 32, 16]), - model._blocks[i]._depthwise_conv.weight: 'blocks_' + str(i) + '/depthwise_conv2d/depthwise_kernel', - # [3, 3, 32, 1]), - model._blocks[i]._se_reduce.bias: 'blocks_' + str(i) + '/se/conv2d/bias', # , [8]), - model._blocks[i]._se_reduce.weight: 'blocks_' + str(i) + '/se/conv2d/kernel', # , [1, 1, 32, 8]), - model._blocks[i]._se_expand.bias: 'blocks_' + str(i) + '/se/conv2d_1/bias', # , [32]), - model._blocks[i]._se_expand.weight: 'blocks_' + str(i) + '/se/conv2d_1/kernel', # , [1, 1, 8, 32]), - model._blocks[i]._bn1.bias: 'blocks_' + str(i) + '/tpu_batch_normalization/beta', # [32]), - model._blocks[i]._bn1.weight: 'blocks_' + str(i) + '/tpu_batch_normalization/gamma', # [32]), - model._blocks[i]._bn1.running_mean: 'blocks_' + str(i) + '/tpu_batch_normalization/moving_mean', - model._blocks[i]._bn1.running_var: 'blocks_' + str(i) + '/tpu_batch_normalization/moving_variance', - model._blocks[i]._bn2.bias: 'blocks_' + str(i) + '/tpu_batch_normalization_1/beta', # [16]), - model._blocks[i]._bn2.weight: 'blocks_' + str(i) + '/tpu_batch_normalization_1/gamma', # [16]), - model._blocks[i]._bn2.running_mean: 'blocks_' + str(i) + '/tpu_batch_normalization_1/moving_mean', - model._blocks[i]._bn2.running_var: 'blocks_' + str(i) + '/tpu_batch_normalization_1/moving_variance', - } - - else: - conversion_table_block = { - model._blocks[i]._expand_conv.weight: 'blocks_' + str(i) + '/conv2d/kernel', - model._blocks[i]._project_conv.weight: 'blocks_' + str(i) + '/conv2d_1/kernel', - model._blocks[i]._depthwise_conv.weight: 'blocks_' + str(i) + '/depthwise_conv2d/depthwise_kernel', - model._blocks[i]._se_reduce.bias: 'blocks_' + str(i) + '/se/conv2d/bias', - model._blocks[i]._se_reduce.weight: 'blocks_' + str(i) + '/se/conv2d/kernel', - model._blocks[i]._se_expand.bias: 'blocks_' + str(i) + '/se/conv2d_1/bias', - model._blocks[i]._se_expand.weight: 'blocks_' + str(i) + '/se/conv2d_1/kernel', - model._blocks[i]._bn0.bias: 'blocks_' + str(i) + '/tpu_batch_normalization/beta', - model._blocks[i]._bn0.weight: 'blocks_' + str(i) + '/tpu_batch_normalization/gamma', - model._blocks[i]._bn0.running_mean: 'blocks_' + str(i) + '/tpu_batch_normalization/moving_mean', - model._blocks[i]._bn0.running_var: 'blocks_' + str(i) + '/tpu_batch_normalization/moving_variance', - model._blocks[i]._bn1.bias: 'blocks_' + str(i) + '/tpu_batch_normalization_1/beta', - model._blocks[i]._bn1.weight: 'blocks_' + str(i) + '/tpu_batch_normalization_1/gamma', - model._blocks[i]._bn1.running_mean: 'blocks_' + str(i) + '/tpu_batch_normalization_1/moving_mean', - model._blocks[i]._bn1.running_var: 'blocks_' + str(i) + '/tpu_batch_normalization_1/moving_variance', - model._blocks[i]._bn2.bias: 'blocks_' + str(i) + '/tpu_batch_normalization_2/beta', - model._blocks[i]._bn2.weight: 'blocks_' + str(i) + '/tpu_batch_normalization_2/gamma', - model._blocks[i]._bn2.running_mean: 'blocks_' + str(i) + '/tpu_batch_normalization_2/moving_mean', - model._blocks[i]._bn2.running_var: 'blocks_' + str(i) + '/tpu_batch_normalization_2/moving_variance', - } - - conversion_table = merge(conversion_table, conversion_table_block) - - # Load TensorFlow parameters into PyTorch model - load_param(checkpoint_file, conversion_table, model_name) - return conversion_table - - -def load_and_save_temporary_tensorflow_model(model_name, model_ckpt, example_img= '../../example/img.jpg'): - """ Loads and saves a TensorFlow model. """ - image_files = [example_img] - eval_ckpt_driver = eval_ckpt_main.EvalCkptDriver(model_name) - with tf.Graph().as_default(), tf.compat.v1.Session() as sess: - images, labels = eval_ckpt_driver.build_dataset(image_files, [0] * len(image_files), False) - probs = eval_ckpt_driver.build_model(images, is_training=False) - sess.run(tf.compat.v1.global_variables_initializer()) - print(model_ckpt) - eval_ckpt_driver.restore_model(sess, model_ckpt) - tf.compat.v1.train.Saver().save(sess, 'tmp/model.ckpt') - - -if __name__ == '__main__': - - import sys - import argparse - - sys.path.append('original_tf') - import eval_ckpt_main - - from efficientnet_pytorch import EfficientNet - - parser = argparse.ArgumentParser( - description='Convert TF model to PyTorch model and save for easier future loading') - parser.add_argument('--model_name', type=str, default='efficientnet-b0', - help='efficientnet-b{N}, where N is an integer 0 <= N <= 8') - parser.add_argument('--tf_checkpoint', type=str, default='pretrained_tensorflow/efficientnet-b0/', - help='checkpoint file path') - parser.add_argument('--output_file', type=str, default='pretrained_pytorch/efficientnet-b0.pth', - help='output PyTorch model file name') - args = parser.parse_args() - - # Build model - model = EfficientNet.from_name(args.model_name) - - # Load and save temporary TensorFlow file due to TF nuances - print(args.tf_checkpoint) - load_and_save_temporary_tensorflow_model(args.model_name, args.tf_checkpoint) - - # Load weights - load_efficientnet(model, 'tmp/model.ckpt', model_name=args.model_name) - print('Loaded TF checkpoint weights') - - # Save PyTorch file - torch.save(model.state_dict(), args.output_file) - print('Saved model to', args.output_file) diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/load_tf_weights_tf1.py b/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/load_tf_weights_tf1.py deleted file mode 100644 index 0722a68389ae1a0d0827ad8635fae744e9d2dfe3..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/load_tf_weights_tf1.py +++ /dev/null @@ -1,172 +0,0 @@ -import numpy as np -import tensorflow as tf -import torch - -def load_param(checkpoint_file, conversion_table, model_name): - """ - Load parameters according to conversion_table. - - Args: - checkpoint_file (string): pretrained checkpoint model file in tensorflow - conversion_table (dict): { pytorch tensor in a model : checkpoint variable name } - """ - for pyt_param, tf_param_name in conversion_table.items(): - tf_param_name = str(model_name) + '/' + tf_param_name - tf_param = tf.train.load_variable(checkpoint_file, tf_param_name) - if 'conv' in tf_param_name and 'kernel' in tf_param_name: - tf_param = np.transpose(tf_param, (3, 2, 0, 1)) - if 'depthwise' in tf_param_name: - tf_param = np.transpose(tf_param, (1, 0, 2, 3)) - elif tf_param_name.endswith('kernel'): # for weight(kernel), we should do transpose - tf_param = np.transpose(tf_param) - assert pyt_param.size() == tf_param.shape, \ - 'Dim Mismatch: %s vs %s ; %s' % (tuple(pyt_param.size()), tf_param.shape, tf_param_name) - pyt_param.data = torch.from_numpy(tf_param) - - -def load_efficientnet(model, checkpoint_file, model_name): - """ - Load PyTorch EfficientNet from TensorFlow checkpoint file - """ - - # This will store the enire conversion table - conversion_table = {} - merge = lambda dict1, dict2: {**dict1, **dict2} - - # All the weights not in the conv blocks - conversion_table_for_weights_outside_blocks = { - model._conv_stem.weight: 'stem/conv2d/kernel', # [3, 3, 3, 32]), - model._bn0.bias: 'stem/tpu_batch_normalization/beta', # [32]), - model._bn0.weight: 'stem/tpu_batch_normalization/gamma', # [32]), - model._bn0.running_mean: 'stem/tpu_batch_normalization/moving_mean', # [32]), - model._bn0.running_var: 'stem/tpu_batch_normalization/moving_variance', # [32]), - model._conv_head.weight: 'head/conv2d/kernel', # [1, 1, 320, 1280]), - model._bn1.bias: 'head/tpu_batch_normalization/beta', # [1280]), - model._bn1.weight: 'head/tpu_batch_normalization/gamma', # [1280]), - model._bn1.running_mean: 'head/tpu_batch_normalization/moving_mean', # [32]), - model._bn1.running_var: 'head/tpu_batch_normalization/moving_variance', # [32]), - model._fc.bias: 'head/dense/bias', # [1000]), - model._fc.weight: 'head/dense/kernel', # [1280, 1000]), - } - conversion_table = merge(conversion_table, conversion_table_for_weights_outside_blocks) - - # The first conv block is special because it does not have _expand_conv - conversion_table_for_first_block = { - model._blocks[0]._project_conv.weight: 'blocks_0/conv2d/kernel', # 1, 1, 32, 16]), - model._blocks[0]._depthwise_conv.weight: 'blocks_0/depthwise_conv2d/depthwise_kernel', # [3, 3, 32, 1]), - model._blocks[0]._se_reduce.bias: 'blocks_0/se/conv2d/bias', # , [8]), - model._blocks[0]._se_reduce.weight: 'blocks_0/se/conv2d/kernel', # , [1, 1, 32, 8]), - model._blocks[0]._se_expand.bias: 'blocks_0/se/conv2d_1/bias', # , [32]), - model._blocks[0]._se_expand.weight: 'blocks_0/se/conv2d_1/kernel', # , [1, 1, 8, 32]), - model._blocks[0]._bn1.bias: 'blocks_0/tpu_batch_normalization/beta', # [32]), - model._blocks[0]._bn1.weight: 'blocks_0/tpu_batch_normalization/gamma', # [32]), - model._blocks[0]._bn1.running_mean: 'blocks_0/tpu_batch_normalization/moving_mean', - model._blocks[0]._bn1.running_var: 'blocks_0/tpu_batch_normalization/moving_variance', - model._blocks[0]._bn2.bias: 'blocks_0/tpu_batch_normalization_1/beta', # [16]), - model._blocks[0]._bn2.weight: 'blocks_0/tpu_batch_normalization_1/gamma', # [16]), - model._blocks[0]._bn2.running_mean: 'blocks_0/tpu_batch_normalization_1/moving_mean', - model._blocks[0]._bn2.running_var: 'blocks_0/tpu_batch_normalization_1/moving_variance', - } - conversion_table = merge(conversion_table, conversion_table_for_first_block) - - # Conv blocks - for i in range(len(model._blocks)): - - is_first_block = '_expand_conv.weight' not in [n for n, p in model._blocks[i].named_parameters()] - - if is_first_block: - conversion_table_block = { - model._blocks[i]._project_conv.weight: 'blocks_' + str(i) + '/conv2d/kernel', # 1, 1, 32, 16]), - model._blocks[i]._depthwise_conv.weight: 'blocks_' + str(i) + '/depthwise_conv2d/depthwise_kernel', - # [3, 3, 32, 1]), - model._blocks[i]._se_reduce.bias: 'blocks_' + str(i) + '/se/conv2d/bias', # , [8]), - model._blocks[i]._se_reduce.weight: 'blocks_' + str(i) + '/se/conv2d/kernel', # , [1, 1, 32, 8]), - model._blocks[i]._se_expand.bias: 'blocks_' + str(i) + '/se/conv2d_1/bias', # , [32]), - model._blocks[i]._se_expand.weight: 'blocks_' + str(i) + '/se/conv2d_1/kernel', # , [1, 1, 8, 32]), - model._blocks[i]._bn1.bias: 'blocks_' + str(i) + '/tpu_batch_normalization/beta', # [32]), - model._blocks[i]._bn1.weight: 'blocks_' + str(i) + '/tpu_batch_normalization/gamma', # [32]), - model._blocks[i]._bn1.running_mean: 'blocks_' + str(i) + '/tpu_batch_normalization/moving_mean', - model._blocks[i]._bn1.running_var: 'blocks_' + str(i) + '/tpu_batch_normalization/moving_variance', - model._blocks[i]._bn2.bias: 'blocks_' + str(i) + '/tpu_batch_normalization_1/beta', # [16]), - model._blocks[i]._bn2.weight: 'blocks_' + str(i) + '/tpu_batch_normalization_1/gamma', # [16]), - model._blocks[i]._bn2.running_mean: 'blocks_' + str(i) + '/tpu_batch_normalization_1/moving_mean', - model._blocks[i]._bn2.running_var: 'blocks_' + str(i) + '/tpu_batch_normalization_1/moving_variance', - } - - else: - conversion_table_block = { - model._blocks[i]._expand_conv.weight: 'blocks_' + str(i) + '/conv2d/kernel', - model._blocks[i]._project_conv.weight: 'blocks_' + str(i) + '/conv2d_1/kernel', - model._blocks[i]._depthwise_conv.weight: 'blocks_' + str(i) + '/depthwise_conv2d/depthwise_kernel', - model._blocks[i]._se_reduce.bias: 'blocks_' + str(i) + '/se/conv2d/bias', - model._blocks[i]._se_reduce.weight: 'blocks_' + str(i) + '/se/conv2d/kernel', - model._blocks[i]._se_expand.bias: 'blocks_' + str(i) + '/se/conv2d_1/bias', - model._blocks[i]._se_expand.weight: 'blocks_' + str(i) + '/se/conv2d_1/kernel', - model._blocks[i]._bn0.bias: 'blocks_' + str(i) + '/tpu_batch_normalization/beta', - model._blocks[i]._bn0.weight: 'blocks_' + str(i) + '/tpu_batch_normalization/gamma', - model._blocks[i]._bn0.running_mean: 'blocks_' + str(i) + '/tpu_batch_normalization/moving_mean', - model._blocks[i]._bn0.running_var: 'blocks_' + str(i) + '/tpu_batch_normalization/moving_variance', - model._blocks[i]._bn1.bias: 'blocks_' + str(i) + '/tpu_batch_normalization_1/beta', - model._blocks[i]._bn1.weight: 'blocks_' + str(i) + '/tpu_batch_normalization_1/gamma', - model._blocks[i]._bn1.running_mean: 'blocks_' + str(i) + '/tpu_batch_normalization_1/moving_mean', - model._blocks[i]._bn1.running_var: 'blocks_' + str(i) + '/tpu_batch_normalization_1/moving_variance', - model._blocks[i]._bn2.bias: 'blocks_' + str(i) + '/tpu_batch_normalization_2/beta', - model._blocks[i]._bn2.weight: 'blocks_' + str(i) + '/tpu_batch_normalization_2/gamma', - model._blocks[i]._bn2.running_mean: 'blocks_' + str(i) + '/tpu_batch_normalization_2/moving_mean', - model._blocks[i]._bn2.running_var: 'blocks_' + str(i) + '/tpu_batch_normalization_2/moving_variance', - } - - conversion_table = merge(conversion_table, conversion_table_block) - - # Load TensorFlow parameters into PyTorch model - load_param(checkpoint_file, conversion_table, model_name) - return conversion_table - - -def load_and_save_temporary_tensorflow_model(model_name, model_ckpt, example_img= '../../example/img.jpg'): - """ Loads and saves a TensorFlow model. """ - image_files = [example_img] - eval_ckpt_driver = eval_ckpt_main.EvalCkptDriver(model_name) - with tf.Graph().as_default(), tf.Session() as sess: - images, labels = eval_ckpt_driver.build_dataset(image_files, [0] * len(image_files), False) - probs = eval_ckpt_driver.build_model(images, is_training=False) - sess.run(tf.global_variables_initializer()) - print(model_ckpt) - eval_ckpt_driver.restore_model(sess, model_ckpt) - tf.train.Saver().save(sess, 'tmp/model.ckpt') - - -if __name__ == '__main__': - - import sys - import argparse - - sys.path.append('original_tf') - import eval_ckpt_main - - from efficientnet_pytorch import EfficientNet - - parser = argparse.ArgumentParser( - description='Convert TF model to PyTorch model and save for easier future loading') - parser.add_argument('--model_name', type=str, default='efficientnet-b0', - help='efficientnet-b{N}, where N is an integer 0 <= N <= 8') - parser.add_argument('--tf_checkpoint', type=str, default='pretrained_tensorflow/efficientnet-b0/', - help='checkpoint file path') - parser.add_argument('--output_file', type=str, default='pretrained_pytorch/efficientnet-b0.pth', - help='output PyTorch model file name') - args = parser.parse_args() - - # Build model - model = EfficientNet.from_name(args.model_name) - - # Load and save temporary TensorFlow file due to TF nuances - print(args.tf_checkpoint) - load_and_save_temporary_tensorflow_model(args.model_name, args.tf_checkpoint) - - # Load weights - load_efficientnet(model, 'tmp/model.ckpt', model_name=args.model_name) - print('Loaded TF checkpoint weights') - - # Save PyTorch file - torch.save(model.state_dict(), args.output_file) - print('Saved model to', args.output_file) diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/original_tf/__init__.py b/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/original_tf/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/original_tf/efficientnet_builder.py b/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/original_tf/efficientnet_builder.py deleted file mode 100644 index ff384b1126b8efc36e74c87e065976fedad21394..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/original_tf/efficientnet_builder.py +++ /dev/null @@ -1,329 +0,0 @@ -# Copyright 2019 The TensorFlow Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============================================================================== -"""Model Builder for EfficientNet.""" - -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -import functools -import os -import re -from absl import logging -import numpy as np -import six -import tensorflow.compat.v1 as tf - -import efficientnet_model -import utils -MEAN_RGB = [0.485 * 255, 0.456 * 255, 0.406 * 255] -STDDEV_RGB = [0.229 * 255, 0.224 * 255, 0.225 * 255] - - -def efficientnet_params(model_name): - """Get efficientnet params based on model name.""" - params_dict = { - # (width_coefficient, depth_coefficient, resolution, dropout_rate) - 'efficientnet-b0': (1.0, 1.0, 224, 0.2), - 'efficientnet-b1': (1.0, 1.1, 240, 0.2), - 'efficientnet-b2': (1.1, 1.2, 260, 0.3), - 'efficientnet-b3': (1.2, 1.4, 300, 0.3), - 'efficientnet-b4': (1.4, 1.8, 380, 0.4), - 'efficientnet-b5': (1.6, 2.2, 456, 0.4), - 'efficientnet-b6': (1.8, 2.6, 528, 0.5), - 'efficientnet-b7': (2.0, 3.1, 600, 0.5), - 'efficientnet-b8': (2.2, 3.6, 672, 0.5), - 'efficientnet-l2': (4.3, 5.3, 800, 0.5), - } - return params_dict[model_name] - - -class BlockDecoder(object): - """Block Decoder for readability.""" - - def _decode_block_string(self, block_string): - """Gets a block through a string notation of arguments.""" - if six.PY2: - assert isinstance(block_string, (str, unicode)) - else: - assert isinstance(block_string, str) - ops = block_string.split('_') - options = {} - for op in ops: - splits = re.split(r'(\d.*)', op) - if len(splits) >= 2: - key, value = splits[:2] - options[key] = value - - if 's' not in options or len(options['s']) != 2: - raise ValueError('Strides options should be a pair of integers.') - - return efficientnet_model.BlockArgs( - kernel_size=int(options['k']), - num_repeat=int(options['r']), - input_filters=int(options['i']), - output_filters=int(options['o']), - expand_ratio=int(options['e']), - id_skip=('noskip' not in block_string), - se_ratio=float(options['se']) if 'se' in options else None, - strides=[int(options['s'][0]), - int(options['s'][1])], - conv_type=int(options['c']) if 'c' in options else 0, - fused_conv=int(options['f']) if 'f' in options else 0, - super_pixel=int(options['p']) if 'p' in options else 0, - condconv=('cc' in block_string)) - - def _encode_block_string(self, block): - """Encodes a block to a string.""" - args = [ - 'r%d' % block.num_repeat, - 'k%d' % block.kernel_size, - 's%d%d' % (block.strides[0], block.strides[1]), - 'e%s' % block.expand_ratio, - 'i%d' % block.input_filters, - 'o%d' % block.output_filters, - 'c%d' % block.conv_type, - 'f%d' % block.fused_conv, - 'p%d' % block.super_pixel, - ] - if block.se_ratio > 0 and block.se_ratio <= 1: - args.append('se%s' % block.se_ratio) - if block.id_skip is False: # pylint: disable=g-bool-id-comparison - args.append('noskip') - if block.condconv: - args.append('cc') - return '_'.join(args) - - def decode(self, string_list): - """Decodes a list of string notations to specify blocks inside the network. - - Args: - string_list: a list of strings, each string is a notation of block. - - Returns: - A list of namedtuples to represent blocks arguments. - """ - assert isinstance(string_list, list) - blocks_args = [] - for block_string in string_list: - blocks_args.append(self._decode_block_string(block_string)) - return blocks_args - - def encode(self, blocks_args): - """Encodes a list of Blocks to a list of strings. - - Args: - blocks_args: A list of namedtuples to represent blocks arguments. - Returns: - a list of strings, each string is a notation of block. - """ - block_strings = [] - for block in blocks_args: - block_strings.append(self._encode_block_string(block)) - return block_strings - - -def swish(features, use_native=True, use_hard=False): - """Computes the Swish activation function. - - We provide three alternnatives: - - Native tf.nn.swish, use less memory during training than composable swish. - - Quantization friendly hard swish. - - A composable swish, equivalant to tf.nn.swish, but more general for - finetuning and TF-Hub. - - Args: - features: A `Tensor` representing preactivation values. - use_native: Whether to use the native swish from tf.nn that uses a custom - gradient to reduce memory usage, or to use customized swish that uses - default TensorFlow gradient computation. - use_hard: Whether to use quantization-friendly hard swish. - - Returns: - The activation value. - """ - if use_native and use_hard: - raise ValueError('Cannot specify both use_native and use_hard.') - - if use_native: - return tf.nn.swish(features) - - if use_hard: - return features * tf.nn.relu6(features + np.float32(3)) * (1. / 6.) - - features = tf.convert_to_tensor(features, name='features') - return features * tf.nn.sigmoid(features) - - -_DEFAULT_BLOCKS_ARGS = [ - 'r1_k3_s11_e1_i32_o16_se0.25', 'r2_k3_s22_e6_i16_o24_se0.25', - 'r2_k5_s22_e6_i24_o40_se0.25', 'r3_k3_s22_e6_i40_o80_se0.25', - 'r3_k5_s11_e6_i80_o112_se0.25', 'r4_k5_s22_e6_i112_o192_se0.25', - 'r1_k3_s11_e6_i192_o320_se0.25', -] - - -def efficientnet(width_coefficient=None, - depth_coefficient=None, - dropout_rate=0.2, - survival_prob=0.8): - """Creates a efficientnet model.""" - global_params = efficientnet_model.GlobalParams( - blocks_args=_DEFAULT_BLOCKS_ARGS, - batch_norm_momentum=0.99, - batch_norm_epsilon=1e-3, - dropout_rate=dropout_rate, - survival_prob=survival_prob, - data_format='channels_last', - num_classes=1000, - width_coefficient=width_coefficient, - depth_coefficient=depth_coefficient, - depth_divisor=8, - min_depth=None, - relu_fn=tf.nn.swish, - # The default is TPU-specific batch norm. - # The alternative is tf.layers.BatchNormalization. - batch_norm=utils.TpuBatchNormalization, # TPU-specific requirement. - use_se=True, - clip_projection_output=False) - return global_params - - -def get_model_params(model_name, override_params): - """Get the block args and global params for a given model.""" - if model_name.startswith('efficientnet'): - width_coefficient, depth_coefficient, _, dropout_rate = ( - efficientnet_params(model_name)) - global_params = efficientnet( - width_coefficient, depth_coefficient, dropout_rate) - else: - raise NotImplementedError('model name is not pre-defined: %s' % model_name) - - if override_params: - # ValueError will be raised here if override_params has fields not included - # in global_params. - global_params = global_params._replace(**override_params) - - decoder = BlockDecoder() - blocks_args = decoder.decode(global_params.blocks_args) - - logging.info('global_params= %s', global_params) - return blocks_args, global_params - - -def build_model(images, - model_name, - training, - override_params=None, - model_dir=None, - fine_tuning=False, - features_only=False, - pooled_features_only=False): - """A helper functiion to creates a model and returns predicted logits. - - Args: - images: input images tensor. - model_name: string, the predefined model name. - training: boolean, whether the model is constructed for training. - override_params: A dictionary of params for overriding. Fields must exist in - efficientnet_model.GlobalParams. - model_dir: string, optional model dir for saving configs. - fine_tuning: boolean, whether the model is used for finetuning. - features_only: build the base feature network only (excluding final - 1x1 conv layer, global pooling, dropout and fc head). - pooled_features_only: build the base network for features extraction (after - 1x1 conv layer and global pooling, but before dropout and fc head). - - Returns: - logits: the logits tensor of classes. - endpoints: the endpoints for each layer. - - Raises: - When model_name specified an undefined model, raises NotImplementedError. - When override_params has invalid fields, raises ValueError. - """ - assert isinstance(images, tf.Tensor) - assert not (features_only and pooled_features_only) - - # For backward compatibility. - if override_params and override_params.get('drop_connect_rate', None): - override_params['survival_prob'] = 1 - override_params['drop_connect_rate'] - - if not training or fine_tuning: - if not override_params: - override_params = {} - override_params['batch_norm'] = utils.BatchNormalization - if fine_tuning: - override_params['relu_fn'] = functools.partial(swish, use_native=False) - blocks_args, global_params = get_model_params(model_name, override_params) - - if model_dir: - param_file = os.path.join(model_dir, 'model_params.txt') - if not tf.gfile.Exists(param_file): - if not tf.gfile.Exists(model_dir): - tf.gfile.MakeDirs(model_dir) - with tf.gfile.GFile(param_file, 'w') as f: - logging.info('writing to %s', param_file) - f.write('model_name= %s\n\n' % model_name) - f.write('global_params= %s\n\n' % str(global_params)) - f.write('blocks_args= %s\n\n' % str(blocks_args)) - - with tf.variable_scope(model_name): - model = efficientnet_model.Model(blocks_args, global_params) - outputs = model( - images, - training=training, - features_only=features_only, - pooled_features_only=pooled_features_only) - if features_only: - outputs = tf.identity(outputs, 'features') - elif pooled_features_only: - outputs = tf.identity(outputs, 'pooled_features') - else: - outputs = tf.identity(outputs, 'logits') - return outputs, model.endpoints - - -def build_model_base(images, model_name, training, override_params=None): - """A helper functiion to create a base model and return global_pool. - - Args: - images: input images tensor. - model_name: string, the predefined model name. - training: boolean, whether the model is constructed for training. - override_params: A dictionary of params for overriding. Fields must exist in - efficientnet_model.GlobalParams. - - Returns: - features: global pool features. - endpoints: the endpoints for each layer. - - Raises: - When model_name specified an undefined model, raises NotImplementedError. - When override_params has invalid fields, raises ValueError. - """ - assert isinstance(images, tf.Tensor) - # For backward compatibility. - if override_params and override_params.get('drop_connect_rate', None): - override_params['survival_prob'] = 1 - override_params['drop_connect_rate'] - - blocks_args, global_params = get_model_params(model_name, override_params) - - with tf.variable_scope(model_name): - model = efficientnet_model.Model(blocks_args, global_params) - features = model(images, training=training, features_only=True) - - features = tf.identity(features, 'features') - return features, model.endpoints diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/original_tf/efficientnet_model.py b/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/original_tf/efficientnet_model.py deleted file mode 100644 index 6bc827e1e0de4ced8192f8e1920ff44afdbb0e93..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/original_tf/efficientnet_model.py +++ /dev/null @@ -1,713 +0,0 @@ -# Copyright 2019 The TensorFlow Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============================================================================== -"""Contains definitions for EfficientNet model. - -[1] Mingxing Tan, Quoc V. Le - EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks. - ICML'19, https://arxiv.org/abs/1905.11946 -""" - -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -import collections -import functools -import math - -from absl import logging -import numpy as np -import six -from six.moves import xrange -import tensorflow.compat.v1 as tf - -import utils -# from condconv import condconv_layers - -GlobalParams = collections.namedtuple('GlobalParams', [ - 'batch_norm_momentum', 'batch_norm_epsilon', 'dropout_rate', 'data_format', - 'num_classes', 'width_coefficient', 'depth_coefficient', 'depth_divisor', - 'min_depth', 'survival_prob', 'relu_fn', 'batch_norm', 'use_se', - 'local_pooling', 'condconv_num_experts', 'clip_projection_output', - 'blocks_args' -]) -GlobalParams.__new__.__defaults__ = (None,) * len(GlobalParams._fields) - -BlockArgs = collections.namedtuple('BlockArgs', [ - 'kernel_size', 'num_repeat', 'input_filters', 'output_filters', - 'expand_ratio', 'id_skip', 'strides', 'se_ratio', 'conv_type', 'fused_conv', - 'super_pixel', 'condconv' -]) -# defaults will be a public argument for namedtuple in Python 3.7 -# https://docs.python.org/3/library/collections.html#collections.namedtuple -BlockArgs.__new__.__defaults__ = (None,) * len(BlockArgs._fields) - - -def conv_kernel_initializer(shape, dtype=None, partition_info=None): - """Initialization for convolutional kernels. - - The main difference with tf.variance_scaling_initializer is that - tf.variance_scaling_initializer uses a truncated normal with an uncorrected - standard deviation, whereas here we use a normal distribution. Similarly, - tf.initializers.variance_scaling uses a truncated normal with - a corrected standard deviation. - - Args: - shape: shape of variable - dtype: dtype of variable - partition_info: unused - - Returns: - an initialization for the variable - """ - del partition_info - kernel_height, kernel_width, _, out_filters = shape - fan_out = int(kernel_height * kernel_width * out_filters) - return tf.random_normal( - shape, mean=0.0, stddev=np.sqrt(2.0 / fan_out), dtype=dtype) - - -def dense_kernel_initializer(shape, dtype=None, partition_info=None): - """Initialization for dense kernels. - - This initialization is equal to - tf.variance_scaling_initializer(scale=1.0/3.0, mode='fan_out', - distribution='uniform'). - It is written out explicitly here for clarity. - - Args: - shape: shape of variable - dtype: dtype of variable - partition_info: unused - - Returns: - an initialization for the variable - """ - del partition_info - init_range = 1.0 / np.sqrt(shape[1]) - return tf.random_uniform(shape, -init_range, init_range, dtype=dtype) - - -def superpixel_kernel_initializer(shape, dtype='float32', partition_info=None): - """Initializes superpixel kernels. - - This is inspired by space-to-depth transformation that is mathematically - equivalent before and after the transformation. But we do the space-to-depth - via a convolution. Moreover, we make the layer trainable instead of direct - transform, we can initialization it this way so that the model can learn not - to do anything but keep it mathematically equivalent, when improving - performance. - - - Args: - shape: shape of variable - dtype: dtype of variable - partition_info: unused - - Returns: - an initialization for the variable - """ - del partition_info - # use input depth to make superpixel kernel. - depth = shape[-2] - filters = np.zeros([2, 2, depth, 4 * depth], dtype=dtype) - i = np.arange(2) - j = np.arange(2) - k = np.arange(depth) - mesh = np.array(np.meshgrid(i, j, k)).T.reshape(-1, 3).T - filters[ - mesh[0], - mesh[1], - mesh[2], - 4 * mesh[2] + 2 * mesh[0] + mesh[1]] = 1 - return filters - - -def round_filters(filters, global_params): - """Round number of filters based on depth multiplier.""" - orig_f = filters - multiplier = global_params.width_coefficient - divisor = global_params.depth_divisor - min_depth = global_params.min_depth - if not multiplier: - return filters - - filters *= multiplier - min_depth = min_depth or divisor - new_filters = max(min_depth, int(filters + divisor / 2) // divisor * divisor) - # Make sure that round down does not go down by more than 10%. - if new_filters < 0.9 * filters: - new_filters += divisor - logging.info('round_filter input=%s output=%s', orig_f, new_filters) - return int(new_filters) - - -def round_repeats(repeats, global_params): - """Round number of filters based on depth multiplier.""" - multiplier = global_params.depth_coefficient - if not multiplier: - return repeats - return int(math.ceil(multiplier * repeats)) - - -class MBConvBlock(tf.keras.layers.Layer): - """A class of MBConv: Mobile Inverted Residual Bottleneck. - - Attributes: - endpoints: dict. A list of internal tensors. - """ - - def __init__(self, block_args, global_params): - """Initializes a MBConv block. - - Args: - block_args: BlockArgs, arguments to create a Block. - global_params: GlobalParams, a set of global parameters. - """ - super(MBConvBlock, self).__init__() - self._block_args = block_args - self._batch_norm_momentum = global_params.batch_norm_momentum - self._batch_norm_epsilon = global_params.batch_norm_epsilon - self._batch_norm = global_params.batch_norm - self._condconv_num_experts = global_params.condconv_num_experts - self._data_format = global_params.data_format - if self._data_format == 'channels_first': - self._channel_axis = 1 - self._spatial_dims = [2, 3] - else: - self._channel_axis = -1 - self._spatial_dims = [1, 2] - - self._relu_fn = global_params.relu_fn or tf.nn.swish - self._has_se = ( - global_params.use_se and self._block_args.se_ratio is not None and - 0 < self._block_args.se_ratio <= 1) - - self._clip_projection_output = global_params.clip_projection_output - - self.endpoints = None - - self.conv_cls = tf.layers.Conv2D - self.depthwise_conv_cls = utils.DepthwiseConv2D - if self._block_args.condconv: - self.conv_cls = functools.partial( - condconv_layers.CondConv2D, num_experts=self._condconv_num_experts) - self.depthwise_conv_cls = functools.partial( - condconv_layers.DepthwiseCondConv2D, - num_experts=self._condconv_num_experts) - - # Builds the block accordings to arguments. - self._build() - - def block_args(self): - return self._block_args - - def _build(self): - """Builds block according to the arguments.""" - if self._block_args.super_pixel == 1: - self._superpixel = tf.layers.Conv2D( - self._block_args.input_filters, - kernel_size=[2, 2], - strides=[2, 2], - kernel_initializer=conv_kernel_initializer, - padding='same', - data_format=self._data_format, - use_bias=False) - self._bnsp = self._batch_norm( - axis=self._channel_axis, - momentum=self._batch_norm_momentum, - epsilon=self._batch_norm_epsilon) - - if self._block_args.condconv: - # Add the example-dependent routing function - self._avg_pooling = tf.keras.layers.GlobalAveragePooling2D( - data_format=self._data_format) - self._routing_fn = tf.layers.Dense( - self._condconv_num_experts, activation=tf.nn.sigmoid) - - filters = self._block_args.input_filters * self._block_args.expand_ratio - kernel_size = self._block_args.kernel_size - - # Fused expansion phase. Called if using fused convolutions. - self._fused_conv = self.conv_cls( - filters=filters, - kernel_size=[kernel_size, kernel_size], - strides=self._block_args.strides, - kernel_initializer=conv_kernel_initializer, - padding='same', - data_format=self._data_format, - use_bias=False) - - # Expansion phase. Called if not using fused convolutions and expansion - # phase is necessary. - self._expand_conv = self.conv_cls( - filters=filters, - kernel_size=[1, 1], - strides=[1, 1], - kernel_initializer=conv_kernel_initializer, - padding='same', - data_format=self._data_format, - use_bias=False) - self._bn0 = self._batch_norm( - axis=self._channel_axis, - momentum=self._batch_norm_momentum, - epsilon=self._batch_norm_epsilon) - - # Depth-wise convolution phase. Called if not using fused convolutions. - self._depthwise_conv = self.depthwise_conv_cls( - kernel_size=[kernel_size, kernel_size], - strides=self._block_args.strides, - depthwise_initializer=conv_kernel_initializer, - padding='same', - data_format=self._data_format, - use_bias=False) - - self._bn1 = self._batch_norm( - axis=self._channel_axis, - momentum=self._batch_norm_momentum, - epsilon=self._batch_norm_epsilon) - - if self._has_se: - num_reduced_filters = max( - 1, int(self._block_args.input_filters * self._block_args.se_ratio)) - # Squeeze and Excitation layer. - self._se_reduce = tf.layers.Conv2D( - num_reduced_filters, - kernel_size=[1, 1], - strides=[1, 1], - kernel_initializer=conv_kernel_initializer, - padding='same', - data_format=self._data_format, - use_bias=True) - self._se_expand = tf.layers.Conv2D( - filters, - kernel_size=[1, 1], - strides=[1, 1], - kernel_initializer=conv_kernel_initializer, - padding='same', - data_format=self._data_format, - use_bias=True) - - # Output phase. - filters = self._block_args.output_filters - self._project_conv = self.conv_cls( - filters=filters, - kernel_size=[1, 1], - strides=[1, 1], - kernel_initializer=conv_kernel_initializer, - padding='same', - data_format=self._data_format, - use_bias=False) - self._bn2 = self._batch_norm( - axis=self._channel_axis, - momentum=self._batch_norm_momentum, - epsilon=self._batch_norm_epsilon) - - def _call_se(self, input_tensor): - """Call Squeeze and Excitation layer. - - Args: - input_tensor: Tensor, a single input tensor for Squeeze/Excitation layer. - - Returns: - A output tensor, which should have the same shape as input. - """ - se_tensor = tf.reduce_mean(input_tensor, self._spatial_dims, keepdims=True) - se_tensor = self._se_expand(self._relu_fn(self._se_reduce(se_tensor))) - logging.info('Built Squeeze and Excitation with tensor shape: %s', - (se_tensor.shape)) - return tf.sigmoid(se_tensor) * input_tensor - - def call(self, inputs, training=True, survival_prob=None): - """Implementation of call(). - - Args: - inputs: the inputs tensor. - training: boolean, whether the model is constructed for training. - survival_prob: float, between 0 to 1, drop connect rate. - - Returns: - A output tensor. - """ - logging.info('Block input: %s shape: %s', inputs.name, inputs.shape) - logging.info('Block input depth: %s output depth: %s', - self._block_args.input_filters, - self._block_args.output_filters) - - x = inputs - - fused_conv_fn = self._fused_conv - expand_conv_fn = self._expand_conv - depthwise_conv_fn = self._depthwise_conv - project_conv_fn = self._project_conv - - if self._block_args.condconv: - pooled_inputs = self._avg_pooling(inputs) - routing_weights = self._routing_fn(pooled_inputs) - # Capture routing weights as additional input to CondConv layers - fused_conv_fn = functools.partial( - self._fused_conv, routing_weights=routing_weights) - expand_conv_fn = functools.partial( - self._expand_conv, routing_weights=routing_weights) - depthwise_conv_fn = functools.partial( - self._depthwise_conv, routing_weights=routing_weights) - project_conv_fn = functools.partial( - self._project_conv, routing_weights=routing_weights) - - # creates conv 2x2 kernel - if self._block_args.super_pixel == 1: - with tf.variable_scope('super_pixel'): - x = self._relu_fn( - self._bnsp(self._superpixel(x), training=training)) - logging.info( - 'Block start with SuperPixel: %s shape: %s', x.name, x.shape) - - if self._block_args.fused_conv: - # If use fused mbconv, skip expansion and use regular conv. - x = self._relu_fn(self._bn1(fused_conv_fn(x), training=training)) - logging.info('Conv2D: %s shape: %s', x.name, x.shape) - else: - # Otherwise, first apply expansion and then apply depthwise conv. - if self._block_args.expand_ratio != 1: - x = self._relu_fn(self._bn0(expand_conv_fn(x), training=training)) - logging.info('Expand: %s shape: %s', x.name, x.shape) - - x = self._relu_fn(self._bn1(depthwise_conv_fn(x), training=training)) - logging.info('DWConv: %s shape: %s', x.name, x.shape) - - if self._has_se: - with tf.variable_scope('se'): - x = self._call_se(x) - - self.endpoints = {'expansion_output': x} - - x = self._bn2(project_conv_fn(x), training=training) - # Add identity so that quantization-aware training can insert quantization - # ops correctly. - x = tf.identity(x) - if self._clip_projection_output: - x = tf.clip_by_value(x, -6, 6) - if self._block_args.id_skip: - if all( - s == 1 for s in self._block_args.strides - ) and self._block_args.input_filters == self._block_args.output_filters: - # Apply only if skip connection presents. - if survival_prob: - x = utils.drop_connect(x, training, survival_prob) - x = tf.add(x, inputs) - logging.info('Project: %s shape: %s', x.name, x.shape) - return x - - -class MBConvBlockWithoutDepthwise(MBConvBlock): - """MBConv-like block without depthwise convolution and squeeze-and-excite.""" - - def _build(self): - """Builds block according to the arguments.""" - filters = self._block_args.input_filters * self._block_args.expand_ratio - if self._block_args.expand_ratio != 1: - # Expansion phase: - self._expand_conv = tf.layers.Conv2D( - filters, - kernel_size=[3, 3], - strides=[1, 1], - kernel_initializer=conv_kernel_initializer, - padding='same', - use_bias=False) - self._bn0 = self._batch_norm( - axis=self._channel_axis, - momentum=self._batch_norm_momentum, - epsilon=self._batch_norm_epsilon) - - # Output phase: - filters = self._block_args.output_filters - self._project_conv = tf.layers.Conv2D( - filters, - kernel_size=[1, 1], - strides=self._block_args.strides, - kernel_initializer=conv_kernel_initializer, - padding='same', - use_bias=False) - self._bn1 = self._batch_norm( - axis=self._channel_axis, - momentum=self._batch_norm_momentum, - epsilon=self._batch_norm_epsilon) - - def call(self, inputs, training=True, survival_prob=None): - """Implementation of call(). - - Args: - inputs: the inputs tensor. - training: boolean, whether the model is constructed for training. - survival_prob: float, between 0 to 1, drop connect rate. - - Returns: - A output tensor. - """ - logging.info('Block input: %s shape: %s', inputs.name, inputs.shape) - if self._block_args.expand_ratio != 1: - x = self._relu_fn(self._bn0(self._expand_conv(inputs), training=training)) - else: - x = inputs - logging.info('Expand: %s shape: %s', x.name, x.shape) - - self.endpoints = {'expansion_output': x} - - x = self._bn1(self._project_conv(x), training=training) - # Add identity so that quantization-aware training can insert quantization - # ops correctly. - x = tf.identity(x) - if self._clip_projection_output: - x = tf.clip_by_value(x, -6, 6) - - if self._block_args.id_skip: - if all( - s == 1 for s in self._block_args.strides - ) and self._block_args.input_filters == self._block_args.output_filters: - # Apply only if skip connection presents. - if survival_prob: - x = utils.drop_connect(x, training, survival_prob) - x = tf.add(x, inputs) - logging.info('Project: %s shape: %s', x.name, x.shape) - return x - - -class Model(tf.keras.Model): - """A class implements tf.keras.Model for MNAS-like model. - - Reference: https://arxiv.org/abs/1807.11626 - """ - - def __init__(self, blocks_args=None, global_params=None): - """Initializes an `Model` instance. - - Args: - blocks_args: A list of BlockArgs to construct block modules. - global_params: GlobalParams, a set of global parameters. - - Raises: - ValueError: when blocks_args is not specified as a list. - """ - super(Model, self).__init__() - if not isinstance(blocks_args, list): - raise ValueError('blocks_args should be a list.') - self._global_params = global_params - self._blocks_args = blocks_args - self._relu_fn = global_params.relu_fn or tf.nn.swish - self._batch_norm = global_params.batch_norm - - self.endpoints = None - - self._build() - - def _get_conv_block(self, conv_type): - conv_block_map = {0: MBConvBlock, 1: MBConvBlockWithoutDepthwise} - return conv_block_map[conv_type] - - def _build(self): - """Builds a model.""" - self._blocks = [] - batch_norm_momentum = self._global_params.batch_norm_momentum - batch_norm_epsilon = self._global_params.batch_norm_epsilon - if self._global_params.data_format == 'channels_first': - channel_axis = 1 - self._spatial_dims = [2, 3] - else: - channel_axis = -1 - self._spatial_dims = [1, 2] - - # Stem part. - self._conv_stem = tf.layers.Conv2D( - filters=round_filters(32, self._global_params), - kernel_size=[3, 3], - strides=[2, 2], - kernel_initializer=conv_kernel_initializer, - padding='same', - data_format=self._global_params.data_format, - use_bias=False) - self._bn0 = self._batch_norm( - axis=channel_axis, - momentum=batch_norm_momentum, - epsilon=batch_norm_epsilon) - - # Builds blocks. - for block_args in self._blocks_args: - assert block_args.num_repeat > 0 - assert block_args.super_pixel in [0, 1, 2] - # Update block input and output filters based on depth multiplier. - input_filters = round_filters(block_args.input_filters, - self._global_params) - output_filters = round_filters(block_args.output_filters, - self._global_params) - kernel_size = block_args.kernel_size - block_args = block_args._replace( - input_filters=input_filters, - output_filters=output_filters, - num_repeat=round_repeats(block_args.num_repeat, self._global_params)) - - # The first block needs to take care of stride and filter size increase. - conv_block = self._get_conv_block(block_args.conv_type) - if not block_args.super_pixel: # no super_pixel at all - self._blocks.append(conv_block(block_args, self._global_params)) - else: - # if superpixel, adjust filters, kernels, and strides. - depth_factor = int(4 / block_args.strides[0] / block_args.strides[1]) - block_args = block_args._replace( - input_filters=block_args.input_filters * depth_factor, - output_filters=block_args.output_filters * depth_factor, - kernel_size=((block_args.kernel_size + 1) // 2 if depth_factor > 1 - else block_args.kernel_size)) - # if the first block has stride-2 and super_pixel trandformation - if (block_args.strides[0] == 2 and block_args.strides[1] == 2): - block_args = block_args._replace(strides=[1, 1]) - self._blocks.append(conv_block(block_args, self._global_params)) - block_args = block_args._replace( # sp stops at stride-2 - super_pixel=0, - input_filters=input_filters, - output_filters=output_filters, - kernel_size=kernel_size) - elif block_args.super_pixel == 1: - self._blocks.append(conv_block(block_args, self._global_params)) - block_args = block_args._replace(super_pixel=2) - else: - self._blocks.append(conv_block(block_args, self._global_params)) - if block_args.num_repeat > 1: # rest of blocks with the same block_arg - # pylint: disable=protected-access - block_args = block_args._replace( - input_filters=block_args.output_filters, strides=[1, 1]) - # pylint: enable=protected-access - for _ in xrange(block_args.num_repeat - 1): - self._blocks.append(conv_block(block_args, self._global_params)) - - # Head part. - self._conv_head = tf.layers.Conv2D( - filters=round_filters(1280, self._global_params), - kernel_size=[1, 1], - strides=[1, 1], - kernel_initializer=conv_kernel_initializer, - padding='same', - use_bias=False) - self._bn1 = self._batch_norm( - axis=channel_axis, - momentum=batch_norm_momentum, - epsilon=batch_norm_epsilon) - - self._avg_pooling = tf.keras.layers.GlobalAveragePooling2D( - data_format=self._global_params.data_format) - if self._global_params.num_classes: - self._fc = tf.layers.Dense( - self._global_params.num_classes, - kernel_initializer=dense_kernel_initializer) - else: - self._fc = None - - if self._global_params.dropout_rate > 0: - self._dropout = tf.keras.layers.Dropout(self._global_params.dropout_rate) - else: - self._dropout = None - - def call(self, - inputs, - training=True, - features_only=None, - pooled_features_only=False): - """Implementation of call(). - - Args: - inputs: input tensors. - training: boolean, whether the model is constructed for training. - features_only: build the base feature network only. - pooled_features_only: build the base network for features extraction - (after 1x1 conv layer and global pooling, but before dropout and fc - head). - - Returns: - output tensors. - """ - outputs = None - self.endpoints = {} - reduction_idx = 0 - # Calls Stem layers - with tf.variable_scope('stem'): - outputs = self._relu_fn( - self._bn0(self._conv_stem(inputs), training=training)) - logging.info('Built stem layers with output shape: %s', outputs.shape) - self.endpoints['stem'] = outputs - - # Calls blocks. - for idx, block in enumerate(self._blocks): - is_reduction = False # reduction flag for blocks after the stem layer - # If the first block has super-pixel (space-to-depth) layer, then stem is - # the first reduction point. - if (block.block_args().super_pixel == 1 and idx == 0): - reduction_idx += 1 - self.endpoints['reduction_%s' % reduction_idx] = outputs - - elif ((idx == len(self._blocks) - 1) or - self._blocks[idx + 1].block_args().strides[0] > 1): - is_reduction = True - reduction_idx += 1 - - with tf.variable_scope('blocks_%s' % idx): - survival_prob = self._global_params.survival_prob - if survival_prob: - drop_rate = 1.0 - survival_prob - survival_prob = 1.0 - drop_rate * float(idx) / len(self._blocks) - logging.info('block_%s survival_prob: %s', idx, survival_prob) - outputs = block.call( - outputs, training=training, survival_prob=survival_prob) - self.endpoints['block_%s' % idx] = outputs - if is_reduction: - self.endpoints['reduction_%s' % reduction_idx] = outputs - if block.endpoints: - for k, v in six.iteritems(block.endpoints): - self.endpoints['block_%s/%s' % (idx, k)] = v - if is_reduction: - self.endpoints['reduction_%s/%s' % (reduction_idx, k)] = v - self.endpoints['features'] = outputs - - if not features_only: - # Calls final layers and returns logits. - with tf.variable_scope('head'): - outputs = self._relu_fn( - self._bn1(self._conv_head(outputs), training=training)) - self.endpoints['head_1x1'] = outputs - - if self._global_params.local_pooling: - shape = outputs.get_shape().as_list() - kernel_size = [ - 1, shape[self._spatial_dims[0]], shape[self._spatial_dims[1]], 1] - outputs = tf.nn.avg_pool( - outputs, ksize=kernel_size, strides=[1, 1, 1, 1], padding='VALID') - self.endpoints['pooled_features'] = outputs - if not pooled_features_only: - if self._dropout: - outputs = self._dropout(outputs, training=training) - self.endpoints['global_pool'] = outputs - if self._fc: - outputs = tf.squeeze(outputs, self._spatial_dims) - outputs = self._fc(outputs) - self.endpoints['head'] = outputs - else: - outputs = self._avg_pooling(outputs) - self.endpoints['pooled_features'] = outputs - if not pooled_features_only: - if self._dropout: - outputs = self._dropout(outputs, training=training) - self.endpoints['global_pool'] = outputs - if self._fc: - outputs = self._fc(outputs) - self.endpoints['head'] = outputs - return outputs diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/original_tf/eval_ckpt_main.py b/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/original_tf/eval_ckpt_main.py deleted file mode 100644 index 5993c323b3a8340fd0914ef56bf2a75cda5723d6..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/original_tf/eval_ckpt_main.py +++ /dev/null @@ -1,225 +0,0 @@ -# Copyright 2019 The TensorFlow Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============================================================================== -"""Eval checkpoint driver. - -This is an example evaluation script for users to understand the EfficientNet -model checkpoints on CPU. To serve EfficientNet, please consider to export a -`SavedModel` from checkpoints and use tf-serving to serve. -""" - -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -import json -import sys -from absl import app -from absl import flags -import numpy as np -import tensorflow as tf - - -import efficientnet_builder -import preprocessing - - -tf.compat.v1.disable_v2_behavior() - -flags.DEFINE_string('model_name', 'efficientnet-b0', 'Model name to eval.') -flags.DEFINE_string('runmode', 'examples', 'Running mode: examples or imagenet') -flags.DEFINE_string('imagenet_eval_glob', None, - 'Imagenet eval image glob, ' - 'such as /imagenet/ILSVRC2012*.JPEG') -flags.DEFINE_string('imagenet_eval_label', None, - 'Imagenet eval label file path, ' - 'such as /imagenet/ILSVRC2012_validation_ground_truth.txt') -flags.DEFINE_string('ckpt_dir', '/tmp/ckpt/', 'Checkpoint folders') -flags.DEFINE_string('example_img', '/tmp/panda.jpg', - 'Filepath for a single example image.') -flags.DEFINE_string('labels_map_file', '/tmp/labels_map.txt', - 'Labels map from label id to its meaning.') -flags.DEFINE_integer('num_images', 5000, - 'Number of images to eval. Use -1 to eval all images.') -FLAGS = flags.FLAGS - -MEAN_RGB = [0.485 * 255, 0.456 * 255, 0.406 * 255] -STDDEV_RGB = [0.229 * 255, 0.224 * 255, 0.225 * 255] - - -class EvalCkptDriver(object): - """A driver for running eval inference. - - Attributes: - model_name: str. Model name to eval. - batch_size: int. Eval batch size. - num_classes: int. Number of classes, default to 1000 for ImageNet. - image_size: int. Input image size, determined by model name. - """ - - def __init__(self, model_name='efficientnet-b0', batch_size=1): - """Initialize internal variables.""" - self.model_name = model_name - self.batch_size = batch_size - self.num_classes = 1000 - # Model Scaling parameters - _, _, self.image_size, _ = efficientnet_builder.efficientnet_params( - model_name) - - def restore_model(self, sess, ckpt_dir): - """Restore variables from checkpoint dir.""" - checkpoint = tf.train.latest_checkpoint(ckpt_dir) - ema = tf.train.ExponentialMovingAverage(decay=0.9999) - ema_vars = tf.compat.v1.trainable_variables() + tf.compat.v1.get_collection('moving_vars') - for v in tf.compat.v1.global_variables(): - if 'moving_mean' in v.name or 'moving_variance' in v.name: - ema_vars.append(v) - ema_vars = list(set(ema_vars)) - var_dict = ema.variables_to_restore(ema_vars) - saver = tf.compat.v1.train.Saver(var_dict, max_to_keep=1) - saver.restore(sess, checkpoint) - - def build_model(self, features, is_training): - """Build model with input features.""" - features -= tf.constant(MEAN_RGB, shape=[1, 1, 3], dtype=features.dtype) - features /= tf.constant(STDDEV_RGB, shape=[1, 1, 3], dtype=features.dtype) - logits, _ = efficientnet_builder.build_model( - features, self.model_name, is_training) - probs = tf.nn.softmax(logits) - probs = tf.squeeze(probs) - return probs - - def build_dataset(self, filenames, labels, is_training): - """Build input dataset.""" - filenames = tf.constant(filenames) - labels = tf.constant(labels) - - dataset = tf.compat.v1.data.Dataset.from_tensor_slices((filenames, labels)) - - def _parse_function(filename, label): - image_string = tf.io.read_file(filename) - image_decoded = preprocessing.preprocess_image( - image_string, is_training, self.image_size) - image = tf.cast(image_decoded, tf.float32) - return image, label - - dataset = dataset.map(_parse_function) - dataset = dataset.batch(self.batch_size) - - iterator = dataset.make_one_shot_iterator() - #iterator = iter(dataset) - images, labels = iterator.get_next() - return images, labels - - def run_inference(self, ckpt_dir, image_files, labels): - """Build and run inference on the target images and labels.""" - with tf.Graph().as_default(), tf.Session() as sess: - images, labels = self.build_dataset(image_files, labels, False) - probs = self.build_model(images, is_training=False) - - sess.run(tf.global_variables_initializer()) - self.restore_model(sess, ckpt_dir) - - prediction_idx = [] - prediction_prob = [] - for _ in range(len(image_files) // self.batch_size): - out_probs = sess.run(probs) - idx = np.argsort(out_probs)[::-1] - prediction_idx.append(idx[:5]) - prediction_prob.append([out_probs[pid] for pid in idx[:5]]) - - # Return the top 5 predictions (idx and prob) for each image. - return prediction_idx, prediction_prob - - -def eval_example_images(model_name, ckpt_dir, image_files, labels_map_file): - """Eval a list of example images. - - Args: - model_name: str. The name of model to eval. - ckpt_dir: str. Checkpoint directory path. - image_files: List[str]. A list of image file paths. - labels_map_file: str. The labels map file path. - - Returns: - A tuple (pred_idx, and pred_prob), where pred_idx is the top 5 prediction - index and pred_prob is the top 5 prediction probability. - """ - eval_ckpt_driver = EvalCkptDriver(model_name) - classes = json.loads(tf.gfile.Open(labels_map_file).read()) - pred_idx, pred_prob = eval_ckpt_driver.run_inference( - ckpt_dir, image_files, [0] * len(image_files)) - for i in range(len(image_files)): - print('predicted class for image {}: '.format(image_files[i])) - for j, idx in enumerate(pred_idx[i]): - print(' -> top_{} ({:4.2f}%): {} '.format( - j, pred_prob[i][j] * 100, classes[str(idx)])) - return pred_idx, pred_prob - - -def eval_imagenet(model_name, - ckpt_dir, - imagenet_eval_glob, - imagenet_eval_label, - num_images): - """Eval ImageNet images and report top1/top5 accuracy. - - Args: - model_name: str. The name of model to eval. - ckpt_dir: str. Checkpoint directory path. - imagenet_eval_glob: str. File path glob for all eval images. - imagenet_eval_label: str. File path for eval label. - num_images: int. Number of images to eval: -1 means eval the whole dataset. - - Returns: - A tuple (top1, top5) for top1 and top5 accuracy. - """ - eval_ckpt_driver = EvalCkptDriver(model_name) - imagenet_val_labels = [int(i) for i in tf.gfile.GFile(imagenet_eval_label)] - imagenet_filenames = sorted(tf.gfile.Glob(imagenet_eval_glob)) - if num_images < 0: - num_images = len(imagenet_filenames) - image_files = imagenet_filenames[:num_images] - labels = imagenet_val_labels[:num_images] - - pred_idx, _ = eval_ckpt_driver.run_inference(ckpt_dir, image_files, labels) - top1_cnt, top5_cnt = 0.0, 0.0 - for i, label in enumerate(labels): - top1_cnt += label in pred_idx[i][:1] - top5_cnt += label in pred_idx[i][:5] - if i % 100 == 0: - print('Step {}: top1_acc = {:4.2f}% top5_acc = {:4.2f}%'.format( - i, 100 * top1_cnt / (i + 1), 100 * top5_cnt / (i + 1))) - sys.stdout.flush() - top1, top5 = 100 * top1_cnt / num_images, 100 * top5_cnt / num_images - print('Final: top1_acc = {:4.2f}% top5_acc = {:4.2f}%'.format(top1, top5)) - return top1, top5 - - -def main(unused_argv): - tf.logging.set_verbosity(tf.logging.ERROR) - if FLAGS.runmode == 'examples': - # Run inference for an example image. - eval_example_images(FLAGS.model_name, FLAGS.ckpt_dir, [FLAGS.example_img], - FLAGS.labels_map_file) - elif FLAGS.runmode == 'imagenet': - # Run inference for imagenet. - eval_imagenet(FLAGS.model_name, FLAGS.ckpt_dir, FLAGS.imagenet_eval_glob, - FLAGS.imagenet_eval_label, FLAGS.num_images) - else: - print('must specify runmode: examples or imagenet') - - -if __name__ == '__main__': - app.run(main) diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/original_tf/eval_ckpt_main_tf1.py b/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/original_tf/eval_ckpt_main_tf1.py deleted file mode 100644 index e869d4ee767f3444e9872a023da00730a95cd4ad..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/original_tf/eval_ckpt_main_tf1.py +++ /dev/null @@ -1,221 +0,0 @@ -# Copyright 2019 The TensorFlow Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============================================================================== -"""Eval checkpoint driver. - -This is an example evaluation script for users to understand the EfficientNet -model checkpoints on CPU. To serve EfficientNet, please consider to export a -`SavedModel` from checkpoints and use tf-serving to serve. -""" - -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -import json -import sys -from absl import app -from absl import flags -import numpy as np -import tensorflow as tf - - -import efficientnet_builder -import preprocessing - - -flags.DEFINE_string('model_name', 'efficientnet-b0', 'Model name to eval.') -flags.DEFINE_string('runmode', 'examples', 'Running mode: examples or imagenet') -flags.DEFINE_string('imagenet_eval_glob', None, - 'Imagenet eval image glob, ' - 'such as /imagenet/ILSVRC2012*.JPEG') -flags.DEFINE_string('imagenet_eval_label', None, - 'Imagenet eval label file path, ' - 'such as /imagenet/ILSVRC2012_validation_ground_truth.txt') -flags.DEFINE_string('ckpt_dir', '/tmp/ckpt/', 'Checkpoint folders') -flags.DEFINE_string('example_img', '/tmp/panda.jpg', - 'Filepath for a single example image.') -flags.DEFINE_string('labels_map_file', '/tmp/labels_map.txt', - 'Labels map from label id to its meaning.') -flags.DEFINE_integer('num_images', 5000, - 'Number of images to eval. Use -1 to eval all images.') -FLAGS = flags.FLAGS - -MEAN_RGB = [0.485 * 255, 0.456 * 255, 0.406 * 255] -STDDEV_RGB = [0.229 * 255, 0.224 * 255, 0.225 * 255] - - -class EvalCkptDriver(object): - """A driver for running eval inference. - - Attributes: - model_name: str. Model name to eval. - batch_size: int. Eval batch size. - num_classes: int. Number of classes, default to 1000 for ImageNet. - image_size: int. Input image size, determined by model name. - """ - - def __init__(self, model_name='efficientnet-b0', batch_size=1): - """Initialize internal variables.""" - self.model_name = model_name - self.batch_size = batch_size - self.num_classes = 1000 - # Model Scaling parameters - _, _, self.image_size, _ = efficientnet_builder.efficientnet_params( - model_name) - - def restore_model(self, sess, ckpt_dir): - """Restore variables from checkpoint dir.""" - checkpoint = tf.train.latest_checkpoint(ckpt_dir) - ema = tf.train.ExponentialMovingAverage(decay=0.9999) - ema_vars = tf.trainable_variables() + tf.get_collection('moving_vars') - for v in tf.global_variables(): - if 'moving_mean' in v.name or 'moving_variance' in v.name: - ema_vars.append(v) - ema_vars = list(set(ema_vars)) - var_dict = ema.variables_to_restore(ema_vars) - saver = tf.train.Saver(var_dict, max_to_keep=1) - saver.restore(sess, checkpoint) - - def build_model(self, features, is_training): - """Build model with input features.""" - features -= tf.constant(MEAN_RGB, shape=[1, 1, 3], dtype=features.dtype) - features /= tf.constant(STDDEV_RGB, shape=[1, 1, 3], dtype=features.dtype) - logits, _ = efficientnet_builder.build_model( - features, self.model_name, is_training) - probs = tf.nn.softmax(logits) - probs = tf.squeeze(probs) - return probs - - def build_dataset(self, filenames, labels, is_training): - """Build input dataset.""" - filenames = tf.constant(filenames) - labels = tf.constant(labels) - dataset = tf.data.Dataset.from_tensor_slices((filenames, labels)) - - def _parse_function(filename, label): - image_string = tf.read_file(filename) - image_decoded = preprocessing.preprocess_image( - image_string, is_training, self.image_size) - image = tf.cast(image_decoded, tf.float32) - return image, label - - dataset = dataset.map(_parse_function) - dataset = dataset.batch(self.batch_size) - - iterator = dataset.make_one_shot_iterator() - images, labels = iterator.get_next() - return images, labels - - def run_inference(self, ckpt_dir, image_files, labels): - """Build and run inference on the target images and labels.""" - with tf.Graph().as_default(), tf.Session() as sess: - images, labels = self.build_dataset(image_files, labels, False) - probs = self.build_model(images, is_training=False) - - sess.run(tf.global_variables_initializer()) - self.restore_model(sess, ckpt_dir) - - prediction_idx = [] - prediction_prob = [] - for _ in range(len(image_files) // self.batch_size): - out_probs = sess.run(probs) - idx = np.argsort(out_probs)[::-1] - prediction_idx.append(idx[:5]) - prediction_prob.append([out_probs[pid] for pid in idx[:5]]) - - # Return the top 5 predictions (idx and prob) for each image. - return prediction_idx, prediction_prob - - -def eval_example_images(model_name, ckpt_dir, image_files, labels_map_file): - """Eval a list of example images. - - Args: - model_name: str. The name of model to eval. - ckpt_dir: str. Checkpoint directory path. - image_files: List[str]. A list of image file paths. - labels_map_file: str. The labels map file path. - - Returns: - A tuple (pred_idx, and pred_prob), where pred_idx is the top 5 prediction - index and pred_prob is the top 5 prediction probability. - """ - eval_ckpt_driver = EvalCkptDriver(model_name) - classes = json.loads(tf.gfile.Open(labels_map_file).read()) - pred_idx, pred_prob = eval_ckpt_driver.run_inference( - ckpt_dir, image_files, [0] * len(image_files)) - for i in range(len(image_files)): - print('predicted class for image {}: '.format(image_files[i])) - for j, idx in enumerate(pred_idx[i]): - print(' -> top_{} ({:4.2f}%): {} '.format( - j, pred_prob[i][j] * 100, classes[str(idx)])) - return pred_idx, pred_prob - - -def eval_imagenet(model_name, - ckpt_dir, - imagenet_eval_glob, - imagenet_eval_label, - num_images): - """Eval ImageNet images and report top1/top5 accuracy. - - Args: - model_name: str. The name of model to eval. - ckpt_dir: str. Checkpoint directory path. - imagenet_eval_glob: str. File path glob for all eval images. - imagenet_eval_label: str. File path for eval label. - num_images: int. Number of images to eval: -1 means eval the whole dataset. - - Returns: - A tuple (top1, top5) for top1 and top5 accuracy. - """ - eval_ckpt_driver = EvalCkptDriver(model_name) - imagenet_val_labels = [int(i) for i in tf.gfile.GFile(imagenet_eval_label)] - imagenet_filenames = sorted(tf.gfile.Glob(imagenet_eval_glob)) - if num_images < 0: - num_images = len(imagenet_filenames) - image_files = imagenet_filenames[:num_images] - labels = imagenet_val_labels[:num_images] - - pred_idx, _ = eval_ckpt_driver.run_inference(ckpt_dir, image_files, labels) - top1_cnt, top5_cnt = 0.0, 0.0 - for i, label in enumerate(labels): - top1_cnt += label in pred_idx[i][:1] - top5_cnt += label in pred_idx[i][:5] - if i % 100 == 0: - print('Step {}: top1_acc = {:4.2f}% top5_acc = {:4.2f}%'.format( - i, 100 * top1_cnt / (i + 1), 100 * top5_cnt / (i + 1))) - sys.stdout.flush() - top1, top5 = 100 * top1_cnt / num_images, 100 * top5_cnt / num_images - print('Final: top1_acc = {:4.2f}% top5_acc = {:4.2f}%'.format(top1, top5)) - return top1, top5 - - -def main(unused_argv): - tf.logging.set_verbosity(tf.logging.ERROR) - if FLAGS.runmode == 'examples': - # Run inference for an example image. - eval_example_images(FLAGS.model_name, FLAGS.ckpt_dir, [FLAGS.example_img], - FLAGS.labels_map_file) - elif FLAGS.runmode == 'imagenet': - # Run inference for imagenet. - eval_imagenet(FLAGS.model_name, FLAGS.ckpt_dir, FLAGS.imagenet_eval_glob, - FLAGS.imagenet_eval_label, FLAGS.num_images) - else: - print('must specify runmode: examples or imagenet') - - -if __name__ == '__main__': - app.run(main) diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/original_tf/preprocessing.py b/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/original_tf/preprocessing.py deleted file mode 100644 index e7af8ab625d40d9581ed47db3517feab74fe380d..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/original_tf/preprocessing.py +++ /dev/null @@ -1,241 +0,0 @@ -# Copyright 2019 The TensorFlow Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============================================================================== -"""ImageNet preprocessing.""" -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -from absl import logging - -import tensorflow.compat.v1 as tf - - -IMAGE_SIZE = 224 -CROP_PADDING = 32 - - -def distorted_bounding_box_crop(image_bytes, - bbox, - min_object_covered=0.1, - aspect_ratio_range=(0.75, 1.33), - area_range=(0.05, 1.0), - max_attempts=100, - scope=None): - """Generates cropped_image using one of the bboxes randomly distorted. - - See `tf.image.sample_distorted_bounding_box` for more documentation. - - Args: - image_bytes: `Tensor` of binary image data. - bbox: `Tensor` of bounding boxes arranged `[1, num_boxes, coords]` - where each coordinate is [0, 1) and the coordinates are arranged - as `[ymin, xmin, ymax, xmax]`. If num_boxes is 0 then use the whole - image. - min_object_covered: An optional `float`. Defaults to `0.1`. The cropped - area of the image must contain at least this fraction of any bounding - box supplied. - aspect_ratio_range: An optional list of `float`s. The cropped area of the - image must have an aspect ratio = width / height within this range. - area_range: An optional list of `float`s. The cropped area of the image - must contain a fraction of the supplied image within in this range. - max_attempts: An optional `int`. Number of attempts at generating a cropped - region of the image of the specified constraints. After `max_attempts` - failures, return the entire image. - scope: Optional `str` for name scope. - Returns: - cropped image `Tensor` - """ - with tf.name_scope(scope, 'distorted_bounding_box_crop', [image_bytes, bbox]): - shape = tf.image.extract_jpeg_shape(image_bytes) - sample_distorted_bounding_box = tf.image.sample_distorted_bounding_box( - shape, - bounding_boxes=bbox, - min_object_covered=min_object_covered, - aspect_ratio_range=aspect_ratio_range, - area_range=area_range, - max_attempts=max_attempts, - use_image_if_no_bounding_boxes=True) - bbox_begin, bbox_size, _ = sample_distorted_bounding_box - - # Crop the image to the specified bounding box. - offset_y, offset_x, _ = tf.unstack(bbox_begin) - target_height, target_width, _ = tf.unstack(bbox_size) - crop_window = tf.stack([offset_y, offset_x, target_height, target_width]) - image = tf.image.decode_and_crop_jpeg(image_bytes, crop_window, channels=3) - - return image - - -def _at_least_x_are_equal(a, b, x): - """At least `x` of `a` and `b` `Tensors` are equal.""" - match = tf.equal(a, b) - match = tf.cast(match, tf.int32) - return tf.greater_equal(tf.reduce_sum(match), x) - - -def _decode_and_random_crop(image_bytes, image_size): - """Make a random crop of image_size.""" - bbox = tf.constant([0.0, 0.0, 1.0, 1.0], dtype=tf.float32, shape=[1, 1, 4]) - image = distorted_bounding_box_crop( - image_bytes, - bbox, - min_object_covered=0.1, - aspect_ratio_range=(3. / 4, 4. / 3.), - area_range=(0.08, 1.0), - max_attempts=10, - scope=None) - original_shape = tf.image.extract_jpeg_shape(image_bytes) - bad = _at_least_x_are_equal(original_shape, tf.shape(image), 3) - - image = tf.cond( - bad, - lambda: _decode_and_center_crop(image_bytes, image_size), - lambda: tf.image.resize_bicubic([image], # pylint: disable=g-long-lambda - [image_size, image_size])[0]) - - return image - - -def _decode_and_center_crop(image_bytes, image_size): - """Crops to center of image with padding then scales image_size.""" - shape = tf.image.extract_jpeg_shape(image_bytes) - image_height = shape[0] - image_width = shape[1] - - padded_center_crop_size = tf.cast( - ((image_size / (image_size + CROP_PADDING)) * - tf.cast(tf.minimum(image_height, image_width), tf.float32)), - tf.int32) - - offset_height = ((image_height - padded_center_crop_size) + 1) // 2 - offset_width = ((image_width - padded_center_crop_size) + 1) // 2 - crop_window = tf.stack([offset_height, offset_width, - padded_center_crop_size, padded_center_crop_size]) - image = tf.image.decode_and_crop_jpeg(image_bytes, crop_window, channels=3) - image = tf.image.resize_bicubic([image], [image_size, image_size])[0] - return image - - -def _flip(image): - """Random horizontal image flip.""" - image = tf.image.random_flip_left_right(image) - return image - - -def preprocess_for_train(image_bytes, use_bfloat16, image_size=IMAGE_SIZE, - augment_name=None, - randaug_num_layers=None, randaug_magnitude=None): - """Preprocesses the given image for evaluation. - - Args: - image_bytes: `Tensor` representing an image binary of arbitrary size. - use_bfloat16: `bool` for whether to use bfloat16. - image_size: image size. - augment_name: `string` that is the name of the augmentation method - to apply to the image. `autoaugment` if AutoAugment is to be used or - `randaugment` if RandAugment is to be used. If the value is `None` no - augmentation method will be applied applied. See autoaugment.py for more - details. - randaug_num_layers: 'int', if RandAug is used, what should the number of - layers be. See autoaugment.py for detailed description. - randaug_magnitude: 'int', if RandAug is used, what should the magnitude - be. See autoaugment.py for detailed description. - - Returns: - A preprocessed image `Tensor`. - """ - image = _decode_and_random_crop(image_bytes, image_size) - image = _flip(image) - image = tf.reshape(image, [image_size, image_size, 3]) - - image = tf.image.convert_image_dtype( - image, dtype=tf.bfloat16 if use_bfloat16 else tf.float32) - - if augment_name: - try: - import autoaugment # pylint: disable=g-import-not-at-top - except ImportError as e: - logging.exception('Autoaugment is not supported in TF 2.x.') - raise e - - logging.info('Apply AutoAugment policy %s', augment_name) - input_image_type = image.dtype - image = tf.clip_by_value(image, 0.0, 255.0) - image = tf.cast(image, dtype=tf.uint8) - - if augment_name == 'autoaugment': - logging.info('Apply AutoAugment policy %s', augment_name) - image = autoaugment.distort_image_with_autoaugment(image, 'v0') - elif augment_name == 'randaugment': - image = autoaugment.distort_image_with_randaugment( - image, randaug_num_layers, randaug_magnitude) - else: - raise ValueError('Invalid value for augment_name: %s' % (augment_name)) - - image = tf.cast(image, dtype=input_image_type) - return image - - -def preprocess_for_eval(image_bytes, use_bfloat16, image_size=IMAGE_SIZE): - """Preprocesses the given image for evaluation. - - Args: - image_bytes: `Tensor` representing an image binary of arbitrary size. - use_bfloat16: `bool` for whether to use bfloat16. - image_size: image size. - - Returns: - A preprocessed image `Tensor`. - """ - image = _decode_and_center_crop(image_bytes, image_size) - image = tf.reshape(image, [image_size, image_size, 3]) - image = tf.image.convert_image_dtype( - image, dtype=tf.bfloat16 if use_bfloat16 else tf.float32) - return image - - -def preprocess_image(image_bytes, - is_training=False, - use_bfloat16=False, - image_size=IMAGE_SIZE, - augment_name=None, - randaug_num_layers=None, - randaug_magnitude=None): - """Preprocesses the given image. - - Args: - image_bytes: `Tensor` representing an image binary of arbitrary size. - is_training: `bool` for whether the preprocessing is for training. - use_bfloat16: `bool` for whether to use bfloat16. - image_size: image size. - augment_name: `string` that is the name of the augmentation method - to apply to the image. `autoaugment` if AutoAugment is to be used or - `randaugment` if RandAugment is to be used. If the value is `None` no - augmentation method will be applied applied. See autoaugment.py for more - details. - randaug_num_layers: 'int', if RandAug is used, what should the number of - layers be. See autoaugment.py for detailed description. - randaug_magnitude: 'int', if RandAug is used, what should the magnitude - be. See autoaugment.py for detailed description. - - Returns: - A preprocessed image `Tensor` with value range of [0, 255]. - """ - if is_training: - return preprocess_for_train( - image_bytes, use_bfloat16, image_size, augment_name, - randaug_num_layers, randaug_magnitude) - else: - return preprocess_for_eval(image_bytes, use_bfloat16, image_size) diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/original_tf/utils.py b/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/original_tf/utils.py deleted file mode 100644 index 61782ea3c45d7588dd909061e6c319272d803915..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/original_tf/utils.py +++ /dev/null @@ -1,405 +0,0 @@ -# Copyright 2019 The TensorFlow Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============================================================================== -"""Model utilities.""" - -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -import json -import os -import sys - -from absl import logging -import numpy as np -import tensorflow.compat.v1 as tf - -from tensorflow.python.tpu import tpu_function # pylint:disable=g-direct-tensorflow-import - - -def build_learning_rate(initial_lr, - global_step, - steps_per_epoch=None, - lr_decay_type='exponential', - decay_factor=0.97, - decay_epochs=2.4, - total_steps=None, - warmup_epochs=5): - """Build learning rate.""" - if lr_decay_type == 'exponential': - assert steps_per_epoch is not None - decay_steps = steps_per_epoch * decay_epochs - lr = tf.train.exponential_decay( - initial_lr, global_step, decay_steps, decay_factor, staircase=True) - elif lr_decay_type == 'cosine': - assert total_steps is not None - lr = 0.5 * initial_lr * ( - 1 + tf.cos(np.pi * tf.cast(global_step, tf.float32) / total_steps)) - elif lr_decay_type == 'constant': - lr = initial_lr - else: - assert False, 'Unknown lr_decay_type : %s' % lr_decay_type - - if warmup_epochs: - logging.info('Learning rate warmup_epochs: %d', warmup_epochs) - warmup_steps = int(warmup_epochs * steps_per_epoch) - warmup_lr = ( - initial_lr * tf.cast(global_step, tf.float32) / tf.cast( - warmup_steps, tf.float32)) - lr = tf.cond(global_step < warmup_steps, lambda: warmup_lr, lambda: lr) - - return lr - - -def build_optimizer(learning_rate, - optimizer_name='rmsprop', - decay=0.9, - epsilon=0.001, - momentum=0.9): - """Build optimizer.""" - if optimizer_name == 'sgd': - logging.info('Using SGD optimizer') - optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate) - elif optimizer_name == 'momentum': - logging.info('Using Momentum optimizer') - optimizer = tf.train.MomentumOptimizer( - learning_rate=learning_rate, momentum=momentum) - elif optimizer_name == 'rmsprop': - logging.info('Using RMSProp optimizer') - optimizer = tf.train.RMSPropOptimizer(learning_rate, decay, momentum, - epsilon) - else: - logging.fatal('Unknown optimizer: %s', optimizer_name) - - return optimizer - - -class TpuBatchNormalization(tf.layers.BatchNormalization): - # class TpuBatchNormalization(tf.layers.BatchNormalization): - """Cross replica batch normalization.""" - - def __init__(self, fused=False, **kwargs): - if fused in (True, None): - raise ValueError('TpuBatchNormalization does not support fused=True.') - super(TpuBatchNormalization, self).__init__(fused=fused, **kwargs) - - def _cross_replica_average(self, t, num_shards_per_group): - """Calculates the average value of input tensor across TPU replicas.""" - num_shards = tpu_function.get_tpu_context().number_of_shards - group_assignment = None - if num_shards_per_group > 1: - if num_shards % num_shards_per_group != 0: - raise ValueError('num_shards: %d mod shards_per_group: %d, should be 0' - % (num_shards, num_shards_per_group)) - num_groups = num_shards // num_shards_per_group - group_assignment = [[ - x for x in range(num_shards) if x // num_shards_per_group == y - ] for y in range(num_groups)] - return tf.tpu.cross_replica_sum(t, group_assignment) / tf.cast( - num_shards_per_group, t.dtype) - - def _moments(self, inputs, reduction_axes, keep_dims): - """Compute the mean and variance: it overrides the original _moments.""" - shard_mean, shard_variance = super(TpuBatchNormalization, self)._moments( - inputs, reduction_axes, keep_dims=keep_dims) - - num_shards = tpu_function.get_tpu_context().number_of_shards or 1 - if num_shards <= 8: # Skip cross_replica for 2x2 or smaller slices. - num_shards_per_group = 1 - else: - num_shards_per_group = max(8, num_shards // 8) - logging.info('TpuBatchNormalization with num_shards_per_group %s', - num_shards_per_group) - if num_shards_per_group > 1: - # Compute variance using: Var[X]= E[X^2] - E[X]^2. - shard_square_of_mean = tf.math.square(shard_mean) - shard_mean_of_square = shard_variance + shard_square_of_mean - group_mean = self._cross_replica_average( - shard_mean, num_shards_per_group) - group_mean_of_square = self._cross_replica_average( - shard_mean_of_square, num_shards_per_group) - group_variance = group_mean_of_square - tf.math.square(group_mean) - return (group_mean, group_variance) - else: - return (shard_mean, shard_variance) - - -class BatchNormalization(tf.layers.BatchNormalization): - """Fixed default name of BatchNormalization to match TpuBatchNormalization.""" - - def __init__(self, name='tpu_batch_normalization', **kwargs): - super(BatchNormalization, self).__init__(name=name, **kwargs) - - -def drop_connect(inputs, is_training, survival_prob): - """Drop the entire conv with given survival probability.""" - # "Deep Networks with Stochastic Depth", https://arxiv.org/pdf/1603.09382.pdf - if not is_training: - return inputs - - # Compute tensor. - batch_size = tf.shape(inputs)[0] - random_tensor = survival_prob - random_tensor += tf.random_uniform([batch_size, 1, 1, 1], dtype=inputs.dtype) - binary_tensor = tf.floor(random_tensor) - # Unlike conventional way that multiply survival_prob at test time, here we - # divide survival_prob at training time, such that no addition compute is - # needed at test time. - output = tf.div(inputs, survival_prob) * binary_tensor - return output - - -def archive_ckpt(ckpt_eval, ckpt_objective, ckpt_path): - """Archive a checkpoint if the metric is better.""" - ckpt_dir, ckpt_name = os.path.split(ckpt_path) - - saved_objective_path = os.path.join(ckpt_dir, 'best_objective.txt') - saved_objective = float('-inf') - if tf.gfile.Exists(saved_objective_path): - with tf.gfile.GFile(saved_objective_path, 'r') as f: - saved_objective = float(f.read()) - if saved_objective > ckpt_objective: - logging.info('Ckpt %s is worse than %s', ckpt_objective, saved_objective) - return False - - filenames = tf.gfile.Glob(ckpt_path + '.*') - if filenames is None: - logging.info('No files to copy for checkpoint %s', ckpt_path) - return False - - # Clear the old folder. - dst_dir = os.path.join(ckpt_dir, 'archive') - if tf.gfile.Exists(dst_dir): - tf.gfile.DeleteRecursively(dst_dir) - tf.gfile.MakeDirs(dst_dir) - - # Write checkpoints. - for f in filenames: - dest = os.path.join(dst_dir, os.path.basename(f)) - tf.gfile.Copy(f, dest, overwrite=True) - ckpt_state = tf.train.generate_checkpoint_state_proto( - dst_dir, - model_checkpoint_path=ckpt_name, - all_model_checkpoint_paths=[ckpt_name]) - with tf.gfile.GFile(os.path.join(dst_dir, 'checkpoint'), 'w') as f: - f.write(str(ckpt_state)) - with tf.gfile.GFile(os.path.join(dst_dir, 'best_eval.txt'), 'w') as f: - f.write('%s' % ckpt_eval) - - # Update the best objective. - with tf.gfile.GFile(saved_objective_path, 'w') as f: - f.write('%f' % ckpt_objective) - - logging.info('Copying checkpoint %s to %s', ckpt_path, dst_dir) - return True - - -def get_ema_vars(): - """Get all exponential moving average (ema) variables.""" - ema_vars = tf.trainable_variables() + tf.get_collection('moving_vars') - for v in tf.global_variables(): - # We maintain mva for batch norm moving mean and variance as well. - if 'moving_mean' in v.name or 'moving_variance' in v.name: - ema_vars.append(v) - return list(set(ema_vars)) - - -class DepthwiseConv2D(tf.keras.layers.DepthwiseConv2D, tf.layers.Layer): - """Wrap keras DepthwiseConv2D to tf.layers.""" - - pass - - -class EvalCkptDriver(object): - """A driver for running eval inference. - - Attributes: - model_name: str. Model name to eval. - batch_size: int. Eval batch size. - image_size: int. Input image size, determined by model name. - num_classes: int. Number of classes, default to 1000 for ImageNet. - include_background_label: whether to include extra background label. - """ - - def __init__(self, - model_name, - batch_size=1, - image_size=224, - num_classes=1000, - include_background_label=False): - """Initialize internal variables.""" - self.model_name = model_name - self.batch_size = batch_size - self.num_classes = num_classes - self.include_background_label = include_background_label - self.image_size = image_size - - def restore_model(self, sess, ckpt_dir, enable_ema=True, export_ckpt=None): - """Restore variables from checkpoint dir.""" - sess.run(tf.global_variables_initializer()) - checkpoint = tf.train.latest_checkpoint(ckpt_dir) - if enable_ema: - ema = tf.train.ExponentialMovingAverage(decay=0.0) - ema_vars = get_ema_vars() - var_dict = ema.variables_to_restore(ema_vars) - ema_assign_op = ema.apply(ema_vars) - else: - var_dict = get_ema_vars() - ema_assign_op = None - - tf.train.get_or_create_global_step() - sess.run(tf.global_variables_initializer()) - saver = tf.train.Saver(var_dict, max_to_keep=1) - saver.restore(sess, checkpoint) - - if export_ckpt: - if ema_assign_op is not None: - sess.run(ema_assign_op) - saver = tf.train.Saver(max_to_keep=1, save_relative_paths=True) - saver.save(sess, export_ckpt) - - def build_model(self, features, is_training): - """Build model with input features.""" - del features, is_training - raise ValueError('Must be implemented by subclasses.') - - def get_preprocess_fn(self): - raise ValueError('Must be implemented by subclsses.') - - def build_dataset(self, filenames, labels, is_training): - """Build input dataset.""" - batch_drop_remainder = False - if 'condconv' in self.model_name and not is_training: - # CondConv layers can only be called with known batch dimension. Thus, we - # must drop all remaining examples that do not make up one full batch. - # To ensure all examples are evaluated, use a batch size that evenly - # divides the number of files. - batch_drop_remainder = True - num_files = len(filenames) - if num_files % self.batch_size != 0: - tf.logging.warn('Remaining examples in last batch are not being ' - 'evaluated.') - filenames = tf.constant(filenames) - labels = tf.constant(labels) - dataset = tf.data.Dataset.from_tensor_slices((filenames, labels)) - - def _parse_function(filename, label): - image_string = tf.read_file(filename) - preprocess_fn = self.get_preprocess_fn() - image_decoded = preprocess_fn( - image_string, is_training, image_size=self.image_size) - image = tf.cast(image_decoded, tf.float32) - return image, label - - dataset = dataset.map(_parse_function) - dataset = dataset.batch(self.batch_size, - drop_remainder=batch_drop_remainder) - - iterator = dataset.make_one_shot_iterator() - images, labels = iterator.get_next() - return images, labels - - def run_inference(self, - ckpt_dir, - image_files, - labels, - enable_ema=True, - export_ckpt=None): - """Build and run inference on the target images and labels.""" - label_offset = 1 if self.include_background_label else 0 - with tf.Graph().as_default(), tf.Session() as sess: - images, labels = self.build_dataset(image_files, labels, False) - probs = self.build_model(images, is_training=False) - if isinstance(probs, tuple): - probs = probs[0] - - self.restore_model(sess, ckpt_dir, enable_ema, export_ckpt) - - prediction_idx = [] - prediction_prob = [] - for _ in range(len(image_files) // self.batch_size): - out_probs = sess.run(probs) - idx = np.argsort(out_probs)[::-1] - prediction_idx.append(idx[:5] - label_offset) - prediction_prob.append([out_probs[pid] for pid in idx[:5]]) - - # Return the top 5 predictions (idx and prob) for each image. - return prediction_idx, prediction_prob - - def eval_example_images(self, - ckpt_dir, - image_files, - labels_map_file, - enable_ema=True, - export_ckpt=None): - """Eval a list of example images. - - Args: - ckpt_dir: str. Checkpoint directory path. - image_files: List[str]. A list of image file paths. - labels_map_file: str. The labels map file path. - enable_ema: enable expotential moving average. - export_ckpt: export ckpt folder. - - Returns: - A tuple (pred_idx, and pred_prob), where pred_idx is the top 5 prediction - index and pred_prob is the top 5 prediction probability. - """ - classes = json.loads(tf.gfile.Open(labels_map_file).read()) - pred_idx, pred_prob = self.run_inference( - ckpt_dir, image_files, [0] * len(image_files), enable_ema, export_ckpt) - for i in range(len(image_files)): - print('predicted class for image {}: '.format(image_files[i])) - for j, idx in enumerate(pred_idx[i]): - print(' -> top_{} ({:4.2f}%): {} '.format(j, pred_prob[i][j] * 100, - classes[str(idx)])) - return pred_idx, pred_prob - - def eval_imagenet(self, ckpt_dir, imagenet_eval_glob, - imagenet_eval_label, num_images, enable_ema, export_ckpt): - """Eval ImageNet images and report top1/top5 accuracy. - - Args: - ckpt_dir: str. Checkpoint directory path. - imagenet_eval_glob: str. File path glob for all eval images. - imagenet_eval_label: str. File path for eval label. - num_images: int. Number of images to eval: -1 means eval the whole - dataset. - enable_ema: enable expotential moving average. - export_ckpt: export checkpoint folder. - - Returns: - A tuple (top1, top5) for top1 and top5 accuracy. - """ - imagenet_val_labels = [int(i) for i in tf.gfile.GFile(imagenet_eval_label)] - imagenet_filenames = sorted(tf.gfile.Glob(imagenet_eval_glob)) - if num_images < 0: - num_images = len(imagenet_filenames) - image_files = imagenet_filenames[:num_images] - labels = imagenet_val_labels[:num_images] - - pred_idx, _ = self.run_inference( - ckpt_dir, image_files, labels, enable_ema, export_ckpt) - top1_cnt, top5_cnt = 0.0, 0.0 - for i, label in enumerate(labels): - top1_cnt += label in pred_idx[i][:1] - top5_cnt += label in pred_idx[i][:5] - if i % 100 == 0: - print('Step {}: top1_acc = {:4.2f}% top5_acc = {:4.2f}%'.format( - i, 100 * top1_cnt / (i + 1), 100 * top5_cnt / (i + 1))) - sys.stdout.flush() - top1, top5 = 100 * top1_cnt / num_images, 100 * top5_cnt / num_images - print('Final: top1_acc = {:4.2f}% top5_acc = {:4.2f}%'.format(top1, top5)) - return top1, top5 diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/rename.sh b/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/rename.sh deleted file mode 100644 index aa791139895b14ae1ffe00098cc55c56dfeca0fd..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/rename.sh +++ /dev/null @@ -1,5 +0,0 @@ -for i in 0 1 2 3 4 5 6 7 8 -do - X=$(sha256sum efficientnet-b${i}.pth | head -c 8) - mv efficientnet-b${i}.pth efficientnet-b${i}-${X}.pth -done diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/run.sh b/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/run.sh deleted file mode 100644 index f80d5f5d9b879ce98d180672c5abcb3dd9e569b9..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/convert_tf_to_pt/run.sh +++ /dev/null @@ -1,17 +0,0 @@ -python ../convert_tf_to_pt/load_tf_weights.py --model_name efficientnet-b0 --tf_checkpoint ../pretrained_tensorflow/efficientnet-b0/ --output_file ../pretrained_pytorch/efficientnet-b0.pth - -# python ../convert_tf_to_pt/load_tf_weights.py --model_name efficientnet-b1 --tf_checkpoint ../pretrained_tensorflow/efficientnet-b1/ --output_file ../pretrained_pytorch/efficientnet-b1.pth - -# python ../convert_tf_to_pt/load_tf_weights.py --model_name efficientnet-b2 --tf_checkpoint ../pretrained_tensorflow/efficientnet-b2/ --output_file ../pretrained_pytorch/efficientnet-b2.pth - -# python ../convert_tf_to_pt/load_tf_weights.py --model_name efficientnet-b3 --tf_checkpoint ../pretrained_tensorflow/efficientnet-b3/ --output_file ../pretrained_pytorch/efficientnet-b3.pth - -# python ../convert_tf_to_pt/load_tf_weights.py --model_name efficientnet-b4 --tf_checkpoint ../pretrained_tensorflow/efficientnet-b4/ --output_file ../pretrained_pytorch/efficientnet-b4.pth - -# python ../convert_tf_to_pt/load_tf_weights.py --model_name efficientnet-b5 --tf_checkpoint ../pretrained_tensorflow/efficientnet-b5/ --output_file ../pretrained_pytorch/efficientnet-b5.pth - -# python ../convert_tf_to_pt/load_tf_weights.py --model_name efficientnet-b6 --tf_checkpoint ../pretrained_tensorflow/efficientnet-b6/ --output_file ../pretrained_pytorch/efficientnet-b6.pth - -# python ../convert_tf_to_pt/load_tf_weights.py --model_name efficientnet-b7 --tf_checkpoint ../pretrained_tensorflow/efficientnet-b7/ --output_file ../pretrained_pytorch/efficientnet-b7.pth - -# python ../convert_tf_to_pt/load_tf_weights.py --model_name efficientnet-b8 --tf_checkpoint ../pretrained_tensorflow/efficientnet-b8/ --output_file ../pretrained_pytorch/efficientnet-b8.pth diff --git a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/pretrained_tensorflow/download.sh b/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/pretrained_tensorflow/download.sh deleted file mode 100644 index ba7d7befa85af7390b5626d23a6278636dbcdeb5..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/efficient_net/tf_to_pytorch/pretrained_tensorflow/download.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash - - -# This script accepts a single command-line argument, which specifies which model to download. -# Only the b0, b1, b2, and b3 models have been released, so your command must be one of them. - -# For example, to download efficientnet-b0, run: -# ./download.sh efficientnet-b0 -# And to download efficientnet-b3, run: -# ./download.sh efficientnet-b3 - -MODEL=$1 -wget https://storage.googleapis.com/cloud-tpu-checkpoints/efficientnet/advprop/${MODEL}.tar.gz -tar xvf ${MODEL}.tar.gz -rm ${MODEL}.tar.gz diff --git a/video/mintime/model_code/cross-efficient-vit/test.py b/video/mintime/model_code/cross-efficient-vit/test.py deleted file mode 100644 index 7f425df879e34657955973895b525dc160cccc86..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/test.py +++ /dev/null @@ -1,300 +0,0 @@ -import matplotlib.pyplot as plt -from sklearn import metrics -from sklearn.metrics import auc -from sklearn.metrics import accuracy_score -from sklearn.metrics import f1_score - -import os -import cv2 -import numpy as np -import torch -from torch import nn, einsum -from sklearn.metrics import plot_confusion_matrix - -from utils import get_method, check_correct, resize, shuffle_dataset, get_n_params -import torch.nn as nn -import torch.nn.functional as F -from functools import partial -from cross_efficient_vit import CrossEfficientViT -from utils import transform_frame -import glob -from os import cpu_count -import json -from multiprocessing.pool import Pool -from progress.bar import Bar -import pandas as pd -from tqdm import tqdm -from multiprocessing import Manager -from utils import custom_round, custom_video_round -from albumentations import Compose, RandomBrightnessContrast, \ - HorizontalFlip, FancyPCA, HueSaturationValue, OneOf, ToGray, \ - ShiftScaleRotate, ImageCompression, PadIfNeeded, GaussNoise, GaussianBlur, Rotate -from transforms.albu import IsotropicResize -import yaml -import argparse - -######################### -####### CONSTANTS ####### -######################### - -MODELS_DIR = "models" -BASE_DIR = "../../deep_fakes" -DATA_DIR = os.path.join(BASE_DIR, "dataset") -TEST_DIR = os.path.join(DATA_DIR, "test_set") -OUTPUT_DIR = os.path.join(MODELS_DIR, "tests") - -TEST_LABELS_PATH = os.path.join(BASE_DIR, "dataset/dfdc_test_labels.csv") - -######################### -####### UTILITIES ####### -######################### - -def save_confusion_matrix(confusion_matrix): - fig, ax = plt.subplots() - im = ax.imshow(confusion_matrix, cmap="Blues") - - threshold = im.norm(confusion_matrix.max())/2. - textcolors=("black", "white") - - ax.set_xticks(np.arange(2)) - ax.set_yticks(np.arange(2)) - ax.set_xticklabels(["original", "fake"]) - ax.set_yticklabels(["original", "fake"]) - - ax.tick_params(top=True, bottom=False, labeltop=True, labelbottom=False) - - for i in range(2): - for j in range(2): - text = ax.text(j, i, confusion_matrix[i, j], ha="center", va="center", - fontsize=12, color=textcolors[int(im.norm(confusion_matrix[i, j]) > threshold)]) - - fig.tight_layout() - plt.savefig(os.path.join(OUTPUT_DIR, "confusion.jpg")) - - -def save_roc_curves(correct_labels, preds, model_name, accuracy, loss, f1): - plt.figure(1) - plt.plot([0, 1], [0, 1], 'k--') - - fpr, tpr, th = metrics.roc_curve(correct_labels, preds) - - model_auc = auc(fpr, tpr) - - - plt.plot(fpr, tpr, label="Model_"+ model_name + ' (area = {:.3f})'.format(model_auc)) - - plt.xlabel('False positive rate') - plt.ylabel('True positive rate') - plt.title('ROC curve') - plt.legend(loc='best') - plt.savefig(os.path.join(OUTPUT_DIR, model_name + "_" + opt.dataset + "_acc" + str(accuracy*100) + "_loss"+str(loss)+"_f1"+str(f1)+".jpg")) - plt.clf() - - -def read_frames(video_path, videos): - - # Get the video label based on dataset selected - method = get_method(video_path, DATA_DIR) - if "Original" in video_path: - label = 0. - elif method == "DFDC": - test_df = pd.DataFrame(pd.read_csv(TEST_LABELS_PATH)) - video_folder_name = os.path.basename(video_path) - video_key = video_folder_name + ".mp4" - label = test_df.loc[test_df['filename'] == video_key]['label'].values[0] - else: - label = 1. - - - # Calculate the interval to extract the frames - frames_number = len(os.listdir(video_path)) - frames_interval = int(frames_number / opt.frames_per_video) - frames_paths = os.listdir(video_path) - frames_paths_dict = {} - - # Group the faces with the same index, reduce probabiity to skip some faces in the same video - - for path in frames_paths: - for i in range(0,3): # Consider up to 3 faces per video - if "_" + str(i) in path: - if i not in frames_paths_dict.keys(): - frames_paths_dict[i] = [path] - else: - frames_paths_dict[i].append(path) - - # Select only the frames at a certain interval - if frames_interval > 0: - for key in frames_paths_dict.keys(): - if len(frames_paths_dict) > frames_interval: - frames_paths_dict[key] = frames_paths_dict[key][::frames_interval] - - frames_paths_dict[key] = frames_paths_dict[key][:opt.frames_per_video] - - # Select N frames from the collected ones - video = {} - for key in frames_paths_dict.keys(): - for index, frame_image in enumerate(frames_paths_dict[key]): - transform = create_base_transform(config['model']['image-size']) - image = transform(image=cv2.imread(os.path.join(video_path, frame_image)))['image'] - if len(image) > 0: - if key in video: - video[key].append(image) - else: - video[key] = [image] - videos.append((video, label, video_path)) - - -def create_base_transform(size): - return Compose([ - IsotropicResize(max_side=size, interpolation_down=cv2.INTER_AREA, interpolation_up=cv2.INTER_CUBIC), - PadIfNeeded(min_height=size, min_width=size, border_mode=cv2.BORDER_CONSTANT), - ]) - -######################### -####### MODEL ####### -######################### - - -# Main body -if __name__ == "__main__": - - parser = argparse.ArgumentParser() - - parser.add_argument('--workers', default=10, type=int, - help='Number of data loader workers.') - parser.add_argument('--model_path', default='', type=str, metavar='PATH', - help='Path to model checkpoint (default: none).') - parser.add_argument('--dataset', type=str, default='DFDC', - help="Which dataset to use (Deepfakes|Face2Face|FaceShifter|FaceSwap|NeuralTextures|DFDC)") - parser.add_argument('--max_videos', type=int, default=-1, - help="Maximum number of videos to use for training (default: all).") - parser.add_argument('--config', type=str, - help="Which configuration to use. See into 'config' folder.") - parser.add_argument('--efficient_net', type=int, default=0, - help="Which EfficientNet version to use (0 or 7, default: 0)") - parser.add_argument('--frames_per_video', type=int, default=30, - help="How many equidistant frames for each video (default: 30)") - parser.add_argument('--batch_size', type=int, default=32, - help="Batch size (default: 32)") - - opt = parser.parse_args() - print(opt) - - with open(opt.config, 'r') as ymlfile: - config = yaml.safe_load(ymlfile) - - - if os.path.exists(opt.model_path): - model = CrossEfficientViT(config=config) - model.load_state_dict(torch.load(opt.model_path)) - model.eval() - model = model.cuda() - else: - print("No model found.") - exit() - - model_name = os.path.basename(opt.model_path) - - - ######################### - ####### EXECUTION ####### - ######################### - - - OUTPUT_DIR = os.path.join(OUTPUT_DIR, opt.dataset) - - if not os.path.exists(OUTPUT_DIR): - os.makedirs(OUTPUT_DIR) - - - - NUM_CLASSES = 1 - preds = [] - - mgr = Manager() - paths = [] - videos = mgr.list() - - if opt.dataset != "DFDC": - folders = ["Original", opt.dataset] - else: - folders = [opt.dataset] - - # Read all videos paths - for folder in folders: - method_folder = os.path.join(TEST_DIR, folder) - for index, video_folder in enumerate(os.listdir(method_folder)): - paths.append(os.path.join(method_folder, video_folder)) - - # Read faces - with Pool(processes=cpu_count()-1) as p: - with tqdm(total=len(paths)) as pbar: - for v in p.imap_unordered(partial(read_frames, videos=videos),paths): - pbar.update() - - video_names = np.asarray([row[2] for row in videos]) - correct_test_labels = np.asarray([row[1] for row in videos]) - videos = np.asarray([row[0] for row in videos]) - preds = [] - - - # Perform prediction - bar = Bar('Predicting', max=len(videos)) - - f = open(opt.dataset + "_" + model_name + "_labels.txt", "w+") - for index, video in enumerate(videos): - video_faces_preds = [] - video_name = video_names[index] - f.write(video_name) - for key in video: - faces_preds = [] - video_faces = video[key] - for i in range(0, len(video_faces), opt.batch_size): - faces = video_faces[i:i+opt.batch_size] - faces = torch.tensor(np.asarray(faces)) - if faces.shape[0] == 0: - continue - faces = np.transpose(faces, (0, 3, 1, 2)) - faces = faces.cuda().float() - - pred = model(faces) - - scaled_pred = [] - for idx, p in enumerate(pred): - scaled_pred.append(torch.sigmoid(p)) - faces_preds.extend(scaled_pred) - - current_faces_pred = sum(faces_preds)/len(faces_preds) - face_pred = current_faces_pred.cpu().detach().numpy()[0] - f.write(" " + str(face_pred)) - video_faces_preds.append(face_pred) - bar.next() - if len(video_faces_preds) > 1: - video_pred = custom_video_round(video_faces_preds) - else: - video_pred = video_faces_preds[0] - preds.append([video_pred]) - - f.write(" --> " + str(video_pred) + "(CORRECT: " + str(correct_test_labels[index]) + ")" +"\n") - - f.close() - bar.finish() - - - ######################### - ####### METRICS ####### - ######################### - - loss_fn = torch.nn.BCEWithLogitsLoss() - tensor_labels = torch.tensor([[float(label)] for label in correct_test_labels]) - tensor_preds = torch.tensor(preds) - - - loss = loss_fn(tensor_preds, tensor_labels).numpy() - - #accuracy = accuracy_score(np.asarray(preds).round(), correct_test_labels) # Classic way - accuracy = accuracy_score(custom_round(np.asarray(preds)), correct_test_labels) # Custom way - f1 = f1_score(correct_test_labels, custom_round(np.asarray(preds))) - print(model_name, "Test Accuracy:", accuracy, "Loss:", loss, "F1", f1) - save_roc_curves(correct_test_labels, preds, model_name, accuracy, loss, f1) - save_confusion_matrix(metrics.confusion_matrix(correct_test_labels,custom_round(np.asarray(preds)))) diff --git a/video/mintime/model_code/cross-efficient-vit/train.py b/video/mintime/model_code/cross-efficient-vit/train.py deleted file mode 100644 index bc0b6b0f1687f7a80029fac0cfba1832161387ec..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/train.py +++ /dev/null @@ -1,322 +0,0 @@ -import torch -from torch.utils.data import DataLoader, TensorDataset, Dataset -from einops import rearrange, repeat -from torch import nn, einsum -import torch.nn as nn -import torch.nn.functional as F -from random import random, randint, choice -from vit_pytorch import ViT -import numpy as np -import os -import json -from multiprocessing.pool import Pool -from functools import partial -from multiprocessing import Manager -from progress.bar import ChargingBar -from cross_efficient_vit import CrossEfficientViT -import uuid -from torch.utils.data import DataLoader, TensorDataset, Dataset -from sklearn.metrics import accuracy_score -import cv2 -from transforms.albu import IsotropicResize -import glob -import pandas as pd -from tqdm import tqdm -from utils import get_method, check_correct, resize, shuffle_dataset, get_n_params -from sklearn.utils.class_weight import compute_class_weight -from torch.optim import lr_scheduler -import collections -from deepfakes_dataset import DeepFakesDataset -import math -import yaml -import argparse - -BASE_DIR = '../../deep_fakes/' -DATA_DIR = os.path.join(BASE_DIR, "dataset") -TRAINING_DIR = os.path.join(DATA_DIR, "training_set") -VALIDATION_DIR = os.path.join(DATA_DIR, "validation_set") -TEST_DIR = os.path.join(DATA_DIR, "test_set") -MODELS_PATH = "models" -METADATA_PATH = os.path.join(BASE_DIR, "data/metadata") # Folder containing all training metadata for DFDC dataset -VALIDATION_LABELS_PATH = os.path.join(DATA_DIR, "dfdc_val_labels.csv") - - -def read_frames(video_path, train_dataset, validation_dataset): - - # Get the video label based on dataset selected - method = get_method(video_path, DATA_DIR) - if TRAINING_DIR in video_path: - if "Original" in video_path: - label = 0. - elif "DFDC" in video_path: - for json_path in glob.glob(os.path.join(METADATA_PATH, "*.json")): - with open(json_path, "r") as f: - metadata = json.load(f) - video_folder_name = os.path.basename(video_path) - video_key = video_folder_name + ".mp4" - if video_key in metadata.keys(): - item = metadata[video_key] - label = item.get("label", None) - if label == "FAKE": - label = 1. - else: - label = 0. - break - else: - label = None - else: - label = 1. - if label == None: - print("NOT FOUND", video_path) - else: - if "Original" in video_path: - label = 0. - elif "DFDC" in video_path: - val_df = pd.DataFrame(pd.read_csv(VALIDATION_LABELS_PATH)) - video_folder_name = os.path.basename(video_path) - video_key = video_folder_name + ".mp4" - label = val_df.loc[val_df['filename'] == video_key]['label'].values[0] - else: - label = 1. - - # Calculate the interval to extract the frames - frames_number = len(os.listdir(video_path)) - if label == 0: - min_video_frames = max(int(config['training']['frames-per-video'] * config['training']['rebalancing-real']),1) # Compensate unbalancing - else: - min_video_frames = max(int(config['training']['frames-per-video'] * config['training']['rebalancing-fake']),1) - - - - if VALIDATION_DIR in video_path: - min_video_frames = int(max(min_video_frames/8, 2)) - frames_interval = int(frames_number / min_video_frames) - frames_paths = os.listdir(video_path) - frames_paths_dict = {} - - # Group the faces with the same index, reduce probabiity to skip some faces in the same video - for path in frames_paths: - for i in range(0,1): - if "_" + str(i) in path: - if i not in frames_paths_dict.keys(): - frames_paths_dict[i] = [path] - else: - frames_paths_dict[i].append(path) - # Select only the frames at a certain interval - if frames_interval > 0: - for key in frames_paths_dict.keys(): - if len(frames_paths_dict) > frames_interval: - frames_paths_dict[key] = frames_paths_dict[key][::frames_interval] - - frames_paths_dict[key] = frames_paths_dict[key][:min_video_frames] - # Select N frames from the collected ones - for key in frames_paths_dict.keys(): - for index, frame_image in enumerate(frames_paths_dict[key]): - #image = transform(np.asarray(cv2.imread(os.path.join(video_path, frame_image)))) - image = cv2.imread(os.path.join(video_path, frame_image)) - if image is not None: - if TRAINING_DIR in video_path: - train_dataset.append((image, label)) - else: - validation_dataset.append((image, label)) - -# Main body -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument('--num_epochs', default=300, type=int, - help='Number of training epochs.') - parser.add_argument('--workers', default=10, type=int, - help='Number of data loader workers.') - parser.add_argument('--resume', default='', type=str, metavar='PATH', - help='Path to latest checkpoint (default: none).') - parser.add_argument('--dataset', type=str, default='All', - help="Which dataset to use (Deepfakes|Face2Face|FaceShifter|FaceSwap|NeuralTextures|All)") - parser.add_argument('--max_videos', type=int, default=-1, - help="Maximum number of videos to use for training (default: all).") - parser.add_argument('--config', type=str, - help="Which configuration to use. See into 'config' folder.") - parser.add_argument('--efficient_net', type=int, default=0, - help="Which EfficientNet version to use (0 or 7, default: 0)") - parser.add_argument('--patience', type=int, default=5, - help="How many epochs wait before stopping for validation loss not improving.") - - opt = parser.parse_args() - print(opt) - - with open(opt.config, 'r') as ymlfile: - config = yaml.safe_load(ymlfile) - - model = CrossEfficientViT(config=config) - model.train() - - optimizer = torch.optim.SGD(model.parameters(), lr=config['training']['lr'], weight_decay=config['training']['weight-decay']) - scheduler = lr_scheduler.StepLR(optimizer, step_size=config['training']['step-size'], gamma=config['training']['gamma']) - starting_epoch = 0 - if os.path.exists(opt.resume): - model.load_state_dict(torch.load(opt.resume)) - starting_epoch = int(opt.resume.split("checkpoint")[1].split("_")[0]) + 1 - else: - print("No checkpoint loaded.") - - - print("Model Parameters:", get_n_params(model)) - - #READ DATASET - if opt.dataset != "All": - folders = ["Original", opt.dataset] - else: - folders = ["Original", "DFDC", "Deepfakes", "Face2Face", "FaceShifter", "FaceSwap", "NeuralTextures"] - - sets = [TRAINING_DIR, VALIDATION_DIR] - - paths = [] - for dataset in sets: - for folder in folders: - subfolder = os.path.join(dataset, folder) - for index, video_folder_name in enumerate(os.listdir(subfolder)): - if index == opt.max_videos: - break - if os.path.isdir(os.path.join(subfolder, video_folder_name)): - paths.append(os.path.join(subfolder, video_folder_name)) - - - mgr = Manager() - train_dataset = mgr.list() - validation_dataset = mgr.list() - - with Pool(processes=10) as p: - with tqdm(total=len(paths)) as pbar: - for v in p.imap_unordered(partial(read_frames, train_dataset=train_dataset, validation_dataset=validation_dataset),paths): - pbar.update() - train_samples = len(train_dataset) - train_dataset = shuffle_dataset(train_dataset) - validation_samples = len(validation_dataset) - validation_dataset = shuffle_dataset(validation_dataset) - - # Print some useful statistics - print("Train images:", len(train_dataset), "Validation images:", len(validation_dataset)) - print("__TRAINING STATS__") - train_counters = collections.Counter(image[1] for image in train_dataset) - print(train_counters) - - class_weights = train_counters[0] / train_counters[1] - print("Weights", class_weights) - - print("__VALIDATION STATS__") - val_counters = collections.Counter(image[1] for image in validation_dataset) - print(val_counters) - print("___________________") - - loss_fn = torch.nn.BCEWithLogitsLoss(pos_weight=torch.tensor([class_weights])) - - # Create the data loaders - validation_labels = np.asarray([row[1] for row in validation_dataset]) - labels = np.asarray([row[1] for row in train_dataset]) - - train_dataset = DeepFakesDataset(np.asarray([row[0] for row in train_dataset]), labels, config['model']['image-size']) - dl = torch.utils.data.DataLoader(train_dataset, batch_size=config['training']['bs'], shuffle=True, sampler=None, - batch_sampler=None, num_workers=opt.workers, collate_fn=None, - pin_memory=False, drop_last=False, timeout=0, - worker_init_fn=None, prefetch_factor=2, - persistent_workers=False) - del train_dataset - - validation_dataset = DeepFakesDataset(np.asarray([row[0] for row in validation_dataset]), validation_labels, config['model']['image-size'], mode='validation') - val_dl = torch.utils.data.DataLoader(validation_dataset, batch_size=config['training']['bs'], shuffle=True, sampler=None, - batch_sampler=None, num_workers=opt.workers, collate_fn=None, - pin_memory=False, drop_last=False, timeout=0, - worker_init_fn=None, prefetch_factor=2, - persistent_workers=False) - del validation_dataset - - - model = model.cuda() - counter = 0 - not_improved_loss = 0 - previous_loss = math.inf - for t in range(starting_epoch, opt.num_epochs + 1): - if not_improved_loss == opt.patience: - break - counter = 0 - - total_loss = 0 - total_val_loss = 0 - - bar = ChargingBar('EPOCH #' + str(t), max=(len(dl)*config['training']['bs'])+len(val_dl)) - train_correct = 0 - positive = 0 - negative = 0 - for index, (images, labels) in enumerate(dl): - images = np.transpose(images, (0, 3, 1, 2)) - labels = labels.unsqueeze(1) - images = images.cuda() - - y_pred = model(images) - y_pred = y_pred.cpu() - loss = loss_fn(y_pred, labels) - - corrects, positive_class, negative_class = check_correct(y_pred, labels) - train_correct += corrects - positive += positive_class - negative += negative_class - optimizer.zero_grad() - - loss.backward() - - optimizer.step() - counter += 1 - total_loss += round(loss.item(), 2) - for i in range(config['training']['bs']): - bar.next() - - - if index%1200 == 0: - print("\nLoss: ", total_loss/counter, "Accuracy: ",train_correct/(counter*config['training']['bs']) ,"Train 0s: ", negative, "Train 1s:", positive) - - - val_counter = 0 - val_correct = 0 - val_positive = 0 - val_negative = 0 - - train_correct /= train_samples - total_loss /= counter - for index, (val_images, val_labels) in enumerate(val_dl): - - val_images = np.transpose(val_images, (0, 3, 1, 2)) - - val_images = val_images.cuda() - val_labels = val_labels.unsqueeze(1) - val_pred = model(val_images) - val_pred = val_pred.cpu() - val_loss = loss_fn(val_pred, val_labels) - total_val_loss += round(val_loss.item(), 2) - corrects, positive_class, negative_class = check_correct(val_pred, val_labels) - val_correct += corrects - val_positive += positive_class - val_negative += negative_class - val_counter += 1 - bar.next() - - scheduler.step() - bar.finish() - - - total_val_loss /= val_counter - val_correct /= validation_samples - if previous_loss <= total_val_loss: - print("Validation loss did not improved") - not_improved_loss += 1 - else: - not_improved_loss = 0 - - previous_loss = total_val_loss - print("#" + str(t) + "/" + str(opt.num_epochs) + " loss:" + - str(total_loss) + " accuracy:" + str(train_correct) +" val_loss:" + str(total_val_loss) + " val_accuracy:" + str(val_correct) + " val_0s:" + str(val_negative) + "/" + str(np.count_nonzero(validation_labels == 0)) + " val_1s:" + str(val_positive) + "/" + str(np.count_nonzero(validation_labels == 1))) - - - if not os.path.exists(MODELS_PATH): - os.makedirs(MODELS_PATH) - torch.save(model.state_dict(), os.path.join(MODELS_PATH, "efficientnet_checkpoint" + str(t) + "_" + opt.dataset)) - - diff --git a/video/mintime/model_code/cross-efficient-vit/transforms/albu.py b/video/mintime/model_code/cross-efficient-vit/transforms/albu.py deleted file mode 100644 index e08dc172ccd2db6a858ae9395699e45854f47212..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/transforms/albu.py +++ /dev/null @@ -1,102 +0,0 @@ -import random - -import cv2 -import numpy as np -from albumentations import DualTransform, ImageOnlyTransform -from albumentations.augmentations.functional import crop - - -def isotropically_resize_image(img, size, interpolation_down=cv2.INTER_AREA, interpolation_up=cv2.INTER_CUBIC): - h, w = img.shape[:2] - - if max(w, h) == size: - return img - if w > h: - scale = size / w - h = h * scale - w = size - else: - scale = size / h - w = w * scale - h = size - interpolation = interpolation_up if scale > 1 else interpolation_down - - img = img.astype('uint8') - resized = cv2.resize(img, (int(w), int(h)), interpolation=interpolation) - return resized - - -class IsotropicResize(DualTransform): - def __init__(self, max_side, interpolation_down=cv2.INTER_AREA, interpolation_up=cv2.INTER_CUBIC, - always_apply=False, p=1): - super(IsotropicResize, self).__init__(always_apply, p) - self.max_side = max_side - self.interpolation_down = interpolation_down - self.interpolation_up = interpolation_up - - def apply(self, img, interpolation_down=cv2.INTER_AREA, interpolation_up=cv2.INTER_CUBIC, **params): - return isotropically_resize_image(img, size=self.max_side, interpolation_down=interpolation_down, - interpolation_up=interpolation_up) - - def apply_to_mask(self, img, **params): - return self.apply(img, interpolation_down=cv2.INTER_NEAREST, interpolation_up=cv2.INTER_NEAREST, **params) - - def get_transform_init_args_names(self): - return ("max_side", "interpolation_down", "interpolation_up") - - -class Resize4xAndBack(ImageOnlyTransform): - def __init__(self, always_apply=False, p=0.5): - super(Resize4xAndBack, self).__init__(always_apply, p) - - def apply(self, img, **params): - h, w = img.shape[:2] - scale = random.choice([2, 4]) - img = cv2.resize(img, (w // scale, h // scale), interpolation=cv2.INTER_AREA) - img = cv2.resize(img, (w, h), - interpolation=random.choice([cv2.INTER_CUBIC, cv2.INTER_LINEAR, cv2.INTER_NEAREST])) - return img - - -class RandomSizedCropNonEmptyMaskIfExists(DualTransform): - - def __init__(self, min_max_height, w2h_ratio=[0.7, 1.3], always_apply=False, p=0.5): - super(RandomSizedCropNonEmptyMaskIfExists, self).__init__(always_apply, p) - - self.min_max_height = min_max_height - self.w2h_ratio = w2h_ratio - - def apply(self, img, x_min=0, x_max=0, y_min=0, y_max=0, **params): - cropped = crop(img, x_min, y_min, x_max, y_max) - return cropped - - @property - def targets_as_params(self): - return ["mask"] - - def get_params_dependent_on_targets(self, params): - mask = params["mask"] - mask_height, mask_width = mask.shape[:2] - crop_height = int(mask_height * random.uniform(self.min_max_height[0], self.min_max_height[1])) - w2h_ratio = random.uniform(*self.w2h_ratio) - crop_width = min(int(crop_height * w2h_ratio), mask_width - 1) - if mask.sum() == 0: - x_min = random.randint(0, mask_width - crop_width + 1) - y_min = random.randint(0, mask_height - crop_height + 1) - else: - mask = mask.sum(axis=-1) if mask.ndim == 3 else mask - non_zero_yx = np.argwhere(mask) - y, x = random.choice(non_zero_yx) - x_min = x - random.randint(0, crop_width - 1) - y_min = y - random.randint(0, crop_height - 1) - x_min = np.clip(x_min, 0, mask_width - crop_width) - y_min = np.clip(y_min, 0, mask_height - crop_height) - - x_max = x_min + crop_height - y_max = y_min + crop_width - y_max = min(mask_height, y_max) - x_max = min(mask_width, x_max) - return {"x_min": x_min, "x_max": x_max, "y_min": y_min, "y_max": y_max} - - def get_transform_init_args_names(self): - return "min_max_height", "height", "width", "w2h_ratio" \ No newline at end of file diff --git a/video/mintime/model_code/cross-efficient-vit/utils.py b/video/mintime/model_code/cross-efficient-vit/utils.py deleted file mode 100644 index 9f56891cb03ac324cab38ae76978275d9d51ba9e..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/cross-efficient-vit/utils.py +++ /dev/null @@ -1,85 +0,0 @@ -import cv2 -from albumentations import Compose, PadIfNeeded -from transforms.albu import IsotropicResize -import numpy as np -import os -import cv2 -import torch -from statistics import mean -def transform_frame(image, image_size): - transform_pipeline = Compose([ - IsotropicResize(max_side=image_size, interpolation_down=cv2.INTER_LINEAR, interpolation_up=cv2.INTER_LINEAR), - PadIfNeeded(min_height=image_size, min_width=image_size, border_mode=cv2.BORDER_REPLICATE) - ] - ) - return transform_pipeline(image=image)['image'] - - -def resize(image, image_size): - try: - return cv2.resize(image, dsize=(image_size, image_size)) - except: - return [] - -def custom_round(values): - result = [] - for value in values: - if value > 0.6: - result.append(1) - else: - result.append(0) - return np.asarray(result) - - - -def get_method(video, data_path): - methods = os.listdir(os.path.join(data_path, "manipulated_sequences")) - methods.extend(os.listdir(os.path.join(data_path, "original_sequences"))) - methods.append("DFDC") - methods.append("Original") - selected_method = "" - for method in methods: - if method in video: - selected_method = method - break - return selected_method - -def shuffle_dataset(dataset): - import random - random.seed(4) - random.shuffle(dataset) - return dataset - - -def get_n_params(model): - pp=0 - for p in list(model.parameters()): - nn=1 - for s in list(p.size()): - nn = nn*s - pp += nn - return pp - -def check_correct(preds, labels): - preds = preds.cpu() - labels = labels.cpu() - preds = [np.asarray(torch.sigmoid(pred).detach().numpy()).round() for pred in preds] - - correct = 0 - positive_class = 0 - negative_class = 0 - for i in range(len(labels)): - pred = int(preds[i]) - if labels[i] == pred: - correct += 1 - if pred == 1: - positive_class += 1 - else: - negative_class += 1 - return correct, positive_class, negative_class - -def custom_video_round(preds): - for pred_value in preds: - if pred_value > 0.55: - return pred_value - return mean(preds) diff --git a/video/mintime/model_code/csv/test.csv b/video/mintime/model_code/csv/test.csv deleted file mode 100644 index e108386c5f0b124cd922ce10f1216e27285de198..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/csv/test.csv +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7cc46d41ff9adfd0fd8cc2c76978c39afb9a2c41ee452ba10d29eab1f240e976 -size 1057929 diff --git a/video/mintime/model_code/csv/train.csv b/video/mintime/model_code/csv/train.csv deleted file mode 100644 index 1d9fd37be800b37762765251c897d19216b9b137..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/csv/train.csv +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b3c50e0031e5f100eb1e4b9e5b37eb8a18a852133ba61a9a5a4de7293d894e36 -size 10859496 diff --git a/video/mintime/model_code/csv/val.csv b/video/mintime/model_code/csv/val.csv deleted file mode 100644 index 2e669f16398c69d0f5aa8c2ad98e63804ddb8d10..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/csv/val.csv +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:749432545ddd35c6ce68225e2861eb488009572b6f98d9e91d1e52b80af0fc5b -size 1173388 diff --git a/video/mintime/model_code/deepfakes_dataset.py b/video/mintime/model_code/deepfakes_dataset.py deleted file mode 100644 index 210afac364f93648610d4976c38e6a1758c2d88e..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/deepfakes_dataset.py +++ /dev/null @@ -1,345 +0,0 @@ -# DeepFakesDataset class used for data loading -# In this step the identities are also refined and organized in order to fit into the available number of frames per video. -# The data augmentation is also applied to each face extracted from the video and several embeddings and masks are generated: -# 1. The Size Embedding, responsible to induct the information about face-frame area ratio of each face to the model. -# 2. The Temporal Positional Embedding, responsible to maintain a coherent spatial and temporal positional information of the input tokens -# 3. The Mask, responsible to make the model ignore the "empty faces" added to fill wholes in the input sequence, if occur -# 4. The Identity Mask, used to tell the model each face to which identity it corresponds - -import torch -from torch.utils.data import DataLoader, TensorDataset, Dataset -import cv2 -import random -import numpy as np -from datetime import datetime -import os -import magic -from albumentations import Cutout, CoarseDropout, RandomGamma, MedianBlur, ToSepia, RandomShadow, MultiplicativeNoise, RandomSunFlare, GlassBlur, RandomBrightness, MotionBlur, RandomRain, RGBShift, RandomFog, RandomContrast, Downscale, InvertImg, RandomContrast, ColorJitter, Compose, RandomBrightnessContrast, CLAHE, ISONoise, JpegCompression, HorizontalFlip, FancyPCA, HueSaturationValue, OneOf, ToGray, ShiftScaleRotate, ImageCompression, PadIfNeeded, GaussNoise, GaussianBlur, Rotate, Normalize, Resize -from PIL import Image -from transforms.albu import IsotropicResize -from concurrent.futures import ThreadPoolExecutor -from os import cpu_count -import re -import cv2 -from itertools import compress -from statistics import mean - - -ORIGINAL_VIDEOS_PATH = {"train": "../datasets/ForgeryNet/Training/video/train_video_release", "val": "../datasets/ForgeryNet/Training/video/train_video_release", "test": "../datasets/ForgeryNet/Validation/video/val_video_release"} -MODES = ["train", "val", "test"] -RANGE_SIZE = 5 -SIZE_EMB_DICT = [(1+i*RANGE_SIZE, (i+1)*RANGE_SIZE) if i != 0 else (0, RANGE_SIZE) for i in range(20)] - -class DeepFakesDataset(Dataset): - def __init__(self, videos_paths, labels, data_path, video_path, image_size, augmentation = None, multiclass_labels = None, save_attention_plots = False, mode = 'train', model = 0, num_frames = 8, max_identities = 3, num_patches=49, enable_identity_attention = True, identities_ordering = 0): - self.x = videos_paths - self.y = labels - self.multiclass_labels = multiclass_labels - self.save_attention_plots = save_attention_plots - self.data_path = data_path - self.video_path = video_path - self.image_size = image_size - if mode not in MODES: - raise Exception("Invalid dataloader mode.") - self.mode = mode - self.n_samples = len(videos_paths) - self.num_frames = num_frames - self.num_patches = num_patches - self.max_identities = max_identities - self.augmentation = augmentation - self.max_faces_per_identity = {1: [num_frames], - 2: [int(num_frames/2), int(num_frames/2)], - 3: [int(num_frames/3), int(num_frames/3), int(num_frames/4)], - 4: [int(num_frames/3), int(num_frames/3), int(num_frames/8), int(num_frames/8)]} - self.enable_identity_attention = enable_identity_attention - self.identities_ordering = identities_ordering - - def create_train_transforms(self, size, additional_targets, augmentation): - if augmentation == "min": - return Compose([ - OneOf([ - IsotropicResize(max_side=size, interpolation_down=cv2.INTER_AREA, interpolation_up=cv2.INTER_CUBIC), - IsotropicResize(max_side=size, interpolation_down=cv2.INTER_AREA, interpolation_up=cv2.INTER_LINEAR), - IsotropicResize(max_side=size, interpolation_down=cv2.INTER_LINEAR, interpolation_up=cv2.INTER_LINEAR), - ], p=1), - PadIfNeeded(min_height=size, min_width=size, border_mode=cv2.BORDER_CONSTANT), - Resize(height=size, width=size), - ImageCompression(quality_lower=60, quality_upper=100, p=0.2), - GaussNoise(p=0.3), - GaussianBlur(blur_limit=3, p=0.05), - HorizontalFlip(), - OneOf([RandomBrightnessContrast(), FancyPCA(), HueSaturationValue()], p=0.4), - ToGray(p=0.2), - ShiftScaleRotate(shift_limit=0.1, scale_limit=0.2, rotate_limit=5, border_mode=cv2.BORDER_CONSTANT, p=0.5), - ], additional_targets = additional_targets - ) - else: - return Compose([ - OneOf([ - IsotropicResize(max_side=size, interpolation_down=cv2.INTER_AREA, interpolation_up=cv2.INTER_CUBIC), - IsotropicResize(max_side=size, interpolation_down=cv2.INTER_AREA, interpolation_up=cv2.INTER_LINEAR), - IsotropicResize(max_side=size, interpolation_down=cv2.INTER_LINEAR, interpolation_up=cv2.INTER_LINEAR), - ], p=1), - PadIfNeeded(min_height=size, min_width=size, border_mode=cv2.BORDER_CONSTANT), - Resize(height=size, width=size), - ImageCompression(quality_lower=60, quality_upper=100, p=0.2), - OneOf([GaussianBlur(blur_limit=3), MedianBlur(), GlassBlur(), MotionBlur()], p=0.1), - OneOf([HorizontalFlip(), InvertImg()], p=0.5), - OneOf([RandomBrightnessContrast(), RandomContrast(), RandomBrightness(), FancyPCA(), HueSaturationValue()], p=0.5), - OneOf([RGBShift(), ColorJitter()], p=0.1), - OneOf([MultiplicativeNoise(), ISONoise(), GaussNoise()], p=0.3), - OneOf([Cutout(), CoarseDropout()], p=0.1), - OneOf([RandomFog(), RandomRain(), RandomSunFlare()], p=0.02), - RandomShadow(p=0.05), - RandomGamma(p=0.1), - CLAHE(p=0.05), - ToGray(p=0.2), - ToSepia(p=0.05), - ShiftScaleRotate(shift_limit=0.1, scale_limit=0.2, rotate_limit=5, border_mode=cv2.BORDER_CONSTANT, p=0.5), - ], additional_targets = additional_targets - ) - - def create_val_transform(self, size, additional_targets): - return Compose([ - IsotropicResize(max_side=size, interpolation_down=cv2.INTER_AREA, interpolation_up=cv2.INTER_CUBIC), - PadIfNeeded(min_height=size, min_width=size, border_mode=cv2.BORDER_CONSTANT), - Resize(height=size, width=size) - ], additional_targets = additional_targets - ) - - # Input the identity path and return a row with path, size and number of faces available - def get_identity_information(self, identity): - faces = [os.path.join(identity, face) for face in os.listdir(identity)] - try: - mean_side = mean([int(re.search('(\d+) x (\d+)', magic.from_file(face)).groups()[0]) for face in faces]) - except: - mean_side = 0 - - number_of_faces = len(faces) - return [identity, mean_side, number_of_faces] - - - # Returns the identities, size-based sorted, with the number of faces for each identity to be readed - def get_sorted_identities(self, video_path): - identities = [os.path.join(video_path, identity) for identity in os.listdir(video_path)] - sorted_identities = [] - discarded_faces = [] - for identity in identities: - if not os.path.isdir(identity): # The faces are not inside an identity folder but we save them to fill temporal wholes in identities if occurs - discarded_faces.append(identity) - continue - - # Sort faces based on temporal order - sorted_identities.append(self.get_identity_information(identity)) - - - # If no faces have been found, use the discarded faces - if len(sorted_identities) == 0: - sorted_identities.append(self.get_identity_information(os.path.dirname(discarded_faces[0]))) - discarded_faces = [] - - # Sort identities - if self.identities_ordering == 0: # Based on faces size - sorted_identities = sorted(sorted_identities, key=lambda x:x[1], reverse=True) - elif self.identities_ordering == 1: # Based on identities length - sorted_identities = sorted(sorted_identities, key=lambda x:x[2], reverse=True) - else: # Random shuffle - random.shuffle(sorted_identities) - - if len(sorted_identities) > self.max_identities: - sorted_identities = sorted_identities[:self.max_identities] - - # Adjust the identities list faces number - identities_number = len(sorted_identities) - available_additional_faces = [] - if identities_number > 1: - max_faces_per_identity = self.max_faces_per_identity[identities_number] - for i in range(identities_number): - if sorted_identities[i][2] < max_faces_per_identity[i] and i < identities_number - 1: - sorted_identities[i+1][2] += max_faces_per_identity[i] - sorted_identities[i][2] - available_additional_faces.append(0) - elif sorted_identities[i][2] > max_faces_per_identity[i]: - available_additional_faces.append(sorted_identities[i][2] - max_faces_per_identity[i]) - sorted_identities[i][2] = max_faces_per_identity[i] - else: - available_additional_faces.append(0) - - else: # If only one identity is in the video, all the frames are assigned to this identity - sorted_identities[0][2] = self.num_frames - available_additional_faces.append(0) - - # Check if we found enough faces to fullfill the input sequence, otherwise go back and add some faces from previous identities - input_sequence_length = sum(faces for _, _, faces in sorted_identities) - if input_sequence_length < self.num_frames: - for i in range(identities_number): - needed_faces = self.num_frames - input_sequence_length - if available_additional_faces[i] > 0: - added_faces = min(available_additional_faces[i], needed_faces) - sorted_identities[i][2] += added_faces - input_sequence_length += added_faces - if input_sequence_length == self.num_frames: - break - # If not enough faces have been found, add some "dummy" images in the last identity - if input_sequence_length < self.num_frames: - needed_faces = self.num_frames - input_sequence_length - sorted_identities[-1][2] += needed_faces - input_sequence_length += needed_faces - - return sorted_identities, discarded_faces - - - def __getitem__(self, index): - video_path = self.x[index] - video_path = os.path.join(self.data_path, video_path) - if self.mode not in video_path: - for mode in MODES: - if mode in video_path: - self.mode = mode - break - - video_id = video_path.split(self.mode + os.path.sep)[1] - - original_video_path = os.path.join(self.video_path, self.mode, video_id) - if ".mp4" not in original_video_path: - original_video_path += ".mp4" - if not os.path.exists(original_video_path) and self.mode == "val": - original_video_path = os.path.join(self.video_path, "train", video_id) - - - - if not os.path.exists(original_video_path): - raise Exception("Invalid video path for video.", original_video_path) - - - identities, discarded_faces = self.get_sorted_identities(video_path) - - mask = [] - last_range_end = 0 - sequence = [] - size_embeddings = [] - - images_frames = [] - for identity_index, identity in enumerate(identities): - identity_path = identity[0] - max_faces = identity[2] - identity_faces = [os.path.join(identity_path, face) for face in os.listdir(identity_path)] - - # If no faces were considered for a frame during clustering, probably it is inside the discarded faces - if identity_index == 0 and len(discarded_faces) > 0: - frames = [int(os.path.basename(image_path).split("_")[0]) for image_path in identity_faces] - discarded_frames = [int(os.path.basename(image_path).split("_")[0]) for image_path in discarded_faces] - missing_frames = list(set(discarded_frames) - set(frames)) - missing_faces = [discarded_faces[discarded_frames.index(missing_frame)] for missing_frame in missing_frames] - - if len(missing_faces) > 0: - identity_faces = identity_faces + missing_faces # Add the missing faces to the identity - - identity_faces = np.asarray(sorted(identity_faces, key=lambda x:int(os.path.basename(x).split("_")[0]))) - - # Select uniformly the frames in an alternate way - if len(identity_faces) > max_faces: - if index % 2: - idx = np.round(np.linspace(0, len(identity_faces) - 2, max_faces)).astype(int) - else: - idx = np.round(np.linspace(1, len(identity_faces) - 1, max_faces)).astype(int) - - identity_faces = identity_faces[idx] - - # Read all images files - identity_images = [] - capture = cv2.VideoCapture(original_video_path) - width = capture.get(3) - height = capture.get(4) - video_area = width*height/2 - identity_size_embeddings = [] - for image_index, image_path in enumerate(identity_faces): - # Read face image - image = cv2.imread(image_path) - - # Get face-frame area ratio for size embedding - face_area = image.shape[0] * image.shape[1] / 2 - ratio = int(face_area * 100 / video_area) - side_ranges = list(map(lambda a_: ratio in range(a_[0], a_[1] + 1), SIZE_EMB_DICT)) - identity_size_embeddings.append(np.where(side_ranges)[0][0]+1) - - # Read the frame number associated with the image in order to generate the correct temporal-positional embedding - frame = int(os.path.basename(image_path).split("_")[0]) - images_frames.append(frame) - - # Append the image to the list of readed images - identity_images.append(image) - - - # If the readed faces are less than max_faces we need to add empty images and generate the mask - if len(identity_images) < max_faces: - diff = max_faces - len(identity_size_embeddings) - identity_size_embeddings = np.concatenate((identity_size_embeddings, np.zeros(diff))) - identity_images.extend([np.zeros((self.image_size, self.image_size, 3), dtype=np.uint8) for i in range(diff)]) - try: - images_frames.extend([max(images_frames) for i in range(diff)]) - except: - print("Error", original_video_path) - images_frames.extend([0 for i in range(diff)]) - - if self.enable_identity_attention and len(identity_images) < max_faces: # Calculate attention only between faces of the same identity - mask.extend([1 if i < max_faces - diff else 0 for i in range(max_faces)]) - else: # Otherwise all the faces are valid - mask.extend([1 for i in range(max_faces)]) - - # Compose the size_embedding and sequence list - size_embeddings.extend(identity_size_embeddings) - sequence.extend(identity_images) - - # Transform the images for data augmentation, the same transformation is applied to all the faces in the same video - additional_targets_keys = ["image" + str(i) for i in range(self.num_frames)] - additional_targets_values = ["image" for i in range(self.num_frames)] - additional_targets = dict(zip(additional_targets_keys, additional_targets_values)) - - if self.mode == 'train': - transform = self.create_train_transforms(self.image_size, additional_targets, self.augmentation) - else: - transform = self.create_val_transform(self.image_size, additional_targets) - - if len(sequence) == 8: - transformed_images = transform(image=sequence[0], image1=sequence[1], image2=sequence[2], image3=sequence[3], image4=sequence[4], image5=sequence[5], image6=sequence[6], image7=sequence[7]) - elif len(sequence) == 16: - transformed_images = transform(image=sequence[0], image1=sequence[1], image2=sequence[2], image3=sequence[3], image4=sequence[4], image5=sequence[5], image6=sequence[6], image7=sequence[7], image8=sequence[8], image9=sequence[9], image10=sequence[10], image11=sequence[11], image12=sequence[12], image13=sequence[13], image14=sequence[14], image15=sequence[15]) - elif len(sequence) == 32: - transformed_images = transform(image=sequence[0], image1=sequence[1], image2=sequence[2], image3=sequence[3], image4=sequence[4], image5=sequence[5], image6=sequence[6], image7=sequence[7], image8=sequence[8], image9=sequence[9], image10=sequence[10], image11=sequence[11], image12=sequence[12], image13=sequence[13], image14=sequence[14], image15=sequence[15], image16=sequence[16], image17=sequence[17], image18=sequence[18], image19=sequence[19], image20=sequence[20], image21=sequence[21], image22=sequence[22], image23=sequence[23], image24=sequence[24], image25=sequence[25], image26=sequence[26], image27=sequence[27], image28=sequence[28], image29=sequence[29], image30=sequence[30], image31=sequence[31]) - else: - raise Exception("Invalid number of frames.") - - sequence = [transformed_images[key] for key in transformed_images] - - # Generate the identities_mask telling to the model which faces attend to an identity and which to another one - identities_mask = [] - last_range_end = 0 - for identity_index in range(len(identities)): - identity_mask = [True if i >= last_range_end and i < last_range_end + identities[identity_index][2] else False for i in range(0, self.num_frames)] - for k in range(identities[identity_index][2]): - identities_mask.append(identity_mask) - last_range_end += identities[identity_index][2] - - # Generate coherent temporal-positional embedding - images_frames_positions = {k: v+1 for v, k in enumerate(sorted(set(images_frames)))} - frame_positions = [images_frames_positions[frame] for frame in images_frames] - if self.num_patches is not None: - positions = [[i+1 for i in range(((frame_position-1)*self.num_patches), self.num_patches*(frame_position))] for frame_position in frame_positions] - positions = sum(positions, []) # Merge the lists - positions.insert(0,0) # Add CLS - tokens_per_identity = [(os.path.basename(identities[i][0]), identities[i][2]*self.num_patches + identities[i-1][2]*self.num_patches) if i > 0 else (os.path.basename(identities[i][0]), identities[i][2]*self.num_patches) for i in range(len(identities))] - else: - positions = [] - tokens_per_identity = [] - - if self.save_attention_plots == False: - tokens_per_identity = [] - - if self.multiclass_labels == None: - return torch.tensor(sequence).float(), torch.tensor(size_embeddings).int(), torch.tensor(mask).bool(), torch.tensor(identities_mask).bool(), torch.tensor(positions), self.y[index] - else: - return torch.tensor(sequence).float(), torch.tensor(size_embeddings).int(), torch.tensor(mask).bool(), torch.tensor(identities_mask).bool(), torch.tensor(positions), tokens_per_identity, self.y[index], self.multiclass_labels[index], video_id.replace("/", "_") - - - def __len__(self): - return self.n_samples diff --git a/video/mintime/model_code/environment.yml b/video/mintime/model_code/environment.yml deleted file mode 100644 index 7dce5868115488ae7b3a8f4feae1fa68e0d53712..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/environment.yml +++ /dev/null @@ -1,76 +0,0 @@ -name: mintime -channels: - - defaults -dependencies: - - _libgcc_mutex=0.1=main - - _openmp_mutex=5.1=1_gnu - - ca-certificates=2022.10.11=h06a4308_0 - - certifi=2022.9.24=py38h06a4308_0 - - ld_impl_linux-64=2.38=h1181459_1 - - libffi=3.4.2=h6a678d5_6 - - libgcc-ng=11.2.0=h1234567_1 - - libgomp=11.2.0=h1234567_1 - - libstdcxx-ng=11.2.0=h1234567_1 - - ncurses=6.3=h5eee18b_3 - - openssl=1.1.1s=h7f8727e_0 - - pip=22.3.1=py38h06a4308_0 - - python=3.8.15=h7a1cb2a_2 - - readline=8.2=h5eee18b_0 - - setuptools=65.5.0=py38h06a4308_0 - - sqlite=3.40.0=h5082296_0 - - tk=8.6.12=h1ccaba5_0 - - wheel=0.37.1=pyhd3eb1b0_0 - - xz=5.2.8=h5eee18b_0 - - zlib=1.2.13=h5eee18b_0 - - pip: - - albumentations==0.5.2 - - av==10.0.0 - - charset-normalizer==2.1.1 - - contourpy==1.0.6 - - cycler==0.11.0 - - efficientnet-pytorch==0.7.1 - - einops==0.6.0 - - facenet-pytorch==2.5.2 - - fonttools==4.38.0 - - fvcore==0.1.5.post20221213 - - idna==3.4 - - imageio==2.22.4 - - imgaug==0.4.0 - - iopath==0.1.10 - - joblib==1.2.0 - - kiwisolver==1.4.4 - - matplotlib==3.6.2 - - networkx==2.8.8 - - numpy==1.23.5 - - opencv-python==4.6.0.66 - - opencv-python-headless==4.6.0.66 - - packaging==22.0 - - parameterized==0.8.1 - - pillow==9.3.0 - - portalocker==2.6.0 - - pyparsing==3.0.9 - - python-dateutil==2.8.2 - - pytorchvideo==0.1.5 - - pywavelets==1.4.1 - - pyyaml==6.0 - - qudida==0.0.4 - - requests==2.28.1 - - scikit-image==0.19.3 - - scikit-learn==1.2.0 - - scipy==1.9.3 - - shapely==2.0.0 - - six==1.16.0 - - tabulate==0.9.0 - - termcolor==2.1.1 - - threadpoolctl==3.1.0 - - tifffile==2022.10.10 - - torch==1.9.0+cu111 - - torchaudio==0.9.0 - - torchsummary==1.5.1 - - torchvision==0.10.0+cu111 - - tqdm==4.64.1 - - typing-extensions==4.4.0 - - urllib3==1.26.13 - - yacs==0.1.8 -prefix: /home/coccomini/anaconda3/envs/mintime - diff --git a/video/mintime/model_code/examples/fake_1_face_0.mp4 b/video/mintime/model_code/examples/fake_1_face_0.mp4 deleted file mode 100644 index 8e7fc1287d74b0acb329687a97beacac75de987f..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/examples/fake_1_face_0.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:031a97b66097d4183361011ab2ae0157993127625ecd811b4c189f77b1d8b2e3 -size 487523 diff --git a/video/mintime/model_code/examples/fake_2_faces_0_miss.mp4 b/video/mintime/model_code/examples/fake_2_faces_0_miss.mp4 deleted file mode 100644 index 3351d72bcc7ed8a8df06af39e04ce61987cfebad..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/examples/fake_2_faces_0_miss.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e8bf68bac9f0a9e01d01878fa23b54f5e9034f15933ca7276a4bad7e1084efe5 -size 411752 diff --git a/video/mintime/model_code/examples/fake_2_faces_1.mp4 b/video/mintime/model_code/examples/fake_2_faces_1.mp4 deleted file mode 100644 index 3c8b46dd51f8eedbddd6be68149e7736acbb18b8..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/examples/fake_2_faces_1.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:73318061836c5ea0cbd0d7874d63d41807ab33c3ea8647d06e0dc336694d2580 -size 1072509 diff --git a/video/mintime/model_code/examples/fake_2_faces_2.mp4 b/video/mintime/model_code/examples/fake_2_faces_2.mp4 deleted file mode 100644 index 45d4eca8f8f0240ed52c781f3cc78dfab1b5704f..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/examples/fake_2_faces_2.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3dc22fee9d09e1d938762ce5e4903317ab38a83a164a8b37651492c3183b1327 -size 910210 diff --git a/video/mintime/model_code/examples/fake_N_faces_0.mp4 b/video/mintime/model_code/examples/fake_N_faces_0.mp4 deleted file mode 100644 index 81ed8cc4b0d6e801d2f956420ce9175416127fb7..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/examples/fake_N_faces_0.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:767a760c88269d22bcc89d072cfd828fd75167b944b47156fe43ad3449933e98 -size 1564304 diff --git a/video/mintime/model_code/examples/preds/fake_1_face_0.avi b/video/mintime/model_code/examples/preds/fake_1_face_0.avi deleted file mode 100644 index b332775f416e30d6de9ebdc6e5b1e897267844d6..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/examples/preds/fake_1_face_0.avi +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c4398e5dea69e1064271cc02951bae460f51fc29c392e07061c1be5df306c39d -size 5686 diff --git a/video/mintime/model_code/examples/preds/fake_2_faces_0_miss.avi b/video/mintime/model_code/examples/preds/fake_2_faces_0_miss.avi deleted file mode 100644 index 2366390cfa29cfd3549719d1860c4faedcf803a3..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/examples/preds/fake_2_faces_0_miss.avi +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0b872e87e0d32e5b5e2b170971c839d8e96580428dcb2f3001ca3336f98b29ad -size 770708 diff --git a/video/mintime/model_code/examples/preds/fake_2_faces_1.avi b/video/mintime/model_code/examples/preds/fake_2_faces_1.avi deleted file mode 100644 index 25177caad6b6a8d15e5a6d12f428fd2e33b52794..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/examples/preds/fake_2_faces_1.avi +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d39a24cc830bf1942de086168e41e7e1ab065feed8abc940db4169441afb49f8 -size 1672406 diff --git a/video/mintime/model_code/examples/preds/fake_2_faces_2.avi b/video/mintime/model_code/examples/preds/fake_2_faces_2.avi deleted file mode 100644 index b332775f416e30d6de9ebdc6e5b1e897267844d6..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/examples/preds/fake_2_faces_2.avi +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c4398e5dea69e1064271cc02951bae460f51fc29c392e07061c1be5df306c39d -size 5686 diff --git a/video/mintime/model_code/examples/preds/fake_N_faces_0.avi b/video/mintime/model_code/examples/preds/fake_N_faces_0.avi deleted file mode 100644 index c9dbbc7286397a5aa6597e82f2082c9ec007fd52..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/examples/preds/fake_N_faces_0.avi +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f427ea33d9e3c722ecd01cc1b2426f06e0975e16e3f2b68e9d3d06e75deb0f23 -size 3253954 diff --git a/video/mintime/model_code/examples/preds/fake_N_faces_0.mp4 b/video/mintime/model_code/examples/preds/fake_N_faces_0.mp4 deleted file mode 100644 index 67d362a454a3caed8f9e45ec6b893d340df9b052..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/examples/preds/fake_N_faces_0.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fc3ac3f0b024f41383df89000f8f8c5dbf5aaa167c0c27df8969b5e9e9d122df -size 3245322 diff --git a/video/mintime/model_code/examples/preds/pristine_1_face_0.avi b/video/mintime/model_code/examples/preds/pristine_1_face_0.avi deleted file mode 100644 index a8699624f7893ea3b4388c25404bd03ae2dc2e76..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/examples/preds/pristine_1_face_0.avi +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7dba357127c5232e9c1d9453a946735ba14a57c7de203c2c0773f8dbb4eba35d -size 2650242 diff --git a/video/mintime/model_code/examples/preds/pristine_2_faces_0.avi b/video/mintime/model_code/examples/preds/pristine_2_faces_0.avi deleted file mode 100644 index 32efc9055b421221385fa1da1e5f8ac6fe30f2d5..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/examples/preds/pristine_2_faces_0.avi +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cb4d3cfce5024107a368e858e44bfb69bf25e010fc92858b20f4e3a8d977564d -size 10179890 diff --git a/video/mintime/model_code/examples/pristine_1_face_0.mp4 b/video/mintime/model_code/examples/pristine_1_face_0.mp4 deleted file mode 100644 index c5282af4c425878e4e5472a02100cf206858663a..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/examples/pristine_1_face_0.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b0c031f57ff1e128eb2d7017b94ce35082395582ac16222a3e1ca5d424b95bc7 -size 1496490 diff --git a/video/mintime/model_code/examples/pristine_2_faces_0.mp4 b/video/mintime/model_code/examples/pristine_2_faces_0.mp4 deleted file mode 100644 index 285133419c459776e7753bd7bbc9256c87f50d7f..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/examples/pristine_2_faces_0.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7f3975eba6d156f03fcb95daac01dc3063d07a9d9da87f4fef43ff65985c94f3 -size 4843141 diff --git a/video/mintime/model_code/get_multi_identity_videos.py b/video/mintime/model_code/get_multi_identity_videos.py deleted file mode 100644 index eb813072a17fc14779356dff566ef33a39e097e9..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/get_multi_identity_videos.py +++ /dev/null @@ -1,31 +0,0 @@ -import os -import pandas as pd - -DATA_CSV = "../../datasets/dfdc_test_preview/test_videos_preview_labels.csv" -DATA_PATH = "../../datasets/dfdc_test_preview/faces" - - -col_names = ["video", "label"] -df_test = pd.read_csv(DATA_CSV, sep=' ', names=col_names) - -indexes_to_drop = [] -for index, row in df_test.iterrows(): - folders = os.listdir(os.path.join(DATA_PATH, row['video'])) - if len(folders) < 2: - indexes_to_drop.append(index) - else: - counter = 0 - for folder in folders: - if os.path.isdir(os.path.join(DATA_PATH, row['video'], folder)): - counter += 1 - if counter < 2: - indexes_to_drop.append(index) - -df_test.drop(df_test.index[indexes_to_drop], inplace=True) - - -df_test.to_csv("../../datasets/dfdc_test_preview/multi_identity_videos.csv") - -print(len(df_test)) - - diff --git a/video/mintime/model_code/images/attention_analysis.gif b/video/mintime/model_code/images/attention_analysis.gif deleted file mode 100644 index fe5e18965e3f56193da29785ffc32c5bf1928e17..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/images/attention_analysis.gif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:694b8c39c00ecf4b8c24d97c245953f849e3ecef86b152e8c50e29499bfff1e9 -size 804543 diff --git a/video/mintime/model_code/images/attention_calculations_multi_face.gif b/video/mintime/model_code/images/attention_calculations_multi_face.gif deleted file mode 100644 index 1618e5e9fdf08f78f2987a7449f75123ade3da4e..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/images/attention_calculations_multi_face.gif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:41fad0ef37f8e17c0aa85405d67eeae784007b049c89d164efb1347361e19cd6 -size 164966 diff --git a/video/mintime/model_code/images/baseline.gif b/video/mintime/model_code/images/baseline.gif deleted file mode 100644 index fac71cfc78d8475a2087252883858dc82d512406..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/images/baseline.gif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:198d96d245133ae9d1666f7be3e1bdef52116c2b3ea6b4e5424b7ea36fc0930d -size 421107 diff --git a/video/mintime/model_code/images/clustering_deepfake_global.gif b/video/mintime/model_code/images/clustering_deepfake_global.gif deleted file mode 100644 index d7d4646fb8d0063dde95dd51371f2e3f050c09f4..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/images/clustering_deepfake_global.gif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0b5050dd5f24febcda22e53bb66f0e147943a8a6a8f713a9b2152c4f435f92fe -size 1920461 diff --git a/video/mintime/model_code/images/divided_space_time_attention.gif b/video/mintime/model_code/images/divided_space_time_attention.gif deleted file mode 100644 index 576f3117dc2b7ae5a5d876d4b1fa26030bf8d632..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/images/divided_space_time_attention.gif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:df6bd077e690ac72cbe2c86d635d2c13a4374970eb992050597ec6b4f3def45b -size 233515 diff --git a/video/mintime/model_code/images/example_detection.gif b/video/mintime/model_code/images/example_detection.gif deleted file mode 100644 index 3395f20fcad6ab576e4a2282122b106d0558e1d5..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/images/example_detection.gif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a13437f032882138f2945056df40fdaa2ee1693ced5ba261c0074464841e3779 -size 10475624 diff --git a/video/mintime/model_code/images/faces.png b/video/mintime/model_code/images/faces.png deleted file mode 100644 index 0edcdbf93eca5ba569d79b605141bdf0a55ba15b..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/images/faces.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0216063536efb0567993c469aedfa4bc3872dc36bfed8a98fe0fe2a117ba271a -size 654060 diff --git a/video/mintime/model_code/images/forgery_net_ratios.png b/video/mintime/model_code/images/forgery_net_ratios.png deleted file mode 100644 index 06f23fdc0e956d105a64d4688c320f511697447b..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/images/forgery_net_ratios.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:85a84cb611abd416eba956c83ed9a64828dc777f877b3bcf3ed1a1aac1a7ef9b -size 19466 diff --git a/video/mintime/model_code/images/header.gif b/video/mintime/model_code/images/header.gif deleted file mode 100644 index da741d2ebb3d3817e6cec5baf2048f537f2d2a2c..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/images/header.gif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d70486aa9f18196d4e8f2ca2758f209f1df5a99327abf980dd035df95daf6b78 -size 29984134 diff --git a/video/mintime/model_code/images/identity_attention.gif b/video/mintime/model_code/images/identity_attention.gif deleted file mode 100644 index 53e090290120c1ab61f8fc50e844befd5b818bda..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/images/identity_attention.gif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:842c78879c3528b100a3f91a4138ea858da9ef4fe311508b99d702e68490a0e9 -size 1778572 diff --git a/video/mintime/model_code/images/masking.png b/video/mintime/model_code/images/masking.png deleted file mode 100644 index cb0f3e439a2309ff80e1e6b9f44d299be3ebc353..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/images/masking.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:df0328c4b46af354b39e5a6e45898c1bc8d90ae14cb6b4c9fba385404f70c9d0 -size 454264 diff --git a/video/mintime/model_code/images/multi_face_size_invariant_timesformer.gif b/video/mintime/model_code/images/multi_face_size_invariant_timesformer.gif deleted file mode 100644 index f6050d167ea2864c8ecf7b35b1d96ee53af755ac..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/images/multi_face_size_invariant_timesformer.gif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0d0afec1d0bace52279e0b5e034ffd8cd9bb9b5e04cf6d02071419bd45cda8ed -size 697312 diff --git a/video/mintime/model_code/images/resulting_distribution.png b/video/mintime/model_code/images/resulting_distribution.png deleted file mode 100644 index 8409b38087872b622c1056d42147f8d6ab6f4965..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/images/resulting_distribution.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:072bd272bd8acd22a438fd0a68649a0b0e5af3b271c5766a03a9acdd54033937 -size 17596 diff --git a/video/mintime/model_code/images/sequence_generation_0.gif b/video/mintime/model_code/images/sequence_generation_0.gif deleted file mode 100644 index 6a6e1eb1a76ca815fdc710e4355e78c08580df38..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/images/sequence_generation_0.gif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:46873a43ac6154f156467d4bd266caac05a2ab523a7511d92831e870aec423af -size 1464054 diff --git a/video/mintime/model_code/images/sequence_generation_1.gif b/video/mintime/model_code/images/sequence_generation_1.gif deleted file mode 100644 index 69ddc6148c1770c3ee31d546fcf696c1d25ec804..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/images/sequence_generation_1.gif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fe6b9e85508597e09d12e87301f0eea5ae7698d35f52d75564a6a13b61935851 -size 1422678 diff --git a/video/mintime/model_code/images/size_invariant_timesformer.gif b/video/mintime/model_code/images/size_invariant_timesformer.gif deleted file mode 100644 index 11d9d29001c34cf330d76de962a1a8e4cfec7df7..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/images/size_invariant_timesformer.gif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:988f48efb9f119a6136eb7360b4551692abc98e21211332833d666b22e5fa05d -size 920047 diff --git a/video/mintime/model_code/images/temporal_positional_embedding_0.gif b/video/mintime/model_code/images/temporal_positional_embedding_0.gif deleted file mode 100644 index 39163cbad4d6ce852df42b13b9a2026687917062..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/images/temporal_positional_embedding_0.gif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9474cf0cc5de663b6e65c22560dc7f9b1c7bd07b1eb746dfa3dbc4f1f13ebe81 -size 93290 diff --git a/video/mintime/model_code/images/temporal_positional_embedding_1.gif b/video/mintime/model_code/images/temporal_positional_embedding_1.gif deleted file mode 100644 index 7d9e4bbb1e3b400b6d2ad5b1a0897a023665ef0d..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/images/temporal_positional_embedding_1.gif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3beddcf6595370aea909d087106cbe008d9fb291bbb417d3a97d39fe61e15c63 -size 101555 diff --git a/video/mintime/model_code/model.txt b/video/mintime/model_code/model.txt deleted file mode 100644 index a8cb7936075b59c9bf3a2b09d4775de25c52f6c2..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/model.txt +++ /dev/null @@ -1,12 +0,0 @@ -Namespace(config='config/slowfast.yaml', data_path='../../datasets/ForgeryNet/faces', deepfake_methods=None, extractor_model=0, extractor_unfreeze_blocks=-1, extractor_weights='ImageNet', freeze_backbone=False, gpu_id=-1, logger_name='runs/train/slowfast', max_videos=-1, model=2, models_output_path='outputs/models/slowfast', num_epochs=30, patience=5, random_state=42, restore_epoch=False, resume='', train_list_file='../../datasets/ForgeryNet/faces/train_and_val.csv', validation_list_file='../../datasets/ForgeryNet/faces/test.csv', video_path='../../datasets/ForgeryNet/videos', workers=10) -Loaded pretrained weights for efficientnet-b0 -Train videos: 163909 Validation videos: 14495 -__TRAINING STATS__ -Counter({1: 90211, 0: 73698}) -Weights 0.8169513695669043 -__VALIDATION STATS__ -Counter({1: 8147, 0: 6348}) -___________________ -No checkpoint loaded for the model. - -Loss: 0.59 Accuracy: 0.75 Train 0s: 4 Train 1s: 4 Expected Time: 09:05:27.583136 diff --git a/video/mintime/model_code/models/baseline.py b/video/mintime/model_code/models/baseline.py deleted file mode 100644 index 9eedc0f0bec4d2e1458621d2fc4698385c62622a..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/baseline.py +++ /dev/null @@ -1,37 +0,0 @@ -import torch -from torch import nn -from einops import rearrange -from efficientnet_pytorch import EfficientNet -import cv2 -import re -import numpy as np -from torch import einsum -from random import randint - -import timm - -from torchsummary import summary - -class Baseline(nn.Module): - def __init__(self, config): - super().__init__() - - self.dim = config['model']['dim'] - self.mlp_dim = config['model']['mlp-dim'] - - self.num_classes = config['model']['num-classes'] - - self._avg_pooling = nn.AdaptiveAvgPool2d(1) - self.mlp_head = nn.Sequential( - nn.Linear(self.dim, self.mlp_dim), - nn.Linear(self.mlp_dim, self.num_classes) - ) - - for index, (name, param) in enumerate(self.mlp_head.named_parameters()): - param.requires_grad = True - - - def forward(self, x, mask=None): # (B x C x H x W) - x = self._avg_pooling(x) - x = x.flatten(start_dim=1) - return self.mlp_head(x) diff --git a/video/mintime/model_code/models/convolutional_timesformer_base.py b/video/mintime/model_code/models/convolutional_timesformer_base.py deleted file mode 100644 index 030408080c480ca1b0d35b074fcef8fc5cfad7a6..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/convolutional_timesformer_base.py +++ /dev/null @@ -1,240 +0,0 @@ -import torch -from torch import nn, einsum -import torch.nn.functional as F -from einops import rearrange, repeat - -from models.efficientnet.efficientnet_pytorch import EfficientNet - - -# helpers -def exists(val): - return val is not None - -# classes - -class PreNorm(nn.Module): - def __init__(self, dim, fn): - super().__init__() - self.fn = fn - self.norm = nn.LayerNorm(dim) - - def forward(self, x, *args, **kwargs): - x = self.norm(x) - return self.fn(x, *args, **kwargs) - -# time token shift - -def shift(t, amt): - if amt is 0: - return t - return F.pad(t, (0, 0, 0, 0, amt, -amt)) - -class PreTokenShift(nn.Module): - def __init__(self, frames, fn): - super().__init__() - self.frames = frames - self.fn = fn - - def forward(self, x, *args, **kwargs): - f, dim = self.frames, x.shape[-1] - cls_x, x = x[:, :1], x[:, 1:] - x = rearrange(x, 'b (f n) d -> b f n d', f = f) - - # shift along time frame before and after - - dim_chunk = (dim // 3) - chunks = x.split(dim_chunk, dim = -1) - chunks_to_shift, rest = chunks[:3], chunks[3:] - shifted_chunks = tuple(map(lambda args: shift(*args), zip(chunks_to_shift, (-1, 0, 1)))) - x = torch.cat((*shifted_chunks, *rest), dim = -1) - - x = rearrange(x, 'b f n d -> b (f n) d') - x = torch.cat((cls_x, x), dim = 1) - return self.fn(x, *args, **kwargs) - -# feedforward - -class GEGLU(nn.Module): - def forward(self, x): - x, gates = x.chunk(2, dim = -1) - return x * F.gelu(gates) - -class FeedForward(nn.Module): - def __init__(self, dim, mult = 4, dropout = 0.): - super().__init__() - self.net = nn.Sequential( - nn.Linear(dim, dim * mult * 2), - GEGLU(), - nn.Dropout(dropout), - nn.Linear(dim * mult, dim) - ) - - def forward(self, x): - return self.net(x) - -# attention - -def attn(q, k, v, mask = None): - sim = einsum('b i d, b j d -> b i j', q, k) - if exists(mask): - max_neg_value = -torch.finfo(sim.dtype).max - sim.masked_fill_(~mask, max_neg_value) - attn = sim.softmax(dim = -1) - out = einsum('b i j, b j d -> b i d', attn, v) - return out - -class Attention(nn.Module): - def __init__( - self, - dim, - dim_head = 64, - heads = 8, - dropout = 0. - ): - super().__init__() - self.heads = heads - self.scale = dim_head ** -0.5 - inner_dim = dim_head * heads - - self.to_qkv = nn.Linear(dim, inner_dim * 3, bias = False) - self.to_out = nn.Sequential( - nn.Linear(inner_dim, dim), - nn.Dropout(dropout) - ) - - def forward(self, x, einops_from, einops_to, mask = None, cls_mask = None, rot_emb = None, **einops_dims): - h = self.heads - q, k, v = self.to_qkv(x).chunk(3, dim = -1) - q, k, v = map(lambda t: rearrange(t, 'b n (h d) -> (b h) n d', h = h), (q, k, v)) - - q = q * self.scale - - # splice out classification token at index 1 - (cls_q, q_), (cls_k, k_), (cls_v, v_) = map(lambda t: (t[:, :1], t[:, 1:]), (q, k, v)) - - # let classification token attend to key / values of all patches across time and space - cls_out = attn(cls_q, k, v, mask = cls_mask) - # rearrange across time or space - q_, k_, v_ = map(lambda t: rearrange(t, f'{einops_from} -> {einops_to}', **einops_dims), (q_, k_, v_)) - - # expand cls token keys and values across time or space and concat - r = q_.shape[0] // cls_k.shape[0] - cls_k, cls_v = map(lambda t: repeat(t, 'b () d -> (b r) () d', r = r), (cls_k, cls_v)) - - k_ = torch.cat((cls_k, k_), dim = 1) - v_ = torch.cat((cls_v, v_), dim = 1) - - # attention - out = attn(q_, k_, v_, mask = mask) - - # merge back time or space - out = rearrange(out, f'{einops_to} -> {einops_from}', **einops_dims) - - # concat back the cls token - out = torch.cat((cls_out, out), dim = 1) - - # merge back the heads - out = rearrange(out, '(b h) n d -> b n (h d)', h = h) - - # combine heads out - return self.to_out(out) - -# main classes - -class ConvolutionalTimeSformer(nn.Module): - def __init__( - self, - *, - config - ): - - super().__init__() - self.dim = config['model']['dim'] - self.num_frames = config['model']['num-frames'] - self.num_patches = config['model']['num-patches'] - self.image_size = config['model']['image-size'] - self.num_classes = config['model']['num-classes'] - self.patch_size = config['model']['patch-size'] - self.channels = config['model']['channels'] - self.depth = config['model']['depth'] - self.heads = config['model']['heads'] - self.dim_head = config['model']['dim-head'] - self.attn_dropout = config['model']['attn-dropout'] - self.ff_dropout = config['model']['ff-dropout'] - self.shift_tokens = config['model']['shift-tokens'] - self.efficient_net_block = config['model']['efficient-net-block'] - self.efficient_net = EfficientNet.from_pretrained('efficientnet-b0') - - - for m in self.efficient_net.modules(): - m.requires_grad = False - self.efficient_net.eval() - - - num_positions = self.num_frames * self.num_patches - patch_dim = self.patch_size ** 2 - - - - self.to_patch_embedding = nn.Linear(patch_dim, self.dim) - self.cls_token = nn.Parameter(torch.randn(1, self.dim)) - - self.pos_emb = nn.Embedding(num_positions + 1, self.dim) - self.size_emb = nn.Embedding(num_positions + 1, self.dim) - - - self.layers = nn.ModuleList([]) - for _ in range(self.depth): - ff = FeedForward(self.dim, dropout = self.ff_dropout) - time_attn = Attention(self.dim, dim_head = self.dim_head, heads = self.heads, dropout = self.attn_dropout) - spatial_attn = Attention(self.dim, dim_head = self.dim_head, heads = self.heads, dropout = self.attn_dropout) - if self.shift_tokens: - time_attn, spatial_attn, ff = map(lambda t: PreTokenShift(num_frames, t), (time_attn, spatial_attn, ff)) - - time_attn, spatial_attn, ff = map(lambda t: PreNorm(self.dim, t), (time_attn, spatial_attn, ff)) - - self.layers.append(nn.ModuleList([time_attn, spatial_attn, ff])) - - self.to_out = nn.Sequential( - nn.LayerNorm(self.dim), - nn.Linear(self.dim, self.num_classes) - ) - - def forward(self, x, mask = None, size_embedding = None): - b, f, h, w, _, *_, device, p = *x.shape, x.device, self.patch_size - hp, wp = (h // p), (w // p) - n = hp * wp - - x = rearrange(x, 'b f h w c -> (b f) c h w') - x = self.efficient_net.extract_features_at_block(x, self.efficient_net_block) - x = rearrange(x, '(b f) c h w -> b f c h w', b = b, f = f) - x = rearrange(x, 'b f c h w -> b (f c) (h w)') - tokens = self.to_patch_embedding(x) - - # add cls token - cls_token = repeat(self.cls_token, 'n d -> b n d', b = b) - x = torch.cat((cls_token, tokens), dim = 1) - # positional embedding - x += self.pos_emb(torch.arange(x.shape[1], device = device)) - - # size embedding - size_embedding = repeat(size_embedding, 'b f -> p b f', p=self.num_patches) - size_embedding = rearrange(size_embedding, 'p b f -> (p b f)') - size_embedding = torch.cat((torch.tensor([0]), size_embedding), dim = 0) - size_embedding = size_embedding.to(device) - x += self.size_emb(size_embedding) - - # calculate masking for uneven number of frames - - frame_mask = None - cls_attn_mask = None - - # time and space attention - - for (time_attn, spatial_attn, ff) in self.layers: - x = time_attn(x, 'b (f n) d', '(b n) f d', n = n, mask = frame_mask, cls_mask = cls_attn_mask) + x - x = spatial_attn(x, 'b (f n) d', '(b f) n d', f = f, cls_mask = cls_attn_mask) + x - x = ff(x) + x - - cls_token = x[:, 0] - return self.to_out(cls_token) diff --git a/video/mintime/model_code/models/efficientnet/.gitignore b/video/mintime/model_code/models/efficientnet/.gitignore deleted file mode 100644 index 138cf12f29857624fbd24308bc8ab334419082d8..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/.gitignore +++ /dev/null @@ -1,127 +0,0 @@ -# Custom -tmp -*.pkl - -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# pyenv -.python-version - -# celery beat schedule file -celerybeat-schedule - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.DS_STORE - -# PyCharm -.idea* -*.xml - -# Custom -tensorflow/ -example/test* -*.pth* -examples/imagenet/data/ -!examples/imagenet/data/README.md -tmp -tf_to_pytorch/pretrained_tensorflow -!tf_to_pytorch/pretrained_tensorflow/download.sh -examples/imagenet/run.sh - - - diff --git a/video/mintime/model_code/models/efficientnet/LICENSE b/video/mintime/model_code/models/efficientnet/LICENSE deleted file mode 100644 index d645695673349e3947e8e5ae42332d0ac3164cd7..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/video/mintime/model_code/models/efficientnet/README.md b/video/mintime/model_code/models/efficientnet/README.md deleted file mode 100644 index 78f6fd41e7dd8d41c0064271849c65b0abbdd2d6..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/README.md +++ /dev/null @@ -1,269 +0,0 @@ -# EfficientNet PyTorch - -### Quickstart - -Install with `pip install efficientnet_pytorch` and load a pretrained EfficientNet with: -```python -from efficientnet_pytorch import EfficientNet -model = EfficientNet.from_pretrained('efficientnet-b0') -``` - -### Updates - -#### Update (April 2, 2021) - -The [EfficientNetV2 paper](https://arxiv.org/abs/2104.00298) has been released! I am working on implementing it as you read this :) - -About EfficientNetV2: -> EfficientNetV2 is a new family of convolutional networks that have faster training speed and better parameter efficiency than previous models. To develop this family of models, we use a combination of training-aware neural architecture search and scaling, to jointly optimize training speed and parameter efficiency. The models were searched from the search space enriched with new ops such as Fused-MBConv. - -Here is a comparison: -> - - -#### Update (Aug 25, 2020) - -This update adds: - * A new `include_top` (default: `True`) option ([#208](https://github.com/lukemelas/EfficientNet-PyTorch/pull/208)) - * Continuous testing with [sotabench](https://sotabench.com/) - * Code quality improvements and fixes ([#215](https://github.com/lukemelas/EfficientNet-PyTorch/pull/215) [#223](https://github.com/lukemelas/EfficientNet-PyTorch/pull/223)) - -#### Update (May 14, 2020) - -This update adds comprehensive comments and documentation (thanks to @workingcoder). - -#### Update (January 23, 2020) - -This update adds a new category of pre-trained model based on adversarial training, called _advprop_. It is important to note that the preprocessing required for the advprop pretrained models is slightly different from normal ImageNet preprocessing. As a result, by default, advprop models are not used. To load a model with advprop, use: -```python -model = EfficientNet.from_pretrained("efficientnet-b0", advprop=True) -``` -There is also a new, large `efficientnet-b8` pretrained model that is only available in advprop form. When using these models, replace ImageNet preprocessing code as follows: -```python -if advprop: # for models using advprop pretrained weights - normalize = transforms.Lambda(lambda img: img * 2.0 - 1.0) -else: - normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], - std=[0.229, 0.224, 0.225]) -``` -This update also addresses multiple other issues ([#115](https://github.com/lukemelas/EfficientNet-PyTorch/issues/115), [#128](https://github.com/lukemelas/EfficientNet-PyTorch/issues/128)). - -#### Update (October 15, 2019) - -This update allows you to choose whether to use a memory-efficient Swish activation. The memory-efficient version is chosen by default, but it cannot be used when exporting using PyTorch JIT. For this purpose, we have also included a standard (export-friendly) swish activation function. To switch to the export-friendly version, simply call `model.set_swish(memory_efficient=False)` after loading your desired model. This update addresses issues [#88](https://github.com/lukemelas/EfficientNet-PyTorch/pull/88) and [#89](https://github.com/lukemelas/EfficientNet-PyTorch/pull/89). - -#### Update (October 12, 2019) - -This update makes the Swish activation function more memory-efficient. It also addresses pull requests [#72](https://github.com/lukemelas/EfficientNet-PyTorch/pull/72), [#73](https://github.com/lukemelas/EfficientNet-PyTorch/pull/73), [#85](https://github.com/lukemelas/EfficientNet-PyTorch/pull/85), and [#86](https://github.com/lukemelas/EfficientNet-PyTorch/pull/86). Thanks to the authors of all the pull requests! - -#### Update (July 31, 2019) - -_Upgrade the pip package with_ `pip install --upgrade efficientnet-pytorch` - -The B6 and B7 models are now available. Additionally, _all_ pretrained models have been updated to use AutoAugment preprocessing, which translates to better performance across the board. Usage is the same as before: -```python -from efficientnet_pytorch import EfficientNet -model = EfficientNet.from_pretrained('efficientnet-b7') -``` - -#### Update (June 29, 2019) - -This update adds easy model exporting ([#20](https://github.com/lukemelas/EfficientNet-PyTorch/issues/20)) and feature extraction ([#38](https://github.com/lukemelas/EfficientNet-PyTorch/issues/38)). - - * [Example: Export to ONNX](#example-export) - * [Example: Extract features](#example-feature-extraction) - * Also: fixed a CUDA/CPU bug ([#32](https://github.com/lukemelas/EfficientNet-PyTorch/issues/32)) - -It is also now incredibly simple to load a pretrained model with a new number of classes for transfer learning: -```python -model = EfficientNet.from_pretrained('efficientnet-b1', num_classes=23) -``` - - -#### Update (June 23, 2019) - -The B4 and B5 models are now available. Their usage is identical to the other models: -```python -from efficientnet_pytorch import EfficientNet -model = EfficientNet.from_pretrained('efficientnet-b4') -``` - -### Overview -This repository contains an op-for-op PyTorch reimplementation of [EfficientNet](https://arxiv.org/abs/1905.11946), along with pre-trained models and examples. - -The goal of this implementation is to be simple, highly extensible, and easy to integrate into your own projects. This implementation is a work in progress -- new features are currently being implemented. - -At the moment, you can easily: - * Load pretrained EfficientNet models - * Use EfficientNet models for classification or feature extraction - * Evaluate EfficientNet models on ImageNet or your own images - -_Upcoming features_: In the next few days, you will be able to: - * Train new models from scratch on ImageNet with a simple command - * Quickly finetune an EfficientNet on your own dataset - * Export EfficientNet models for production - -### Table of contents -1. [About EfficientNet](#about-efficientnet) -2. [About EfficientNet-PyTorch](#about-efficientnet-pytorch) -3. [Installation](#installation) -4. [Usage](#usage) - * [Load pretrained models](#loading-pretrained-models) - * [Example: Classify](#example-classification) - * [Example: Extract features](#example-feature-extraction) - * [Example: Export to ONNX](#example-export) -6. [Contributing](#contributing) - -### About EfficientNet - -If you're new to EfficientNets, here is an explanation straight from the official TensorFlow implementation: - -EfficientNets are a family of image classification models, which achieve state-of-the-art accuracy, yet being an order-of-magnitude smaller and faster than previous models. We develop EfficientNets based on AutoML and Compound Scaling. In particular, we first use [AutoML Mobile framework](https://ai.googleblog.com/2018/08/mnasnet-towards-automating-design-of.html) to develop a mobile-size baseline network, named as EfficientNet-B0; Then, we use the compound scaling method to scale up this baseline to obtain EfficientNet-B1 to B7. - - - - - - -
- - - -
- -EfficientNets achieve state-of-the-art accuracy on ImageNet with an order of magnitude better efficiency: - - -* In high-accuracy regime, our EfficientNet-B7 achieves state-of-the-art 84.4% top-1 / 97.1% top-5 accuracy on ImageNet with 66M parameters and 37B FLOPS, being 8.4x smaller and 6.1x faster on CPU inference than previous best [Gpipe](https://arxiv.org/abs/1811.06965). - -* In middle-accuracy regime, our EfficientNet-B1 is 7.6x smaller and 5.7x faster on CPU inference than [ResNet-152](https://arxiv.org/abs/1512.03385), with similar ImageNet accuracy. - -* Compared with the widely used [ResNet-50](https://arxiv.org/abs/1512.03385), our EfficientNet-B4 improves the top-1 accuracy from 76.3% of ResNet-50 to 82.6% (+6.3%), under similar FLOPS constraint. - -### About EfficientNet PyTorch - -EfficientNet PyTorch is a PyTorch re-implementation of EfficientNet. It is consistent with the [original TensorFlow implementation](https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet), such that it is easy to load weights from a TensorFlow checkpoint. At the same time, we aim to make our PyTorch implementation as simple, flexible, and extensible as possible. - -If you have any feature requests or questions, feel free to leave them as GitHub issues! - -### Installation - -Install via pip: -```bash -pip install efficientnet_pytorch -``` - -Or install from source: -```bash -git clone https://github.com/lukemelas/EfficientNet-PyTorch -cd EfficientNet-Pytorch -pip install -e . -``` - -### Usage - -#### Loading pretrained models - -Load an EfficientNet: -```python -from efficientnet_pytorch import EfficientNet -model = EfficientNet.from_name('efficientnet-b0') -``` - -Load a pretrained EfficientNet: -```python -from efficientnet_pytorch import EfficientNet -model = EfficientNet.from_pretrained('efficientnet-b0') -``` - -Details about the models are below: - -| *Name* |*# Params*|*Top-1 Acc.*|*Pretrained?*| -|:-----------------:|:--------:|:----------:|:-----------:| -| `efficientnet-b0` | 5.3M | 76.3 | ✓ | -| `efficientnet-b1` | 7.8M | 78.8 | ✓ | -| `efficientnet-b2` | 9.2M | 79.8 | ✓ | -| `efficientnet-b3` | 12M | 81.1 | ✓ | -| `efficientnet-b4` | 19M | 82.6 | ✓ | -| `efficientnet-b5` | 30M | 83.3 | ✓ | -| `efficientnet-b6` | 43M | 84.0 | ✓ | -| `efficientnet-b7` | 66M | 84.4 | ✓ | - - -#### Example: Classification - -Below is a simple, complete example. It may also be found as a jupyter notebook in `examples/simple` or as a [Colab Notebook](https://colab.research.google.com/drive/1Jw28xZ1NJq4Cja4jLe6tJ6_F5lCzElb4). - -We assume that in your current directory, there is a `img.jpg` file and a `labels_map.txt` file (ImageNet class names). These are both included in `examples/simple`. - -```python -import json -from PIL import Image -import torch -from torchvision import transforms - -from efficientnet_pytorch import EfficientNet -model = EfficientNet.from_pretrained('efficientnet-b0') - -# Preprocess image -tfms = transforms.Compose([transforms.Resize(224), transforms.ToTensor(), - transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),]) -img = tfms(Image.open('img.jpg')).unsqueeze(0) -print(img.shape) # torch.Size([1, 3, 224, 224]) - -# Load ImageNet class names -labels_map = json.load(open('labels_map.txt')) -labels_map = [labels_map[str(i)] for i in range(1000)] - -# Classify -model.eval() -with torch.no_grad(): - outputs = model(img) - -# Print predictions -print('-----') -for idx in torch.topk(outputs, k=5).indices.squeeze(0).tolist(): - prob = torch.softmax(outputs, dim=1)[0, idx].item() - print('{label:<75} ({p:.2f}%)'.format(label=labels_map[idx], p=prob*100)) -``` - -#### Example: Feature Extraction - -You can easily extract features with `model.extract_features`: -```python -from efficientnet_pytorch import EfficientNet -model = EfficientNet.from_pretrained('efficientnet-b0') - -# ... image preprocessing as in the classification example ... -print(img.shape) # torch.Size([1, 3, 224, 224]) - -features = model.extract_features(img) -print(features.shape) # torch.Size([1, 1280, 7, 7]) -``` - -#### Example: Export to ONNX - -Exporting to ONNX for deploying to production is now simple: -```python -import torch -from efficientnet_pytorch import EfficientNet - -model = EfficientNet.from_pretrained('efficientnet-b1') -dummy_input = torch.randn(10, 3, 240, 240) - -model.set_swish(memory_efficient=False) -torch.onnx.export(model, dummy_input, "test-b1.onnx", verbose=True) -``` - -[Here](https://colab.research.google.com/drive/1rOAEXeXHaA8uo3aG2YcFDHItlRJMV0VP) is a Colab example. - - -#### ImageNet - -See `examples/imagenet` for details about evaluating on ImageNet. - -### Contributing - -If you find a bug, create a GitHub issue, or even better, submit a pull request. Similarly, if you have questions, simply post them as GitHub issues. - -I look forward to seeing what the community does with these models! diff --git a/video/mintime/model_code/models/efficientnet/efficientnet_pytorch/__init__.py b/video/mintime/model_code/models/efficientnet/efficientnet_pytorch/__init__.py deleted file mode 100644 index 2b529dfe3f61da71f7427fbeb7ab47710450d372..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/efficientnet_pytorch/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -__version__ = "0.7.1" -from .model import EfficientNet, VALID_MODELS -from .utils import ( - GlobalParams, - BlockArgs, - BlockDecoder, - efficientnet, - get_model_params, -) diff --git a/video/mintime/model_code/models/efficientnet/efficientnet_pytorch/model.py b/video/mintime/model_code/models/efficientnet/efficientnet_pytorch/model.py deleted file mode 100755 index 807b639da01671e0d96e227c61c2ad51f8f14000..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/efficientnet_pytorch/model.py +++ /dev/null @@ -1,444 +0,0 @@ -"""model.py - Model and module class for EfficientNet. - They are built to mirror those in the official TensorFlow implementation. -""" - -# Author: lukemelas (github username) -# Github repo: https://github.com/lukemelas/EfficientNet-PyTorch -# With adjustments and added comments by workingcoder (github username). -import numpy as np -import torch -from torch import nn -from torch.nn import functional as F -from .utils import ( - round_filters, - round_repeats, - drop_connect, - get_same_padding_conv2d, - get_model_params, - efficientnet_params, - load_pretrained_weights, - Swish, - MemoryEfficientSwish, - calculate_output_image_size -) - - -VALID_MODELS = ( - 'efficientnet-b0', 'efficientnet-b1', 'efficientnet-b2', 'efficientnet-b3', - 'efficientnet-b4', 'efficientnet-b5', 'efficientnet-b6', 'efficientnet-b7', - 'efficientnet-b8', - - # Support the construction of 'efficientnet-l2' without pretrained weights - 'efficientnet-l2' -) - - -class MBConvBlock(nn.Module): - """Mobile Inverted Residual Bottleneck Block. - Args: - block_args (namedtuple): BlockArgs, defined in utils.py. - global_params (namedtuple): GlobalParam, defined in utils.py. - image_size (tuple or list): [image_height, image_width]. - References: - [1] https://arxiv.org/abs/1704.04861 (MobileNet v1) - [2] https://arxiv.org/abs/1801.04381 (MobileNet v2) - [3] https://arxiv.org/abs/1905.02244 (MobileNet v3) - """ - - def __init__(self, block_args, global_params, image_size=None): - super().__init__() - self._block_args = block_args - self._bn_mom = 1 - global_params.batch_norm_momentum # pytorch's difference from tensorflow - self._bn_eps = global_params.batch_norm_epsilon - self.has_se = (self._block_args.se_ratio is not None) and (0 < self._block_args.se_ratio <= 1) - self.id_skip = block_args.id_skip # whether to use skip connection and drop connect - - # Expansion phase (Inverted Bottleneck) - inp = self._block_args.input_filters # number of input channels - oup = self._block_args.input_filters * self._block_args.expand_ratio # number of output channels - if self._block_args.expand_ratio != 1: - Conv2d = get_same_padding_conv2d(image_size=image_size) - self._expand_conv = Conv2d(in_channels=inp, out_channels=oup, kernel_size=1, bias=False) - self._bn0 = nn.BatchNorm2d(num_features=oup, momentum=self._bn_mom, eps=self._bn_eps) - # image_size = calculate_output_image_size(image_size, 1) <-- this wouldn't modify image_size - - # Depthwise convolution phase - k = self._block_args.kernel_size - s = self._block_args.stride - Conv2d = get_same_padding_conv2d(image_size=image_size) - self._depthwise_conv = Conv2d( - in_channels=oup, out_channels=oup, groups=oup, # groups makes it depthwise - kernel_size=k, stride=s, bias=False) - self._bn1 = nn.BatchNorm2d(num_features=oup, momentum=self._bn_mom, eps=self._bn_eps) - image_size = calculate_output_image_size(image_size, s) - - # Squeeze and Excitation layer, if desired - if self.has_se: - Conv2d = get_same_padding_conv2d(image_size=(1, 1)) - num_squeezed_channels = max(1, int(self._block_args.input_filters * self._block_args.se_ratio)) - self._se_reduce = Conv2d(in_channels=oup, out_channels=num_squeezed_channels, kernel_size=1) - self._se_expand = Conv2d(in_channels=num_squeezed_channels, out_channels=oup, kernel_size=1) - - # Pointwise convolution phase - final_oup = self._block_args.output_filters - Conv2d = get_same_padding_conv2d(image_size=image_size) - self._project_conv = Conv2d(in_channels=oup, out_channels=final_oup, kernel_size=1, bias=False) - self._bn2 = nn.BatchNorm2d(num_features=final_oup, momentum=self._bn_mom, eps=self._bn_eps) - self._swish = MemoryEfficientSwish() - - def forward(self, inputs, drop_connect_rate=None): - """MBConvBlock's forward function. - Args: - inputs (tensor): Input tensor. - drop_connect_rate (bool): Drop connect rate (float, between 0 and 1). - Returns: - Output of this block after processing. - """ - - # Expansion and Depthwise Convolution - x = inputs - if self._block_args.expand_ratio != 1: - x = self._expand_conv(inputs) - x = self._bn0(x) - x = self._swish(x) - - x = self._depthwise_conv(x) - x = self._bn1(x) - x = self._swish(x) - - # Squeeze and Excitation - if self.has_se: - x_squeezed = F.adaptive_avg_pool2d(x, 1) - x_squeezed = self._se_reduce(x_squeezed) - x_squeezed = self._swish(x_squeezed) - x_squeezed = self._se_expand(x_squeezed) - x = torch.sigmoid(x_squeezed) * x - - # Pointwise Convolution - x = self._project_conv(x) - x = self._bn2(x) - - # Skip connection and drop connect - input_filters, output_filters = self._block_args.input_filters, self._block_args.output_filters - if self.id_skip and self._block_args.stride == 1 and input_filters == output_filters: - # The combination of skip connection and drop connect brings about stochastic depth. - if drop_connect_rate: - x = drop_connect(x, p=drop_connect_rate, training=self.training) - x = x + inputs # skip connection - return x - - def set_swish(self, memory_efficient=True): - """Sets swish function as memory efficient (for training) or standard (for export). - Args: - memory_efficient (bool): Whether to use memory-efficient version of swish. - """ - self._swish = MemoryEfficientSwish() if memory_efficient else Swish() - - -class EfficientNet(nn.Module): - """EfficientNet model. - Most easily loaded with the .from_name or .from_pretrained methods. - Args: - blocks_args (list[namedtuple]): A list of BlockArgs to construct blocks. - global_params (namedtuple): A set of GlobalParams shared between blocks. - References: - [1] https://arxiv.org/abs/1905.11946 (EfficientNet) - Example: - >>> import torch - >>> from efficientnet.model import EfficientNet - >>> inputs = torch.rand(1, 3, 224, 224) - >>> model = EfficientNet.from_pretrained('efficientnet-b0') - >>> model.eval() - >>> outputs = model(inputs) - """ - - def __init__(self, blocks_args=None, global_params=None): - super().__init__() - assert isinstance(blocks_args, list), 'blocks_args should be a list' - assert len(blocks_args) > 0, 'block args must be greater than 0' - self._global_params = global_params - self._blocks_args = blocks_args - - # Batch norm parameters - bn_mom = 1 - self._global_params.batch_norm_momentum - bn_eps = self._global_params.batch_norm_epsilon - - # Get stem static or dynamic convolution depending on image size - image_size = global_params.image_size - Conv2d = get_same_padding_conv2d(image_size=image_size) - - # Stem - in_channels = 3 # rgb - out_channels = round_filters(32, self._global_params) # number of output channels - self._conv_stem = Conv2d(in_channels, out_channels, kernel_size=3, stride=2, bias=False) - self._bn0 = nn.BatchNorm2d(num_features=out_channels, momentum=bn_mom, eps=bn_eps) - image_size = calculate_output_image_size(image_size, 2) - - # Build blocks - self._blocks = nn.ModuleList([]) - for block_args in self._blocks_args: - - # Update block input and output filters based on depth multiplier. - block_args = block_args._replace( - input_filters=round_filters(block_args.input_filters, self._global_params), - output_filters=round_filters(block_args.output_filters, self._global_params), - num_repeat=round_repeats(block_args.num_repeat, self._global_params) - ) - - # The first block needs to take care of stride and filter size increase. - self._blocks.append(MBConvBlock(block_args, self._global_params, image_size=image_size)) - image_size = calculate_output_image_size(image_size, block_args.stride) - if block_args.num_repeat > 1: # modify block_args to keep same output size - block_args = block_args._replace(input_filters=block_args.output_filters, stride=1) - for _ in range(block_args.num_repeat - 1): - self._blocks.append(MBConvBlock(block_args, self._global_params, image_size=image_size)) - # image_size = calculate_output_image_size(image_size, block_args.stride) # stride = 1 - - # Head - in_channels = block_args.output_filters # output of final block - out_channels = round_filters(1280, self._global_params) - Conv2d = get_same_padding_conv2d(image_size=image_size) - self._conv_head = Conv2d(in_channels, out_channels, kernel_size=1, bias=False) - self._bn1 = nn.BatchNorm2d(num_features=out_channels, momentum=bn_mom, eps=bn_eps) - - # Final linear layer - self._avg_pooling = nn.AdaptiveAvgPool2d(1) - if self._global_params.include_top: - self._dropout = nn.Dropout(self._global_params.dropout_rate) - self._fc = nn.Linear(out_channels, self._global_params.num_classes) - - # set activation to memory efficient swish by default - self._swish = MemoryEfficientSwish() - - def set_swish(self, memory_efficient=True): - """Sets swish function as memory efficient (for training) or standard (for export). - Args: - memory_efficient (bool): Whether to use memory-efficient version of swish. - """ - self._swish = MemoryEfficientSwish() if memory_efficient else Swish() - for block in self._blocks: - block.set_swish(memory_efficient) - - def extract_endpoints(self, inputs): - """Use convolution layer to extract features - from reduction levels i in [1, 2, 3, 4, 5]. - Args: - inputs (tensor): Input tensor. - Returns: - Dictionary of last intermediate features - with reduction levels i in [1, 2, 3, 4, 5]. - Example: - >>> import torch - >>> from efficientnet.model import EfficientNet - >>> inputs = torch.rand(1, 3, 224, 224) - >>> model = EfficientNet.from_pretrained('efficientnet-b0') - >>> endpoints = model.extract_endpoints(inputs) - >>> print(endpoints['reduction_1'].shape) # torch.Size([1, 16, 112, 112]) - >>> print(endpoints['reduction_2'].shape) # torch.Size([1, 24, 56, 56]) - >>> print(endpoints['reduction_3'].shape) # torch.Size([1, 40, 28, 28]) - >>> print(endpoints['reduction_4'].shape) # torch.Size([1, 112, 14, 14]) - >>> print(endpoints['reduction_5'].shape) # torch.Size([1, 320, 7, 7]) - >>> print(endpoints['reduction_6'].shape) # torch.Size([1, 1280, 7, 7]) - """ - endpoints = dict() - - # Stem - x = self._swish(self._bn0(self._conv_stem(inputs))) - prev_x = x - - # Blocks - for idx, block in enumerate(self._blocks): - drop_connect_rate = self._global_params.drop_connect_rate - if drop_connect_rate: - drop_connect_rate *= float(idx) / len(self._blocks) # scale drop connect_rate - x = block(x, drop_connect_rate=drop_connect_rate) - if prev_x.size(2) > x.size(2): - endpoints['reduction_{}'.format(len(endpoints) + 1)] = prev_x - elif idx == len(self._blocks) - 1: - endpoints['reduction_{}'.format(len(endpoints) + 1)] = x - prev_x = x - - # Head - x = self._swish(self._bn1(self._conv_head(x))) - endpoints['reduction_{}'.format(len(endpoints) + 1)] = x - - return endpoints - - def forward(self, inputs): - """use convolution layer to extract feature . - Args: - inputs (tensor): Input tensor. - Returns: - Output of the final convolution - layer in the efficientnet model. - """ - # Stem - x = self._swish(self._bn0(self._conv_stem(inputs))) - - # Blocks - for idx, block in enumerate(self._blocks): - drop_connect_rate = self._global_params.drop_connect_rate - if drop_connect_rate: - drop_connect_rate *= float(idx) / len(self._blocks) # scale drop connect_rate - x = block(x, drop_connect_rate=drop_connect_rate) - - # Head - x = self._swish(self._bn1(self._conv_head(x))) - - return x - - def delete_blocks(self, limit): - ''' - tmp_blocks = nn.ModuleList([]) - for idx, block in enumerate(self._blocks): - if idx < limit: - tmp_blocks.append(self._blocks) - - self._blocks = tmp_blocks - ''' - self._blocks = self._blocks - - def extract_features_at_block(self, inputs, selected_block): - """use convolution layer to extract feature . - Args: - inputs (tensor): Input tensor. - Returns: - Output of the final convolution - layer in the efficientnet model. - """ - # Stem - x = self._swish(self._bn0(self._conv_stem(inputs))) - - # Blocks - for idx, block in enumerate(self._blocks): - drop_connect_rate = self._global_params.drop_connect_rate - if drop_connect_rate: - drop_connect_rate *= float(idx) / len(self._blocks) # scale drop connect_rate - x = block(x, drop_connect_rate=drop_connect_rate) - if idx > selected_block: - break - - # Head - if selected_block >= len(self._blocks): - x = self._swish(self._bn1(self._conv_head(x))) - - return x - - def predict(self, inputs): - """EfficientNet's forward function. - Calls extract_features to extract features, applies final linear layer, and returns logits. - Args: - inputs (tensor): Input tensor. - Returns: - Output of this model after processing. - """ - # Convolution layers - x = self.extract_features(inputs) - # Pooling and final linear layer - x = self._avg_pooling(x) - if self._global_params.include_top: - x = x.flatten(start_dim=1) - x = self._dropout(x) - x = self._fc(x) - return x - - @classmethod - def from_name(cls, model_name, in_channels=3, **override_params): - """Create an efficientnet model according to name. - Args: - model_name (str): Name for efficientnet. - in_channels (int): Input data's channel number. - override_params (other key word params): - Params to override model's global_params. - Optional key: - 'width_coefficient', 'depth_coefficient', - 'image_size', 'dropout_rate', - 'num_classes', 'batch_norm_momentum', - 'batch_norm_epsilon', 'drop_connect_rate', - 'depth_divisor', 'min_depth' - Returns: - An efficientnet model. - """ - cls._check_model_name_is_valid(model_name) - blocks_args, global_params = get_model_params(model_name, override_params) - model = cls(blocks_args, global_params) - model._change_in_channels(in_channels) - return model - - def load_matching_state_dict(self, state_dict): - - for name, param in state_dict.items(): - if "efficient_net" in name: - name = name.split("efficient_net.")[1] - - if name not in self.state_dict(): - continue - if isinstance(param, torch.nn.parameter.Parameter): - param = param.data - self.state_dict()[name].copy_(param) - - @classmethod - def from_pretrained(cls, model_name, weights_path=None, advprop=False, - in_channels=3, num_classes=1000, **override_params): - """Create an efficientnet model according to name. - Args: - model_name (str): Name for efficientnet. - weights_path (None or str): - str: path to pretrained weights file on the local disk. - None: use pretrained weights downloaded from the Internet. - advprop (bool): - Whether to load pretrained weights - trained with advprop (valid when weights_path is None). - in_channels (int): Input data's channel number. - num_classes (int): - Number of categories for classification. - It controls the output size for final linear layer. - override_params (other key word params): - Params to override model's global_params. - Optional key: - 'width_coefficient', 'depth_coefficient', - 'image_size', 'dropout_rate', - 'batch_norm_momentum', - 'batch_norm_epsilon', 'drop_connect_rate', - 'depth_divisor', 'min_depth' - Returns: - A pretrained efficientnet model. - """ - model = cls.from_name(model_name, num_classes=num_classes, **override_params) - load_pretrained_weights(model, model_name, weights_path=weights_path, - load_fc=(num_classes == 1000), advprop=advprop) - model._change_in_channels(in_channels) - return model - - @classmethod - def get_image_size(cls, model_name): - """Get the input image size for a given efficientnet model. - Args: - model_name (str): Name for efficientnet. - Returns: - Input image size (resolution). - """ - cls._check_model_name_is_valid(model_name) - _, _, res, _ = efficientnet_params(model_name) - return res - - @classmethod - def _check_model_name_is_valid(cls, model_name): - """Validates model name. - Args: - model_name (str): Name for efficientnet. - Returns: - bool: Is a valid name or not. - """ - if model_name not in VALID_MODELS: - raise ValueError('model_name should be one of: ' + ', '.join(VALID_MODELS)) - - def _change_in_channels(self, in_channels): - """Adjust model's first convolution layer to in_channels, if in_channels not equals 3. - Args: - in_channels (int): Input data's channel number. - """ - if in_channels != 3: - Conv2d = get_same_padding_conv2d(image_size=self._global_params.image_size) - out_channels = round_filters(32, self._global_params) - self._conv_stem = Conv2d(in_channels, out_channels, kernel_size=3, stride=2, bias=False) \ No newline at end of file diff --git a/video/mintime/model_code/models/efficientnet/efficientnet_pytorch/utils.py b/video/mintime/model_code/models/efficientnet/efficientnet_pytorch/utils.py deleted file mode 100755 index 826a62790920706d2c9f742fbe18386bf712ae4b..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/efficientnet_pytorch/utils.py +++ /dev/null @@ -1,616 +0,0 @@ -"""utils.py - Helper functions for building the model and for loading model parameters. - These helper functions are built to mirror those in the official TensorFlow implementation. -""" - -# Author: lukemelas (github username) -# Github repo: https://github.com/lukemelas/EfficientNet-PyTorch -# With adjustments and added comments by workingcoder (github username). - -import re -import math -import collections -from functools import partial -import torch -from torch import nn -from torch.nn import functional as F -from torch.utils import model_zoo - - -################################################################################ -# Help functions for model architecture -################################################################################ - -# GlobalParams and BlockArgs: Two namedtuples -# Swish and MemoryEfficientSwish: Two implementations of the method -# round_filters and round_repeats: -# Functions to calculate params for scaling model width and depth ! ! ! -# get_width_and_height_from_size and calculate_output_image_size -# drop_connect: A structural design -# get_same_padding_conv2d: -# Conv2dDynamicSamePadding -# Conv2dStaticSamePadding -# get_same_padding_maxPool2d: -# MaxPool2dDynamicSamePadding -# MaxPool2dStaticSamePadding -# It's an additional function, not used in EfficientNet, -# but can be used in other model (such as EfficientDet). - -# Parameters for the entire model (stem, all blocks, and head) -GlobalParams = collections.namedtuple('GlobalParams', [ - 'width_coefficient', 'depth_coefficient', 'image_size', 'dropout_rate', - 'num_classes', 'batch_norm_momentum', 'batch_norm_epsilon', - 'drop_connect_rate', 'depth_divisor', 'min_depth', 'include_top']) - -# Parameters for an individual model block -BlockArgs = collections.namedtuple('BlockArgs', [ - 'num_repeat', 'kernel_size', 'stride', 'expand_ratio', - 'input_filters', 'output_filters', 'se_ratio', 'id_skip']) - -# Set GlobalParams and BlockArgs's defaults -GlobalParams.__new__.__defaults__ = (None,) * len(GlobalParams._fields) -BlockArgs.__new__.__defaults__ = (None,) * len(BlockArgs._fields) - -# Swish activation function -if hasattr(nn, 'SiLU'): - Swish = nn.SiLU -else: - # For compatibility with old PyTorch versions - class Swish(nn.Module): - def forward(self, x): - return x * torch.sigmoid(x) - - -# A memory-efficient implementation of Swish function -class SwishImplementation(torch.autograd.Function): - @staticmethod - def forward(ctx, i): - result = i * torch.sigmoid(i) - ctx.save_for_backward(i) - return result - - @staticmethod - def backward(ctx, grad_output): - i = ctx.saved_tensors[0] - sigmoid_i = torch.sigmoid(i) - return grad_output * (sigmoid_i * (1 + i * (1 - sigmoid_i))) - - -class MemoryEfficientSwish(nn.Module): - def forward(self, x): - return SwishImplementation.apply(x) - - -def round_filters(filters, global_params): - """Calculate and round number of filters based on width multiplier. - Use width_coefficient, depth_divisor and min_depth of global_params. - - Args: - filters (int): Filters number to be calculated. - global_params (namedtuple): Global params of the model. - - Returns: - new_filters: New filters number after calculating. - """ - multiplier = global_params.width_coefficient - if not multiplier: - return filters - # TODO: modify the params names. - # maybe the names (width_divisor,min_width) - # are more suitable than (depth_divisor,min_depth). - divisor = global_params.depth_divisor - min_depth = global_params.min_depth - filters *= multiplier - min_depth = min_depth or divisor # pay attention to this line when using min_depth - # follow the formula transferred from official TensorFlow implementation - new_filters = max(min_depth, int(filters + divisor / 2) // divisor * divisor) - if new_filters < 0.9 * filters: # prevent rounding by more than 10% - new_filters += divisor - return int(new_filters) - - -def round_repeats(repeats, global_params): - """Calculate module's repeat number of a block based on depth multiplier. - Use depth_coefficient of global_params. - - Args: - repeats (int): num_repeat to be calculated. - global_params (namedtuple): Global params of the model. - - Returns: - new repeat: New repeat number after calculating. - """ - multiplier = global_params.depth_coefficient - if not multiplier: - return repeats - # follow the formula transferred from official TensorFlow implementation - return int(math.ceil(multiplier * repeats)) - - -def drop_connect(inputs, p, training): - """Drop connect. - - Args: - input (tensor: BCWH): Input of this structure. - p (float: 0.0~1.0): Probability of drop connection. - training (bool): The running mode. - - Returns: - output: Output after drop connection. - """ - assert 0 <= p <= 1, 'p must be in range of [0,1]' - - if not training: - return inputs - - batch_size = inputs.shape[0] - keep_prob = 1 - p - - # generate binary_tensor mask according to probability (p for 0, 1-p for 1) - random_tensor = keep_prob - random_tensor += torch.rand([batch_size, 1, 1, 1], dtype=inputs.dtype, device=inputs.device) - binary_tensor = torch.floor(random_tensor) - - output = inputs / keep_prob * binary_tensor - return output - - -def get_width_and_height_from_size(x): - """Obtain height and width from x. - - Args: - x (int, tuple or list): Data size. - - Returns: - size: A tuple or list (H,W). - """ - if isinstance(x, int): - return x, x - if isinstance(x, list) or isinstance(x, tuple): - return x - else: - raise TypeError() - - -def calculate_output_image_size(input_image_size, stride): - """Calculates the output image size when using Conv2dSamePadding with a stride. - Necessary for static padding. Thanks to mannatsingh for pointing this out. - - Args: - input_image_size (int, tuple or list): Size of input image. - stride (int, tuple or list): Conv2d operation's stride. - - Returns: - output_image_size: A list [H,W]. - """ - if input_image_size is None: - return None - image_height, image_width = get_width_and_height_from_size(input_image_size) - stride = stride if isinstance(stride, int) else stride[0] - image_height = int(math.ceil(image_height / stride)) - image_width = int(math.ceil(image_width / stride)) - return [image_height, image_width] - - -# Note: -# The following 'SamePadding' functions make output size equal ceil(input size/stride). -# Only when stride equals 1, can the output size be the same as input size. -# Don't be confused by their function names ! ! ! - -def get_same_padding_conv2d(image_size=None): - """Chooses static padding if you have specified an image size, and dynamic padding otherwise. - Static padding is necessary for ONNX exporting of models. - - Args: - image_size (int or tuple): Size of the image. - - Returns: - Conv2dDynamicSamePadding or Conv2dStaticSamePadding. - """ - if image_size is None: - return Conv2dDynamicSamePadding - else: - return partial(Conv2dStaticSamePadding, image_size=image_size) - - -class Conv2dDynamicSamePadding(nn.Conv2d): - """2D Convolutions like TensorFlow, for a dynamic image size. - The padding is operated in forward function by calculating dynamically. - """ - - # Tips for 'SAME' mode padding. - # Given the following: - # i: width or height - # s: stride - # k: kernel size - # d: dilation - # p: padding - # Output after Conv2d: - # o = floor((i+p-((k-1)*d+1))/s+1) - # If o equals i, i = floor((i+p-((k-1)*d+1))/s+1), - # => p = (i-1)*s+((k-1)*d+1)-i - - def __init__(self, in_channels, out_channels, kernel_size, stride=1, dilation=1, groups=1, bias=True): - super().__init__(in_channels, out_channels, kernel_size, stride, 0, dilation, groups, bias) - self.stride = self.stride if len(self.stride) == 2 else [self.stride[0]] * 2 - - def forward(self, x): - ih, iw = x.size()[-2:] - kh, kw = self.weight.size()[-2:] - sh, sw = self.stride - oh, ow = math.ceil(ih / sh), math.ceil(iw / sw) # change the output size according to stride ! ! ! - pad_h = max((oh - 1) * self.stride[0] + (kh - 1) * self.dilation[0] + 1 - ih, 0) - pad_w = max((ow - 1) * self.stride[1] + (kw - 1) * self.dilation[1] + 1 - iw, 0) - if pad_h > 0 or pad_w > 0: - x = F.pad(x, [pad_w // 2, pad_w - pad_w // 2, pad_h // 2, pad_h - pad_h // 2]) - return F.conv2d(x, self.weight, self.bias, self.stride, self.padding, self.dilation, self.groups) - - -class Conv2dStaticSamePadding(nn.Conv2d): - """2D Convolutions like TensorFlow's 'SAME' mode, with the given input image size. - The padding mudule is calculated in construction function, then used in forward. - """ - - # With the same calculation as Conv2dDynamicSamePadding - - def __init__(self, in_channels, out_channels, kernel_size, stride=1, image_size=None, **kwargs): - super().__init__(in_channels, out_channels, kernel_size, stride, **kwargs) - self.stride = self.stride if len(self.stride) == 2 else [self.stride[0]] * 2 - - # Calculate padding based on image size and save it - assert image_size is not None - ih, iw = (image_size, image_size) if isinstance(image_size, int) else image_size - kh, kw = self.weight.size()[-2:] - sh, sw = self.stride - oh, ow = math.ceil(ih / sh), math.ceil(iw / sw) - pad_h = max((oh - 1) * self.stride[0] + (kh - 1) * self.dilation[0] + 1 - ih, 0) - pad_w = max((ow - 1) * self.stride[1] + (kw - 1) * self.dilation[1] + 1 - iw, 0) - if pad_h > 0 or pad_w > 0: - self.static_padding = nn.ZeroPad2d((pad_w // 2, pad_w - pad_w // 2, - pad_h // 2, pad_h - pad_h // 2)) - else: - self.static_padding = nn.Identity() - - def forward(self, x): - x = self.static_padding(x) - x = F.conv2d(x, self.weight, self.bias, self.stride, self.padding, self.dilation, self.groups) - return x - - -def get_same_padding_maxPool2d(image_size=None): - """Chooses static padding if you have specified an image size, and dynamic padding otherwise. - Static padding is necessary for ONNX exporting of models. - - Args: - image_size (int or tuple): Size of the image. - - Returns: - MaxPool2dDynamicSamePadding or MaxPool2dStaticSamePadding. - """ - if image_size is None: - return MaxPool2dDynamicSamePadding - else: - return partial(MaxPool2dStaticSamePadding, image_size=image_size) - - -class MaxPool2dDynamicSamePadding(nn.MaxPool2d): - """2D MaxPooling like TensorFlow's 'SAME' mode, with a dynamic image size. - The padding is operated in forward function by calculating dynamically. - """ - - def __init__(self, kernel_size, stride, padding=0, dilation=1, return_indices=False, ceil_mode=False): - super().__init__(kernel_size, stride, padding, dilation, return_indices, ceil_mode) - self.stride = [self.stride] * 2 if isinstance(self.stride, int) else self.stride - self.kernel_size = [self.kernel_size] * 2 if isinstance(self.kernel_size, int) else self.kernel_size - self.dilation = [self.dilation] * 2 if isinstance(self.dilation, int) else self.dilation - - def forward(self, x): - ih, iw = x.size()[-2:] - kh, kw = self.kernel_size - sh, sw = self.stride - oh, ow = math.ceil(ih / sh), math.ceil(iw / sw) - pad_h = max((oh - 1) * self.stride[0] + (kh - 1) * self.dilation[0] + 1 - ih, 0) - pad_w = max((ow - 1) * self.stride[1] + (kw - 1) * self.dilation[1] + 1 - iw, 0) - if pad_h > 0 or pad_w > 0: - x = F.pad(x, [pad_w // 2, pad_w - pad_w // 2, pad_h // 2, pad_h - pad_h // 2]) - return F.max_pool2d(x, self.kernel_size, self.stride, self.padding, - self.dilation, self.ceil_mode, self.return_indices) - - -class MaxPool2dStaticSamePadding(nn.MaxPool2d): - """2D MaxPooling like TensorFlow's 'SAME' mode, with the given input image size. - The padding mudule is calculated in construction function, then used in forward. - """ - - def __init__(self, kernel_size, stride, image_size=None, **kwargs): - super().__init__(kernel_size, stride, **kwargs) - self.stride = [self.stride] * 2 if isinstance(self.stride, int) else self.stride - self.kernel_size = [self.kernel_size] * 2 if isinstance(self.kernel_size, int) else self.kernel_size - self.dilation = [self.dilation] * 2 if isinstance(self.dilation, int) else self.dilation - - # Calculate padding based on image size and save it - assert image_size is not None - ih, iw = (image_size, image_size) if isinstance(image_size, int) else image_size - kh, kw = self.kernel_size - sh, sw = self.stride - oh, ow = math.ceil(ih / sh), math.ceil(iw / sw) - pad_h = max((oh - 1) * self.stride[0] + (kh - 1) * self.dilation[0] + 1 - ih, 0) - pad_w = max((ow - 1) * self.stride[1] + (kw - 1) * self.dilation[1] + 1 - iw, 0) - if pad_h > 0 or pad_w > 0: - self.static_padding = nn.ZeroPad2d((pad_w // 2, pad_w - pad_w // 2, pad_h // 2, pad_h - pad_h // 2)) - else: - self.static_padding = nn.Identity() - - def forward(self, x): - x = self.static_padding(x) - x = F.max_pool2d(x, self.kernel_size, self.stride, self.padding, - self.dilation, self.ceil_mode, self.return_indices) - return x - - -################################################################################ -# Helper functions for loading model params -################################################################################ - -# BlockDecoder: A Class for encoding and decoding BlockArgs -# efficientnet_params: A function to query compound coefficient -# get_model_params and efficientnet: -# Functions to get BlockArgs and GlobalParams for efficientnet -# url_map and url_map_advprop: Dicts of url_map for pretrained weights -# load_pretrained_weights: A function to load pretrained weights - -class BlockDecoder(object): - """Block Decoder for readability, - straight from the official TensorFlow repository. - """ - - @staticmethod - def _decode_block_string(block_string): - """Get a block through a string notation of arguments. - - Args: - block_string (str): A string notation of arguments. - Examples: 'r1_k3_s11_e1_i32_o16_se0.25_noskip'. - - Returns: - BlockArgs: The namedtuple defined at the top of this file. - """ - assert isinstance(block_string, str) - - ops = block_string.split('_') - options = {} - for op in ops: - splits = re.split(r'(\d.*)', op) - if len(splits) >= 2: - key, value = splits[:2] - options[key] = value - - # Check stride - assert (('s' in options and len(options['s']) == 1) or - (len(options['s']) == 2 and options['s'][0] == options['s'][1])) - - return BlockArgs( - num_repeat=int(options['r']), - kernel_size=int(options['k']), - stride=[int(options['s'][0])], - expand_ratio=int(options['e']), - input_filters=int(options['i']), - output_filters=int(options['o']), - se_ratio=float(options['se']) if 'se' in options else None, - id_skip=('noskip' not in block_string)) - - @staticmethod - def _encode_block_string(block): - """Encode a block to a string. - - Args: - block (namedtuple): A BlockArgs type argument. - - Returns: - block_string: A String form of BlockArgs. - """ - args = [ - 'r%d' % block.num_repeat, - 'k%d' % block.kernel_size, - 's%d%d' % (block.strides[0], block.strides[1]), - 'e%s' % block.expand_ratio, - 'i%d' % block.input_filters, - 'o%d' % block.output_filters - ] - if 0 < block.se_ratio <= 1: - args.append('se%s' % block.se_ratio) - if block.id_skip is False: - args.append('noskip') - return '_'.join(args) - - @staticmethod - def decode(string_list): - """Decode a list of string notations to specify blocks inside the network. - - Args: - string_list (list[str]): A list of strings, each string is a notation of block. - - Returns: - blocks_args: A list of BlockArgs namedtuples of block args. - """ - assert isinstance(string_list, list) - blocks_args = [] - for block_string in string_list: - blocks_args.append(BlockDecoder._decode_block_string(block_string)) - return blocks_args - - @staticmethod - def encode(blocks_args): - """Encode a list of BlockArgs to a list of strings. - - Args: - blocks_args (list[namedtuples]): A list of BlockArgs namedtuples of block args. - - Returns: - block_strings: A list of strings, each string is a notation of block. - """ - block_strings = [] - for block in blocks_args: - block_strings.append(BlockDecoder._encode_block_string(block)) - return block_strings - - -def efficientnet_params(model_name): - """Map EfficientNet model name to parameter coefficients. - - Args: - model_name (str): Model name to be queried. - - Returns: - params_dict[model_name]: A (width,depth,res,dropout) tuple. - """ - params_dict = { - # Coefficients: width,depth,res,dropout - 'efficientnet-b0': (1.0, 1.0, 224, 0.2), - 'efficientnet-b1': (1.0, 1.1, 240, 0.2), - 'efficientnet-b2': (1.1, 1.2, 260, 0.3), - 'efficientnet-b3': (1.2, 1.4, 300, 0.3), - 'efficientnet-b4': (1.4, 1.8, 380, 0.4), - 'efficientnet-b5': (1.6, 2.2, 456, 0.4), - 'efficientnet-b6': (1.8, 2.6, 528, 0.5), - 'efficientnet-b7': (2.0, 3.1, 600, 0.5), - 'efficientnet-b8': (2.2, 3.6, 672, 0.5), - 'efficientnet-l2': (4.3, 5.3, 800, 0.5), - } - return params_dict[model_name] - - -def efficientnet(width_coefficient=None, depth_coefficient=None, image_size=None, - dropout_rate=0.2, drop_connect_rate=0.2, num_classes=1000, include_top=True): - """Create BlockArgs and GlobalParams for efficientnet model. - - Args: - width_coefficient (float) - depth_coefficient (float) - image_size (int) - dropout_rate (float) - drop_connect_rate (float) - num_classes (int) - - Meaning as the name suggests. - - Returns: - blocks_args, global_params. - """ - - # Blocks args for the whole model(efficientnet-b0 by default) - # It will be modified in the construction of EfficientNet Class according to model - blocks_args = [ - 'r1_k3_s11_e1_i32_o16_se0.25', - 'r2_k3_s22_e6_i16_o24_se0.25', - 'r2_k5_s22_e6_i24_o40_se0.25', - 'r3_k3_s22_e6_i40_o80_se0.25', - 'r3_k5_s11_e6_i80_o112_se0.25', - 'r4_k5_s22_e6_i112_o192_se0.25', - 'r1_k3_s11_e6_i192_o320_se0.25', - ] - blocks_args = BlockDecoder.decode(blocks_args) - - global_params = GlobalParams( - width_coefficient=width_coefficient, - depth_coefficient=depth_coefficient, - image_size=image_size, - dropout_rate=dropout_rate, - - num_classes=num_classes, - batch_norm_momentum=0.99, - batch_norm_epsilon=1e-3, - drop_connect_rate=drop_connect_rate, - depth_divisor=8, - min_depth=None, - include_top=include_top, - ) - - return blocks_args, global_params - - -def get_model_params(model_name, override_params): - """Get the block args and global params for a given model name. - - Args: - model_name (str): Model's name. - override_params (dict): A dict to modify global_params. - - Returns: - blocks_args, global_params - """ - if model_name.startswith('efficientnet'): - w, d, s, p = efficientnet_params(model_name) - # note: all models have drop connect rate = 0.2 - blocks_args, global_params = efficientnet( - width_coefficient=w, depth_coefficient=d, dropout_rate=p, image_size=s) - else: - raise NotImplementedError('model name is not pre-defined: {}'.format(model_name)) - if override_params: - # ValueError will be raised here if override_params has fields not included in global_params. - global_params = global_params._replace(**override_params) - return blocks_args, global_params - - -# train with Standard methods -# check more details in paper(EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks) -url_map = { - 'efficientnet-b0': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b0-355c32eb.pth', - 'efficientnet-b1': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b1-f1951068.pth', - 'efficientnet-b2': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b2-8bb594d6.pth', - 'efficientnet-b3': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b3-5fb5a3c3.pth', - 'efficientnet-b4': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b4-6ed6700e.pth', - 'efficientnet-b5': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b5-b6417697.pth', - 'efficientnet-b6': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b6-c76e70fd.pth', - 'efficientnet-b7': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnet-b7-dcc49843.pth', -} - -# train with Adversarial Examples(AdvProp) -# check more details in paper(Adversarial Examples Improve Image Recognition) -url_map_advprop = { - 'efficientnet-b0': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b0-b64d5a18.pth', - 'efficientnet-b1': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b1-0f3ce85a.pth', - 'efficientnet-b2': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b2-6e9d97e5.pth', - 'efficientnet-b3': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b3-cdd7c0f4.pth', - 'efficientnet-b4': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b4-44fb3a87.pth', - 'efficientnet-b5': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b5-86493f6b.pth', - 'efficientnet-b6': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b6-ac80338e.pth', - 'efficientnet-b7': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b7-4652b6dd.pth', - 'efficientnet-b8': 'https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/adv-efficientnet-b8-22a8fe65.pth', -} - -# TODO: add the petrained weights url map of 'efficientnet-l2' - - -def load_pretrained_weights(model, model_name, weights_path=None, load_fc=True, advprop=False, verbose=True): - """Loads pretrained weights from weights path or download using url. - - Args: - model (Module): The whole model of efficientnet. - model_name (str): Model name of efficientnet. - weights_path (None or str): - str: path to pretrained weights file on the local disk. - None: use pretrained weights downloaded from the Internet. - load_fc (bool): Whether to load pretrained weights for fc layer at the end of the model. - advprop (bool): Whether to load pretrained weights - trained with advprop (valid when weights_path is None). - """ - if isinstance(weights_path, str): - state_dict = torch.load(weights_path) - else: - # AutoAugment or Advprop (different preprocessing) - url_map_ = url_map_advprop if advprop else url_map - state_dict = model_zoo.load_url(url_map_[model_name]) - - if load_fc: - ret = model.load_state_dict(state_dict, strict=False) - assert not ret.missing_keys, 'Missing keys when loading pretrained weights: {}'.format(ret.missing_keys) - else: - state_dict.pop('_fc.weight') - state_dict.pop('_fc.bias') - ret = model.load_state_dict(state_dict, strict=False) - assert set(ret.missing_keys) == set( - ['_fc.weight', '_fc.bias']), 'Missing keys when loading pretrained weights: {}'.format(ret.missing_keys) - assert not ret.unexpected_keys, 'Missing keys when loading pretrained weights: {}'.format(ret.unexpected_keys) - - if verbose: - print('Loaded pretrained weights for {}'.format(model_name)) diff --git a/video/mintime/model_code/models/efficientnet/examples/imagenet/README.md b/video/mintime/model_code/models/efficientnet/examples/imagenet/README.md deleted file mode 100644 index fcafce33a6d3915a353eae374b55e72a3c1cc143..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/examples/imagenet/README.md +++ /dev/null @@ -1,23 +0,0 @@ -### Imagenet - -This is a preliminary directory for evaluating the model on ImageNet. It is adapted from the standard PyTorch Imagenet script. - -For now, only evaluation is supported, but I am currently building scripts to assist with training new models on Imagenet. - -The evaluation results are slightly different from the original TensorFlow repository, due to differences in data preprocessing. For example, with the current preprocessing, `efficientnet-b3` gives a top-1 accuracy of `80.8`, rather than `81.1` in the paper. I am working on porting the TensorFlow preprocessing into PyTorch to address this issue. - -To run on Imagenet, place your `train` and `val` directories in `data`. - -Example commands: -```bash -# Evaluate small EfficientNet on CPU -python main.py data -e -a 'efficientnet-b0' --pretrained -``` -```bash -# Evaluate medium EfficientNet on GPU -python main.py data -e -a 'efficientnet-b3' --pretrained --gpu 0 --batch-size 128 -``` -```bash -# Evaluate ResNet-50 for comparison -python main.py data -e -a 'resnet50' --pretrained --gpu 0 -``` diff --git a/video/mintime/model_code/models/efficientnet/examples/imagenet/main.py b/video/mintime/model_code/models/efficientnet/examples/imagenet/main.py deleted file mode 100644 index 6f8c92296952c76792024ce9cccc46b274fd9f55..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/examples/imagenet/main.py +++ /dev/null @@ -1,443 +0,0 @@ -""" -Evaluate on ImageNet. Note that at the moment, training is not implemented (I am working on it). -that being said, evaluation is working. -""" - -import argparse -import os -import random -import shutil -import time -import warnings -import PIL - -import torch -import torch.nn as nn -import torch.nn.parallel -import torch.backends.cudnn as cudnn -import torch.distributed as dist -import torch.optim -import torch.multiprocessing as mp -import torch.utils.data -import torch.utils.data.distributed -import torchvision.transforms as transforms -import torchvision.datasets as datasets -import torchvision.models as models - -from efficientnet_pytorch import EfficientNet - -parser = argparse.ArgumentParser(description='PyTorch ImageNet Training') -parser.add_argument('data', metavar='DIR', - help='path to dataset') -parser.add_argument('-a', '--arch', metavar='ARCH', default='resnet18', - help='model architecture (default: resnet18)') -parser.add_argument('-j', '--workers', default=4, type=int, metavar='N', - help='number of data loading workers (default: 4)') -parser.add_argument('--epochs', default=90, type=int, metavar='N', - help='number of total epochs to run') -parser.add_argument('--start-epoch', default=0, type=int, metavar='N', - help='manual epoch number (useful on restarts)') -parser.add_argument('-b', '--batch-size', default=256, type=int, - metavar='N', - help='mini-batch size (default: 256), this is the total ' - 'batch size of all GPUs on the current node when ' - 'using Data Parallel or Distributed Data Parallel') -parser.add_argument('--lr', '--learning-rate', default=0.1, type=float, - metavar='LR', help='initial learning rate', dest='lr') -parser.add_argument('--momentum', default=0.9, type=float, metavar='M', - help='momentum') -parser.add_argument('--wd', '--weight-decay', default=1e-4, type=float, - metavar='W', help='weight decay (default: 1e-4)', - dest='weight_decay') -parser.add_argument('-p', '--print-freq', default=10, type=int, - metavar='N', help='print frequency (default: 10)') -parser.add_argument('--resume', default='', type=str, metavar='PATH', - help='path to latest checkpoint (default: none)') -parser.add_argument('-e', '--evaluate', dest='evaluate', action='store_true', - help='evaluate model on validation set') -parser.add_argument('--pretrained', dest='pretrained', action='store_true', - help='use pre-trained model') -parser.add_argument('--world-size', default=-1, type=int, - help='number of nodes for distributed training') -parser.add_argument('--rank', default=-1, type=int, - help='node rank for distributed training') -parser.add_argument('--dist-url', default='tcp://224.66.41.62:23456', type=str, - help='url used to set up distributed training') -parser.add_argument('--dist-backend', default='nccl', type=str, - help='distributed backend') -parser.add_argument('--seed', default=None, type=int, - help='seed for initializing training. ') -parser.add_argument('--gpu', default=None, type=int, - help='GPU id to use.') -parser.add_argument('--image_size', default=224, type=int, - help='image size') -parser.add_argument('--advprop', default=False, action='store_true', - help='use advprop or not') -parser.add_argument('--multiprocessing-distributed', action='store_true', - help='Use multi-processing distributed training to launch ' - 'N processes per node, which has N GPUs. This is the ' - 'fastest way to use PyTorch for either single node or ' - 'multi node data parallel training') - -best_acc1 = 0 - - -def main(): - args = parser.parse_args() - - if args.seed is not None: - random.seed(args.seed) - torch.manual_seed(args.seed) - cudnn.deterministic = True - warnings.warn('You have chosen to seed training. ' - 'This will turn on the CUDNN deterministic setting, ' - 'which can slow down your training considerably! ' - 'You may see unexpected behavior when restarting ' - 'from checkpoints.') - - if args.gpu is not None: - warnings.warn('You have chosen a specific GPU. This will completely ' - 'disable data parallelism.') - - if args.dist_url == "env://" and args.world_size == -1: - args.world_size = int(os.environ["WORLD_SIZE"]) - - args.distributed = args.world_size > 1 or args.multiprocessing_distributed - - ngpus_per_node = torch.cuda.device_count() - if args.multiprocessing_distributed: - # Since we have ngpus_per_node processes per node, the total world_size - # needs to be adjusted accordingly - args.world_size = ngpus_per_node * args.world_size - # Use torch.multiprocessing.spawn to launch distributed processes: the - # main_worker process function - mp.spawn(main_worker, nprocs=ngpus_per_node, args=(ngpus_per_node, args)) - else: - # Simply call main_worker function - main_worker(args.gpu, ngpus_per_node, args) - - -def main_worker(gpu, ngpus_per_node, args): - global best_acc1 - args.gpu = gpu - - if args.gpu is not None: - print("Use GPU: {} for training".format(args.gpu)) - - if args.distributed: - if args.dist_url == "env://" and args.rank == -1: - args.rank = int(os.environ["RANK"]) - if args.multiprocessing_distributed: - # For multiprocessing distributed training, rank needs to be the - # global rank among all the processes - args.rank = args.rank * ngpus_per_node + gpu - dist.init_process_group(backend=args.dist_backend, init_method=args.dist_url, - world_size=args.world_size, rank=args.rank) - # create model - if 'efficientnet' in args.arch: # NEW - if args.pretrained: - model = EfficientNet.from_pretrained(args.arch, advprop=args.advprop) - print("=> using pre-trained model '{}'".format(args.arch)) - else: - print("=> creating model '{}'".format(args.arch)) - model = EfficientNet.from_name(args.arch) - - else: - if args.pretrained: - print("=> using pre-trained model '{}'".format(args.arch)) - model = models.__dict__[args.arch](pretrained=True) - else: - print("=> creating model '{}'".format(args.arch)) - model = models.__dict__[args.arch]() - - if args.distributed: - # For multiprocessing distributed, DistributedDataParallel constructor - # should always set the single device scope, otherwise, - # DistributedDataParallel will use all available devices. - if args.gpu is not None: - torch.cuda.set_device(args.gpu) - model.cuda(args.gpu) - # When using a single GPU per process and per - # DistributedDataParallel, we need to divide the batch size - # ourselves based on the total number of GPUs we have - args.batch_size = int(args.batch_size / ngpus_per_node) - args.workers = int(args.workers / ngpus_per_node) - model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[args.gpu]) - else: - model.cuda() - # DistributedDataParallel will divide and allocate batch_size to all - # available GPUs if device_ids are not set - model = torch.nn.parallel.DistributedDataParallel(model) - elif args.gpu is not None: - torch.cuda.set_device(args.gpu) - model = model.cuda(args.gpu) - else: - # DataParallel will divide and allocate batch_size to all available GPUs - if args.arch.startswith('alexnet') or args.arch.startswith('vgg'): - model.features = torch.nn.DataParallel(model.features) - model.cuda() - else: - model = torch.nn.DataParallel(model).cuda() - - # define loss function (criterion) and optimizer - criterion = nn.CrossEntropyLoss().cuda(args.gpu) - - optimizer = torch.optim.SGD(model.parameters(), args.lr, - momentum=args.momentum, - weight_decay=args.weight_decay) - - # optionally resume from a checkpoint - if args.resume: - if os.path.isfile(args.resume): - print("=> loading checkpoint '{}'".format(args.resume)) - checkpoint = torch.load(args.resume) - args.start_epoch = checkpoint['epoch'] - best_acc1 = checkpoint['best_acc1'] - if args.gpu is not None: - # best_acc1 may be from a checkpoint from a different GPU - best_acc1 = best_acc1.to(args.gpu) - model.load_state_dict(checkpoint['state_dict']) - optimizer.load_state_dict(checkpoint['optimizer']) - print("=> loaded checkpoint '{}' (epoch {})" - .format(args.resume, checkpoint['epoch'])) - else: - print("=> no checkpoint found at '{}'".format(args.resume)) - - cudnn.benchmark = True - - # Data loading code - traindir = os.path.join(args.data, 'train') - valdir = os.path.join(args.data, 'val') - if args.advprop: - normalize = transforms.Lambda(lambda img: img * 2.0 - 1.0) - else: - normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], - std=[0.229, 0.224, 0.225]) - - if 'efficientnet' in args.arch: - image_size = EfficientNet.get_image_size(args.arch) - else: - image_size = args.image_size - - train_dataset = datasets.ImageFolder( - traindir, - transforms.Compose([ - transforms.RandomResizedCrop(image_size), - transforms.RandomHorizontalFlip(), - transforms.ToTensor(), - normalize, - ])) - - if args.distributed: - train_sampler = torch.utils.data.distributed.DistributedSampler(train_dataset) - else: - train_sampler = None - - train_loader = torch.utils.data.DataLoader( - train_dataset, batch_size=args.batch_size, shuffle=(train_sampler is None), - num_workers=args.workers, pin_memory=True, sampler=train_sampler) - - val_transforms = transforms.Compose([ - transforms.Resize(image_size, interpolation=PIL.Image.BICUBIC), - transforms.CenterCrop(image_size), - transforms.ToTensor(), - normalize, - ]) - print('Using image size', image_size) - - val_loader = torch.utils.data.DataLoader( - datasets.ImageFolder(valdir, val_transforms), - batch_size=args.batch_size, shuffle=False, - num_workers=args.workers, pin_memory=True) - - if args.evaluate: - res = validate(val_loader, model, criterion, args) - with open('res.txt', 'w') as f: - print(res, file=f) - return - - for epoch in range(args.start_epoch, args.epochs): - if args.distributed: - train_sampler.set_epoch(epoch) - adjust_learning_rate(optimizer, epoch, args) - - # train for one epoch - train(train_loader, model, criterion, optimizer, epoch, args) - - # evaluate on validation set - acc1 = validate(val_loader, model, criterion, args) - - # remember best acc@1 and save checkpoint - is_best = acc1 > best_acc1 - best_acc1 = max(acc1, best_acc1) - - if not args.multiprocessing_distributed or (args.multiprocessing_distributed - and args.rank % ngpus_per_node == 0): - save_checkpoint({ - 'epoch': epoch + 1, - 'arch': args.arch, - 'state_dict': model.state_dict(), - 'best_acc1': best_acc1, - 'optimizer' : optimizer.state_dict(), - }, is_best) - - -def train(train_loader, model, criterion, optimizer, epoch, args): - batch_time = AverageMeter('Time', ':6.3f') - data_time = AverageMeter('Data', ':6.3f') - losses = AverageMeter('Loss', ':.4e') - top1 = AverageMeter('Acc@1', ':6.2f') - top5 = AverageMeter('Acc@5', ':6.2f') - progress = ProgressMeter(len(train_loader), batch_time, data_time, losses, top1, - top5, prefix="Epoch: [{}]".format(epoch)) - - # switch to train mode - model.train() - - end = time.time() - for i, (images, target) in enumerate(train_loader): - # measure data loading time - data_time.update(time.time() - end) - - if args.gpu is not None: - images = images.cuda(args.gpu, non_blocking=True) - target = target.cuda(args.gpu, non_blocking=True) - - # compute output - output = model(images) - loss = criterion(output, target) - - # measure accuracy and record loss - acc1, acc5 = accuracy(output, target, topk=(1, 5)) - losses.update(loss.item(), images.size(0)) - top1.update(acc1[0], images.size(0)) - top5.update(acc5[0], images.size(0)) - - # compute gradient and do SGD step - optimizer.zero_grad() - loss.backward() - optimizer.step() - - # measure elapsed time - batch_time.update(time.time() - end) - end = time.time() - - if i % args.print_freq == 0: - progress.print(i) - - -def validate(val_loader, model, criterion, args): - batch_time = AverageMeter('Time', ':6.3f') - losses = AverageMeter('Loss', ':.4e') - top1 = AverageMeter('Acc@1', ':6.2f') - top5 = AverageMeter('Acc@5', ':6.2f') - progress = ProgressMeter(len(val_loader), batch_time, losses, top1, top5, - prefix='Test: ') - - # switch to evaluate mode - model.eval() - - with torch.no_grad(): - end = time.time() - for i, (images, target) in enumerate(val_loader): - if args.gpu is not None: - images = images.cuda(args.gpu, non_blocking=True) - target = target.cuda(args.gpu, non_blocking=True) - - # compute output - output = model(images) - loss = criterion(output, target) - - # measure accuracy and record loss - acc1, acc5 = accuracy(output, target, topk=(1, 5)) - losses.update(loss.item(), images.size(0)) - top1.update(acc1[0], images.size(0)) - top5.update(acc5[0], images.size(0)) - - # measure elapsed time - batch_time.update(time.time() - end) - end = time.time() - - if i % args.print_freq == 0: - progress.print(i) - - # TODO: this should also be done with the ProgressMeter - print(' * Acc@1 {top1.avg:.3f} Acc@5 {top5.avg:.3f}' - .format(top1=top1, top5=top5)) - - return top1.avg - - -def save_checkpoint(state, is_best, filename='checkpoint.pth.tar'): - torch.save(state, filename) - if is_best: - shutil.copyfile(filename, 'model_best.pth.tar') - - -class AverageMeter(object): - """Computes and stores the average and current value""" - def __init__(self, name, fmt=':f'): - self.name = name - self.fmt = fmt - self.reset() - - def reset(self): - self.val = 0 - self.avg = 0 - self.sum = 0 - self.count = 0 - - def update(self, val, n=1): - self.val = val - self.sum += val * n - self.count += n - self.avg = self.sum / self.count - - def __str__(self): - fmtstr = '{name} {val' + self.fmt + '} ({avg' + self.fmt + '})' - return fmtstr.format(**self.__dict__) - - -class ProgressMeter(object): - def __init__(self, num_batches, *meters, prefix=""): - self.batch_fmtstr = self._get_batch_fmtstr(num_batches) - self.meters = meters - self.prefix = prefix - - def print(self, batch): - entries = [self.prefix + self.batch_fmtstr.format(batch)] - entries += [str(meter) for meter in self.meters] - print('\t'.join(entries)) - - def _get_batch_fmtstr(self, num_batches): - num_digits = len(str(num_batches // 1)) - fmt = '{:' + str(num_digits) + 'd}' - return '[' + fmt + '/' + fmt.format(num_batches) + ']' - - -def adjust_learning_rate(optimizer, epoch, args): - """Sets the learning rate to the initial LR decayed by 10 every 30 epochs""" - lr = args.lr * (0.1 ** (epoch // 30)) - for param_group in optimizer.param_groups: - param_group['lr'] = lr - - -def accuracy(output, target, topk=(1,)): - """Computes the accuracy over the k top predictions for the specified values of k""" - with torch.no_grad(): - maxk = max(topk) - batch_size = target.size(0) - - _, pred = output.topk(maxk, 1, True, True) - pred = pred.t() - correct = pred.eq(target.view(1, -1).expand_as(pred)) - - res = [] - for k in topk: - correct_k = correct[:k].reshape(-1).float().sum(0, keepdim=True) - res.append(correct_k.mul_(100.0 / batch_size)) - return res - - -if __name__ == '__main__': - main() diff --git a/video/mintime/model_code/models/efficientnet/examples/simple/check.ipynb b/video/mintime/model_code/models/efficientnet/examples/simple/check.ipynb deleted file mode 100644 index a147ef04e7176bcde27f64daf78175d2309619f7..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/examples/simple/check.ipynb +++ /dev/null @@ -1,177 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## TensorFlow Consistency Check\n", - "\n", - "In this example, we demonstrate that our model gives the same output as the original TensorFlow implementation, when using the same image pre-processing. Note that this notebook requires TensorFlow in order to do the pre-processing. " - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import json\n", - "from PIL import Image\n", - "\n", - "import torch\n", - "import tensorflow as tf\n", - "\n", - "from efficientnet_pytorch import EfficientNet" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "model_name = 'efficientnet-b0'\n", - "image_size = EfficientNet.get_image_size(model_name) # 224" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAArgAAAJlCAIAAAC+AhaJAAEAAElEQVR4nHT9WY8sW5odiO15b5t9jjnOOffcIe+QebMqs7JYlVVsNptsSNCLIKEF6J/oTwgQoEe9S4AgoNESSUENkt3VLGZlsoac7nzumWMOn2y2PethR/iNvEXaQ8DD3dzcbJv7Xutb3/q+Df/P/6f/Y1EUm6asu5ZFwgD06PG7/+K/+d8cn74DPAUIDlcX//DLv1ovz/IEY+icQHGUZkVuPeyGASCkrVsul33fE0IAcNPJeDTKL87evH39SgihPdlsNqPxeDabHR0dLxaLq+vby8vrpmnenF84C6qqghDFaSKlXMz368327Oxstth3AK5XmzdnV0LEt7e3QsR5kjJCOaGcEaM0Ai7P85//+Z+cXZz/q3/1r/b29tqh18rMFvOLq8tyW3/4ycfFePTs2bPxdP7+++9vt1vC6NnV18bYtu44i7S21oA8LZqm2dvbqzbbpq0Q9nmaZFmSpJEQnFiMCL68vFxvN0cnJ6ePH5Vl+fLN6ydPnv7o40/evn17cXb++9/8djGfHx4eVtty4rhzLs/zOI7jNGKMNX0HADg42v+bv/mb6WL+L//lv8xHmffeObdarX75+3+4uLiICB/l4x99+PHl+dV//9//DwcHB4RRC0Fvhj/6059MDhbZtPAEAgTXy9uubRlj3377bd+0R0dH2/Wm3pZaa2etYJxzTiAihBhjyrLce//Jp59++u/+3b+LomQ+nX3++Rec8/Xt+mD/iHMOHKzrZhgGAJD3Xmtdl6brOkyJc2a13QAATk5ODg4OxqPpxx9+SDHbm8y6pv/rv/oPb1+/qaqKzMef/vBHl5eXRZZ89rvfz8aTvb29YpRfXV31fS+1TvNkb29vtrd4+frVL37xi+OjJ2kae+/Wm2VVraNYzOfToihubm6urm7KbSN4GseZdxBCwqhQ8poQMpqOEIJlvY0iHqWiqipljIfIGm8cpFzEUc4YBwCgZAAAOOes8cYYpYxW1lq3vLkVIqaUG+2UUt4DSimltFuvkiSJ4xhCb4xxzmEEEELG6JgLiPwwDN6aoigWi0We59ATQoj1DgDw9uzs/OpSRKzve4QQxrirG4rJ3nxhtSw3W875wUG62WyA81maCEqSWBRpRjE5OTl57733Xr9+e35xVRSjQZmLi6vzy4s4TrMkff36NbLeWfv45NF//V/9s8vLy9/97rNtWW7r6vD4qOr6LM9ne4s/+skff/v8y81mU9e1994YI2WPEIqi6Ob2CmMshEAIMMYWi0Wapm3bwsYqpYz13gOlTNP2UkpvwXw+F5yqtgfOeGv+1//yX/7yb/4jhBBCHMfxer1u23pvb288HkdRNJ2OvfcvXn57cXFBKbXWnpwcG2MQQhHGP/z0x998803b9cenjy9uVtc3twCAvYPDsixHebZYLA72987evJJSDsPQdY0Qwnv/5uwCQjiaTLXWIooJZ6v1tus6kaQHBwe//d3vwt2cF6ht2+Pj4yiKOGVZlimlpuPJaDRqmqZcb25vb733x8fHo9GobZqX1zd1XTvnFosFgoQxNhqNrq9vvPe//e1vx+NpFEUffPDBe++99//5f//rf/Nv/s0HP/qAMtE0jYNIG1d3PYCoLEspJULovXef/ulPfzIqsrPXry4vL4G3xfS4aRqttfceQpimOaW0ruu6bouiuLy8xIimaeqcG41GWuu+H7TWWmvvHaU0S+M0jaMoMmrQWjnnvDNd122362EYIIRphIo8PzjY04OczWbWKELIarnBGFMublfbuuny8QQi1g9SCKFVixB6/OjR+fl5GgnBueoHa21VbYui+PrbZ9bbKE2qquJCAACkNAAArXWe59PJfLvddl23WCwIYQAAIQSEuGkaay1CSCkFCEYIaa3btlNKEUKEEJRwjDGEGCFkjOm6bhgUpTRJEsKdcw4AQClljHmIwuW3/UAphRDGUZpkqVKqbVuMsdceYwwhlFJWVdW2LQCAc44QCscBAFhrrbWUUiFEnKfX19ec8zzP67bV2hBCejlAgKuqqtrGGAMhBgBACBHGnDHnnLUWAIAQghCGYxJCwl/GGADAe08I4ZwTdvdeIcSomKRpGi4QQrxara6vr5umBQBgjO+nHei9996HwzrnjDHWWu89xjhchdbaWgshRAh568JEFI4QnsQYSymNMRBCQgiEMAwaAEApRSkFAFgtvfeUIO+9kZJRzCnjnApGIITAeeet995jrLV2zkEIwxQRjrk7w92HQgghhAWGSqko4pwzaSShKMsySjHBmJd1M0gZx7HD8PbyhvGk6xqAoGlrp3Tdbi00ZbMtt52I0HRSSKuQV8b5bpBERABiCGwkKEKoqtrXr7dXF7gsN5vNhnM+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bb1czm/eutu0VV1X33zz1fHxMaAjtBNCOFnXlU5iVxR9KSVnab83GfS3er3hRx/9II7j99794PDweHt7N45jzsTZ8mi1uryzde/OW/c+++SL2dQWeYEIzrp+nyMUXacRnHet9Z33aJQGfz2V+h11NMsS9BvLwc1NK3iaZw8ePbp37/7nX3395NmzB48e33/n0ddffztdLkSWaOsIInDqCVBGMKZaa2Yz03WeEkv4bC1n6wtnVVn5JBu1XX7z1h4X2/PFdLVadK2klFqYWUwN5OBRGaOcocip4M26Iox6cFHE93f3Tk7Ophez0Wik2q5put3d3Z2tHQB67+5Dj+TsYvbr3/yubSWltO2U936YZePJdtu26DEax3GWauu79dooxSOBiGVZCSFaqY1xJydH55cXeZ7HcXz//v1WdjwSq3L9V3/1V0+ePLm4uJjP55PJ5OL0rCiKO7duc87X63XExa3d/STB5Xw2nU4fPnh078HD5y9eNdJ6333z/LfK2OFg3HWqVTKKIhs7rbUGrNtuPOipdmVk+9UXn/70h9/7+c9+nCb83t37QPhsOV/Xqq7rddPOpguPHWMsyrLReDAc9hFxVa5U11mp2nKN3r589tQax0QE6IQQSEFr7bwLekrO2SuqTShsNGUeiWAUnXPeWw2mNy52tveklHXdtp0ybSNolCRR16mqbYx34/GSEk6RRDwyHhizSmkjldbW+oAQE8owioRzJo6F6WpnLBIf6PNtK2ezGSAHZFGciijiLCrrinPaNpJzkmXJ1vaIUtCm1eUqjuPxaPDO2w8fPHiwXiysUkYqdnp66r1HRpu2Nei1d+uuqZoaCFHOamdRK2V04HAKIeI4bTsVwt5sufziqy+jJP7h93/w7Mnzw4Pjum7TONPKLKqOJQWlvLOG8JhznkYpRWa1o4SF/gIiFr18uVxShlXbeOLjNKnqstfrEYpSylhE/X7fOTedThljxvmIMmWs1MYY00nL4my1WqVFbq09OzvzYOI009Z89fW3dV1W9TpJU8IEpVFdlqVoA01GSimlJoQkSeI7r7V23hAKSLzfhA0LKIxRSvkootZopZRHQq8Oa51WSnmvtA10QgAQSRxF0drYwEptmq5tW9XpJEkYYzFHwhhBorTS2hpjnQPnALylBDjjlFLG+aDfo2EmmkCWxh5j55xgeZZEbDKKIs4isapK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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Show image\n", - "Image.open('img.jpg')" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "# Preprocess image with TensorFlow\n", - "tf.enable_eager_execution()\n", - "\n", - "# Constants\n", - "MEAN_RGB = [0.485 * 255, 0.456 * 255, 0.406 * 255]\n", - "STDDEV_RGB = [0.229 * 255, 0.224 * 255, 0.225 * 255]\n", - "CROP_PADDING = 32\n", - "image_size = 224\n", - "\n", - "# Helper function\n", - "def _decode_and_center_crop(image_bytes, image_size):\n", - " shape = tf.image.extract_jpeg_shape(image_bytes)\n", - " image_height = shape[0]\n", - " image_width = shape[1]\n", - " padded_center_crop_size = tf.cast(\n", - " ((image_size / (image_size + CROP_PADDING)) *\n", - " tf.cast(tf.minimum(image_height, image_width), tf.float32)),\n", - " tf.int32)\n", - " offset_height = ((image_height - padded_center_crop_size) + 1) // 2\n", - " offset_width = ((image_width - padded_center_crop_size) + 1) // 2\n", - " crop_window = tf.stack([offset_height, offset_width, padded_center_crop_size, padded_center_crop_size])\n", - " image = tf.image.decode_and_crop_jpeg(image_bytes, crop_window, channels=3)\n", - " image = tf.image.resize_bicubic([image], [image_size, image_size])[0]\n", - " return image\n", - "\n", - "# Process\n", - "tf_img_bytes = tf.read_file('img.jpg')\n", - "tf_img = _decode_and_center_crop(tf_img_bytes, image_size)\n", - "tf_img = tf.image.resize_bicubic([tf_img], [image_size, image_size])[0] # ok it matches up to here\n", - "use_bfloat16 = 224 # bug in the original repo! \n", - "tf_img = tf.image.convert_image_dtype(tf_img, dtype=tf.bfloat16 if use_bfloat16 else tf.float32)\n", - "tf_img = tf.cast(tf_img, tf.float32)\n", - "tf_img = (tf_img - MEAN_RGB) / (STDDEV_RGB) # this is exactly the input to the model\n", - "img = torch.from_numpy(tf_img.numpy()).unsqueeze(0).permute((0,3,1,2))" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "# Load class names\n", - "labels_map = json.load(open('labels_map.txt'))\n", - "labels_map = [labels_map[str(i)] for i in range(1000)]" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loaded pretrained weights for efficientnet-b0\n", - "-----\n", - "giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (82.79%)\n", - "ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus (1.52%)\n", - "lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (0.37%)\n", - "American black bear, black bear, Ursus americanus, Euarctos americanus (0.23%)\n", - "brown bear, bruin, Ursus arctos (0.17%)\n" - ] - } - ], - "source": [ - "# Classify with EfficientNet\n", - "model = EfficientNet.from_pretrained(model_name)\n", - "model.eval()\n", - "with torch.no_grad():\n", - " logits = model(img)\n", - "preds = torch.topk(logits, k=5).indices.squeeze(0).tolist()\n", - "\n", - "print('-----')\n", - "for idx in preds:\n", - " label = labels_map[idx]\n", - " prob = torch.softmax(logits, dim=1)[0, idx].item()\n", - " print('{:<75} ({:.2f}%)'.format(label, prob*100))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is the result obtained by the TensorFlow implementation. " - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.8" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/video/mintime/model_code/models/efficientnet/examples/simple/example.ipynb b/video/mintime/model_code/models/efficientnet/examples/simple/example.ipynb deleted file mode 100644 index 6af47a4b6ab43c85f50333ce9c641114b4d3bf48..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/examples/simple/example.ipynb +++ /dev/null @@ -1,144 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Example\n", - "\n", - "In this simple example, we load an image, pre-process it, and classify it with a pretrained EfficientNet." - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [], - "source": [ - "import json\n", - "from PIL import Image\n", - "\n", - "import torch\n", - "from torchvision import transforms\n", - "\n", - "from efficientnet_pytorch import EfficientNet" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "model_name = 'efficientnet-b0'\n", - "image_size = EfficientNet.get_image_size(model_name) # 224" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAArgAAAJlCAIAAAC+AhaJAAEAAElEQVR4nHT9WY8sW5odiO15b5t9jjnOOffcIe+QebMqs7JYlVVsNptsSNCLIKEF6J/oTwgQoEe9S4AgoNESSUENkt3VLGZlsoac7nzumWMOn2y2PethR/iNvEXaQ8DD3dzcbJv7Xutb3/q+Df/P/6f/Y1EUm6asu5ZFwgD06PG7/+K/+d8cn74DPAUIDlcX//DLv1ovz/IEY+icQHGUZkVuPeyGASCkrVsul33fE0IAcNPJeDTKL87evH39SgihPdlsNqPxeDabHR0dLxaLq+vby8vrpmnenF84C6qqghDFaSKlXMz368327Oxstth3AK5XmzdnV0LEt7e3QsR5kjJCOaGcEaM0Ai7P85//+Z+cXZz/q3/1r/b29tqh18rMFvOLq8tyW3/4ycfFePTs2bPxdP7+++9vt1vC6NnV18bYtu44i7S21oA8LZqm2dvbqzbbpq0Q9nmaZFmSpJEQnFiMCL68vFxvN0cnJ6ePH5Vl+fLN6ydPnv7o40/evn17cXb++9/8djGfHx4eVtty4rhzLs/zOI7jNGKMNX0HADg42v+bv/mb6WL+L//lv8xHmffeObdarX75+3+4uLiICB/l4x99+PHl+dV//9//DwcHB4RRC0Fvhj/6059MDhbZtPAEAgTXy9uubRlj3377bd+0R0dH2/Wm3pZaa2etYJxzTiAihBhjyrLce//Jp59++u/+3b+LomQ+nX3++Rec8/Xt+mD/iHMOHKzrZhgGAJD3Xmtdl6brOkyJc2a13QAATk5ODg4OxqPpxx9+SDHbm8y6pv/rv/oPb1+/qaqKzMef/vBHl5eXRZZ89rvfz8aTvb29YpRfXV31fS+1TvNkb29vtrd4+frVL37xi+OjJ2kae+/Wm2VVraNYzOfToihubm6urm7KbSN4GseZdxBCwqhQ8poQMpqOEIJlvY0iHqWiqipljIfIGm8cpFzEUc4YBwCgZAAAOOes8cYYpYxW1lq3vLkVIqaUG+2UUt4DSimltFuvkiSJ4xhCb4xxzmEEEELG6JgLiPwwDN6aoigWi0We59ATQoj1DgDw9uzs/OpSRKzve4QQxrirG4rJ3nxhtSw3W875wUG62WyA81maCEqSWBRpRjE5OTl57733Xr9+e35xVRSjQZmLi6vzy4s4TrMkff36NbLeWfv45NF//V/9s8vLy9/97rNtWW7r6vD4qOr6LM9ne4s/+skff/v8y81mU9e1994YI2WPEIqi6Ob2CmMshEAIMMYWi0Wapm3bwsYqpYz13gOlTNP2UkpvwXw+F5yqtgfOeGv+1//yX/7yb/4jhBBCHMfxer1u23pvb288HkdRNJ2OvfcvXn57cXFBKbXWnpwcG2MQQhHGP/z0x998803b9cenjy9uVtc3twCAvYPDsixHebZYLA72987evJJSDsPQdY0Qwnv/5uwCQjiaTLXWIooJZ6v1tus6kaQHBwe//d3vwt2cF6ht2+Pj4yiKOGVZlimlpuPJaDRqmqZcb25vb733x8fHo9GobZqX1zd1XTvnFosFgoQxNhqNrq9vvPe//e1vx+NpFEUffPDBe++99//5f//rf/Nv/s0HP/qAMtE0jYNIG1d3PYCoLEspJULovXef/ulPfzIqsrPXry4vL4G3xfS4aRqttfceQpimOaW0ruu6bouiuLy8xIimaeqcG41GWuu+H7TWWmvvHaU0S+M0jaMoMmrQWjnnvDNd122362EYIIRphIo8PzjY04OczWbWKELIarnBGFMublfbuuny8QQi1g9SCKFVixB6/OjR+fl5GgnBueoHa21VbYui+PrbZ9bbKE2qquJCAACkNAAArXWe59PJfLvddl23WCwIYQAAIQSEuGkaay1CSCkFCEYIaa3btlNKEUKEEJRwjDGEGCFkjOm6bhgUpTRJEsKdcw4AQClljHmIwuW3/UAphRDGUZpkqVKqbVuMsdceYwwhlFJWVdW2LQCAc44QCscBAFhrrbWUUiFEnKfX19ec8zzP67bV2hBCejlAgKuqqtrGGAMhBgBACBHGnDHnnLUWAIAQghCGYxJCwl/GGADAe08I4ZwTdvdeIcSomKRpGi4QQrxara6vr5umBQBgjO+nHei9996HwzrnjDHWWu89xjhchdbaWgshRAh568JEFI4QnsQYSymNMRBCQgiEMAwaAEApRSkFAFgtvfeUIO+9kZJRzCnjnApGIITAeeet995jrLV2zkEIwxQRjrk7w92HQgghhAWGSqko4pwzaSShKMsySjHBmJd1M0gZx7HD8PbyhvGk6xqAoGlrp3Tdbi00ZbMtt52I0HRSSKuQV8b5bpBERABiCGwkKEKoqtrXr7dXF7gsN5vNhnM+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bb1czm/eutu0VV1X33zz1fHxMaAjtBNCOFnXlU5iVxR9KSVnab83GfS3er3hRx/9II7j99794PDweHt7N45jzsTZ8mi1uryzde/OW/c+++SL2dQWeYEIzrp+nyMUXacRnHet9Z33aJQGfz2V+h11NMsS9BvLwc1NK3iaZw8ePbp37/7nX3395NmzB48e33/n0ddffztdLkSWaOsIInDqCVBGMKZaa2Yz03WeEkv4bC1n6wtnVVn5JBu1XX7z1h4X2/PFdLVadK2klFqYWUwN5OBRGaOcocip4M26Iox6cFHE93f3Tk7Ophez0Wik2q5put3d3Z2tHQB67+5Dj+TsYvbr3/yubSWltO2U936YZePJdtu26DEax3GWauu79dooxSOBiGVZCSFaqY1xJydH55cXeZ7HcXz//v1WdjwSq3L9V3/1V0+ePLm4uJjP55PJ5OL0rCiKO7duc87X63XExa3d/STB5Xw2nU4fPnh078HD5y9eNdJ6333z/LfK2OFg3HWqVTKKIhs7rbUGrNtuPOipdmVk+9UXn/70h9/7+c9+nCb83t37QPhsOV/Xqq7rddPOpguPHWMsyrLReDAc9hFxVa5U11mp2nKN3r589tQax0QE6IQQSEFr7bwLekrO2SuqTShsNGUeiWAUnXPeWw2mNy52tveklHXdtp0ybSNolCRR16mqbYx34/GSEk6RRDwyHhizSmkjldbW+oAQE8owioRzJo6F6WpnLBIf6PNtK2ezGSAHZFGciijiLCrrinPaNpJzkmXJ1vaIUtCm1eUqjuPxaPDO2w8fPHiwXiysUkYqdnp66r1HRpu2Nei1d+uuqZoaCFHOamdRK2V04HAKIeI4bTsVwt5sufziqy+jJP7h93/w7Mnzw4Pjum7TONPKLKqOJQWlvLOG8JhznkYpRWa1o4SF/gIiFr18uVxShlXbeOLjNKnqstfrEYpSylhE/X7fOTedThljxvmIMmWs1MYY00nL4my1WqVFbq09OzvzYOI009Z89fW3dV1W9TpJU8IEpVFdlqVoA01GSimlJoQkSeI7r7V23hAKSLzfhA0LKIxRSvkootZopZRHQq8Oa51WSnmvtA10QgAQSRxF0drYwEptmq5tW9XpJEkYYzFHwhhBorTS2hpjnQPnALylBDjjlFLG+aDfo2EmmkCWxh5j55xgeZZEbDKKIs4isapK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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Open image\n", - "img = Image.open('img.jpg')\n", - "img" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "# Preprocess image\n", - "tfms = transforms.Compose([transforms.Resize(image_size), transforms.CenterCrop(image_size), \n", - " transforms.ToTensor(),\n", - " transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),])\n", - "img = tfms(img).unsqueeze(0)" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [], - "source": [ - "# Load class names\n", - "labels_map = json.load(open('labels_map.txt'))\n", - "labels_map = [labels_map[str(i)] for i in range(1000)]" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loaded pretrained weights for efficientnet-b0\n", - "-----\n", - "giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (90.04%)\n", - "ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus (0.62%)\n", - "lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (0.19%)\n", - "soccer ball (0.14%)\n", - "badger (0.10%)\n" - ] - } - ], - "source": [ - "# Classify with EfficientNet\n", - "model = EfficientNet.from_pretrained(model_name)\n", - "model.eval()\n", - "with torch.no_grad():\n", - " logits = model(img)\n", - "preds = torch.topk(logits, k=5).indices.squeeze(0).tolist()\n", - "\n", - "print('-----')\n", - "for idx in preds:\n", - " label = labels_map[idx]\n", - " prob = torch.softmax(logits, dim=1)[0, idx].item()\n", - " print('{:<75} ({:.2f}%)'.format(label, prob*100))" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.8" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/video/mintime/model_code/models/efficientnet/examples/simple/img.jpg b/video/mintime/model_code/models/efficientnet/examples/simple/img.jpg deleted file mode 100644 index 413902a8f0ffbc2cf37cabde8b86a7638d7efa7b..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/examples/simple/img.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2389d1990f74682ab3fb7df3e31ef15d7da7cd0368f85c594f74c76a3eebc0ad -size 116068 diff --git a/video/mintime/model_code/models/efficientnet/examples/simple/img2.jpg b/video/mintime/model_code/models/efficientnet/examples/simple/img2.jpg deleted file mode 100644 index 2917e2a8c97adaa297c57db228db261cba690fbc..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/examples/simple/img2.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7407adfee586ed9d3812103209b0d7f3fc2db47f2ad4f6e455181da02ff48553 -size 17374 diff --git a/video/mintime/model_code/models/efficientnet/examples/simple/labels_map.txt b/video/mintime/model_code/models/efficientnet/examples/simple/labels_map.txt deleted file mode 100644 index 0c068388231deb885b38ebd2aacbf000e5a97ee5..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/examples/simple/labels_map.txt +++ /dev/null @@ -1 +0,0 @@ -{"0": "tench, Tinca tinca", "1": "goldfish, Carassius auratus", "2": "great white shark, white shark, man-eater, man-eating shark, Carcharodon carcharias", "3": "tiger shark, Galeocerdo cuvieri", "4": "hammerhead, hammerhead shark", "5": "electric ray, crampfish, numbfish, torpedo", "6": "stingray", "7": "cock", "8": "hen", "9": "ostrich, Struthio camelus", "10": "brambling, Fringilla montifringilla", "11": "goldfinch, Carduelis carduelis", "12": "house finch, linnet, Carpodacus mexicanus", "13": "junco, snowbird", "14": "indigo bunting, indigo finch, indigo bird, Passerina cyanea", "15": "robin, American robin, Turdus migratorius", "16": "bulbul", "17": "jay", "18": "magpie", "19": "chickadee", "20": "water ouzel, dipper", "21": "kite", "22": "bald eagle, American eagle, Haliaeetus leucocephalus", "23": "vulture", "24": "great grey owl, great gray owl, Strix nebulosa", "25": "European fire salamander, Salamandra salamandra", "26": "common newt, Triturus vulgaris", "27": "eft", "28": "spotted salamander, Ambystoma maculatum", "29": "axolotl, mud puppy, Ambystoma mexicanum", "30": "bullfrog, Rana catesbeiana", "31": "tree frog, tree-frog", "32": "tailed frog, bell toad, ribbed toad, tailed toad, Ascaphus trui", "33": "loggerhead, loggerhead turtle, Caretta caretta", "34": "leatherback turtle, leatherback, leathery turtle, Dermochelys coriacea", "35": "mud turtle", "36": "terrapin", "37": "box turtle, box tortoise", "38": "banded gecko", "39": "common iguana, iguana, Iguana iguana", "40": "American chameleon, anole, Anolis carolinensis", "41": "whiptail, whiptail lizard", "42": "agama", "43": "frilled lizard, Chlamydosaurus kingi", "44": "alligator lizard", "45": "Gila monster, Heloderma suspectum", "46": "green lizard, Lacerta viridis", "47": "African chameleon, Chamaeleo chamaeleon", "48": "Komodo dragon, Komodo lizard, dragon lizard, giant lizard, Varanus komodoensis", "49": "African crocodile, Nile crocodile, Crocodylus niloticus", "50": "American alligator, Alligator mississipiensis", "51": "triceratops", "52": "thunder snake, worm snake, Carphophis amoenus", "53": "ringneck snake, ring-necked snake, ring snake", "54": "hognose snake, puff adder, sand viper", "55": "green snake, grass snake", "56": "king snake, kingsnake", "57": "garter snake, grass snake", "58": "water snake", "59": "vine snake", "60": "night snake, Hypsiglena torquata", "61": "boa constrictor, Constrictor constrictor", "62": "rock python, rock snake, Python sebae", "63": "Indian cobra, Naja naja", "64": "green mamba", "65": "sea snake", "66": "horned viper, cerastes, sand viper, horned asp, Cerastes cornutus", "67": "diamondback, diamondback rattlesnake, Crotalus adamanteus", "68": "sidewinder, horned rattlesnake, Crotalus cerastes", "69": "trilobite", "70": "harvestman, daddy longlegs, Phalangium opilio", "71": "scorpion", "72": "black and gold garden spider, Argiope aurantia", "73": "barn spider, Araneus cavaticus", "74": "garden spider, Aranea diademata", "75": "black widow, Latrodectus mactans", "76": "tarantula", "77": "wolf spider, hunting spider", "78": "tick", "79": "centipede", "80": "black grouse", "81": "ptarmigan", "82": "ruffed grouse, partridge, Bonasa umbellus", "83": "prairie chicken, prairie grouse, prairie fowl", "84": "peacock", "85": "quail", "86": "partridge", "87": "African grey, African gray, Psittacus erithacus", "88": "macaw", "89": "sulphur-crested cockatoo, Kakatoe galerita, Cacatua galerita", "90": "lorikeet", "91": "coucal", "92": "bee eater", "93": "hornbill", "94": "hummingbird", "95": "jacamar", "96": "toucan", "97": "drake", "98": "red-breasted merganser, Mergus serrator", "99": "goose", "100": "black swan, Cygnus atratus", "101": "tusker", "102": "echidna, spiny anteater, anteater", "103": "platypus, duckbill, duckbilled platypus, duck-billed platypus, Ornithorhynchus anatinus", "104": "wallaby, brush kangaroo", "105": "koala, koala bear, kangaroo bear, native bear, Phascolarctos cinereus", "106": "wombat", "107": "jellyfish", "108": "sea anemone, anemone", "109": "brain coral", "110": "flatworm, platyhelminth", "111": "nematode, nematode worm, roundworm", "112": "conch", "113": "snail", "114": "slug", "115": "sea slug, nudibranch", "116": "chiton, coat-of-mail shell, sea cradle, polyplacophore", "117": "chambered nautilus, pearly nautilus, nautilus", "118": "Dungeness crab, Cancer magister", "119": "rock crab, Cancer irroratus", "120": "fiddler crab", "121": "king crab, Alaska crab, Alaskan king crab, Alaska king crab, Paralithodes camtschatica", "122": "American lobster, Northern lobster, Maine lobster, Homarus americanus", "123": "spiny lobster, langouste, rock lobster, crawfish, crayfish, sea crawfish", "124": "crayfish, crawfish, crawdad, crawdaddy", "125": "hermit crab", "126": "isopod", "127": "white stork, Ciconia ciconia", "128": "black stork, Ciconia nigra", "129": "spoonbill", "130": "flamingo", "131": "little blue heron, Egretta caerulea", "132": "American egret, great white heron, Egretta albus", "133": "bittern", "134": "crane", "135": "limpkin, Aramus pictus", "136": "European gallinule, Porphyrio porphyrio", "137": "American coot, marsh hen, mud hen, water hen, Fulica americana", "138": "bustard", "139": "ruddy turnstone, Arenaria interpres", "140": "red-backed sandpiper, dunlin, Erolia alpina", "141": "redshank, Tringa totanus", "142": "dowitcher", "143": "oystercatcher, oyster catcher", "144": "pelican", "145": "king penguin, Aptenodytes patagonica", "146": "albatross, mollymawk", "147": "grey whale, gray whale, devilfish, Eschrichtius gibbosus, Eschrichtius robustus", "148": "killer whale, killer, orca, grampus, sea wolf, Orcinus orca", "149": "dugong, Dugong dugon", "150": "sea lion", "151": "Chihuahua", "152": "Japanese spaniel", "153": "Maltese dog, Maltese terrier, Maltese", "154": "Pekinese, Pekingese, Peke", "155": "Shih-Tzu", "156": "Blenheim spaniel", "157": "papillon", "158": "toy terrier", "159": "Rhodesian ridgeback", "160": "Afghan hound, Afghan", "161": "basset, basset hound", "162": "beagle", "163": "bloodhound, sleuthhound", "164": "bluetick", "165": "black-and-tan coonhound", "166": "Walker hound, Walker foxhound", "167": "English foxhound", "168": "redbone", "169": "borzoi, Russian wolfhound", "170": "Irish wolfhound", "171": "Italian greyhound", "172": "whippet", "173": "Ibizan hound, Ibizan Podenco", "174": "Norwegian elkhound, elkhound", "175": "otterhound, otter hound", "176": "Saluki, gazelle hound", "177": "Scottish deerhound, deerhound", "178": "Weimaraner", "179": "Staffordshire bullterrier, Staffordshire bull terrier", "180": "American Staffordshire terrier, Staffordshire terrier, American pit bull terrier, pit bull terrier", "181": "Bedlington terrier", "182": "Border terrier", "183": "Kerry blue terrier", "184": "Irish terrier", "185": "Norfolk terrier", "186": "Norwich terrier", "187": "Yorkshire terrier", "188": "wire-haired fox terrier", "189": "Lakeland terrier", "190": "Sealyham terrier, Sealyham", "191": "Airedale, Airedale terrier", "192": "cairn, cairn terrier", "193": "Australian terrier", "194": "Dandie Dinmont, Dandie Dinmont terrier", "195": "Boston bull, Boston terrier", "196": "miniature schnauzer", "197": "giant schnauzer", "198": "standard schnauzer", "199": "Scotch terrier, Scottish terrier, Scottie", "200": "Tibetan terrier, chrysanthemum dog", "201": "silky terrier, Sydney silky", "202": "soft-coated wheaten terrier", "203": "West Highland white terrier", "204": "Lhasa, Lhasa apso", "205": "flat-coated retriever", "206": "curly-coated retriever", "207": "golden retriever", "208": "Labrador retriever", "209": "Chesapeake Bay retriever", "210": "German short-haired pointer", "211": "vizsla, Hungarian pointer", "212": "English setter", "213": "Irish setter, red setter", "214": "Gordon setter", "215": "Brittany spaniel", "216": "clumber, clumber spaniel", "217": "English springer, English springer spaniel", "218": "Welsh springer spaniel", "219": "cocker spaniel, English cocker spaniel, cocker", "220": "Sussex spaniel", "221": "Irish water spaniel", "222": "kuvasz", "223": "schipperke", "224": "groenendael", "225": "malinois", "226": "briard", "227": "kelpie", "228": "komondor", "229": "Old English sheepdog, bobtail", "230": "Shetland sheepdog, Shetland sheep dog, Shetland", "231": "collie", "232": "Border collie", "233": "Bouvier des Flandres, Bouviers des Flandres", "234": "Rottweiler", "235": "German shepherd, German shepherd dog, German police dog, alsatian", "236": "Doberman, Doberman pinscher", "237": "miniature pinscher", "238": "Greater Swiss Mountain dog", "239": "Bernese mountain dog", "240": "Appenzeller", "241": "EntleBucher", "242": "boxer", "243": "bull mastiff", "244": "Tibetan mastiff", "245": "French bulldog", "246": "Great Dane", "247": "Saint Bernard, St Bernard", "248": "Eskimo dog, husky", "249": "malamute, malemute, Alaskan malamute", "250": "Siberian husky", "251": "dalmatian, coach dog, carriage dog", "252": "affenpinscher, monkey pinscher, monkey dog", "253": "basenji", "254": "pug, pug-dog", "255": "Leonberg", "256": "Newfoundland, Newfoundland dog", "257": "Great Pyrenees", "258": "Samoyed, Samoyede", "259": "Pomeranian", "260": "chow, chow chow", "261": "keeshond", "262": "Brabancon griffon", "263": "Pembroke, Pembroke Welsh corgi", "264": "Cardigan, Cardigan Welsh corgi", "265": "toy poodle", "266": "miniature poodle", "267": "standard poodle", "268": "Mexican hairless", "269": "timber wolf, grey wolf, gray wolf, Canis lupus", "270": "white wolf, Arctic wolf, Canis lupus tundrarum", "271": "red wolf, maned wolf, Canis rufus, Canis niger", "272": "coyote, prairie wolf, brush wolf, Canis latrans", "273": "dingo, warrigal, warragal, Canis dingo", "274": "dhole, Cuon alpinus", "275": "African hunting dog, hyena dog, Cape hunting dog, Lycaon pictus", "276": "hyena, hyaena", "277": "red fox, Vulpes vulpes", "278": "kit fox, Vulpes macrotis", "279": "Arctic fox, white fox, Alopex lagopus", "280": "grey fox, gray fox, Urocyon cinereoargenteus", "281": "tabby, tabby cat", "282": "tiger cat", "283": "Persian cat", "284": "Siamese cat, Siamese", "285": "Egyptian cat", "286": "cougar, puma, catamount, mountain lion, painter, panther, Felis concolor", "287": "lynx, catamount", "288": "leopard, Panthera pardus", "289": "snow leopard, ounce, Panthera uncia", "290": "jaguar, panther, Panthera onca, Felis onca", "291": "lion, king of beasts, Panthera leo", "292": "tiger, Panthera tigris", "293": "cheetah, chetah, Acinonyx jubatus", "294": "brown bear, bruin, Ursus arctos", "295": "American black bear, black bear, Ursus americanus, Euarctos americanus", "296": "ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus", "297": "sloth bear, Melursus ursinus, Ursus ursinus", "298": "mongoose", "299": "meerkat, mierkat", "300": "tiger beetle", "301": "ladybug, ladybeetle, lady beetle, ladybird, ladybird beetle", "302": "ground beetle, carabid beetle", "303": "long-horned beetle, longicorn, longicorn beetle", "304": "leaf beetle, chrysomelid", "305": "dung beetle", "306": "rhinoceros beetle", "307": "weevil", "308": "fly", "309": "bee", "310": "ant, emmet, pismire", "311": "grasshopper, hopper", "312": "cricket", "313": "walking stick, walkingstick, stick insect", "314": "cockroach, roach", "315": "mantis, mantid", "316": "cicada, cicala", "317": "leafhopper", "318": "lacewing, lacewing fly", "319": "dragonfly, darning needle, devil's darning needle, sewing needle, snake feeder, snake doctor, mosquito hawk, skeeter hawk", "320": "damselfly", "321": "admiral", "322": "ringlet, ringlet butterfly", "323": "monarch, monarch butterfly, milkweed butterfly, Danaus plexippus", "324": "cabbage butterfly", "325": "sulphur butterfly, sulfur butterfly", "326": "lycaenid, lycaenid butterfly", "327": "starfish, sea star", "328": "sea urchin", "329": "sea cucumber, holothurian", "330": "wood rabbit, cottontail, cottontail rabbit", "331": "hare", "332": "Angora, Angora rabbit", "333": "hamster", "334": "porcupine, hedgehog", "335": "fox squirrel, eastern fox squirrel, Sciurus niger", "336": "marmot", "337": "beaver", "338": "guinea pig, Cavia cobaya", "339": "sorrel", "340": "zebra", "341": "hog, pig, grunter, squealer, Sus scrofa", "342": "wild boar, boar, Sus scrofa", "343": "warthog", "344": "hippopotamus, hippo, river horse, Hippopotamus amphibius", "345": "ox", "346": "water buffalo, water ox, Asiatic buffalo, Bubalus bubalis", "347": "bison", "348": "ram, tup", "349": "bighorn, bighorn sheep, cimarron, Rocky Mountain bighorn, Rocky Mountain sheep, Ovis canadensis", "350": "ibex, Capra ibex", "351": "hartebeest", "352": "impala, Aepyceros melampus", "353": "gazelle", "354": "Arabian camel, dromedary, Camelus dromedarius", "355": "llama", "356": "weasel", "357": "mink", "358": "polecat, fitch, foulmart, foumart, Mustela putorius", "359": "black-footed ferret, ferret, Mustela nigripes", "360": "otter", "361": "skunk, polecat, wood pussy", "362": "badger", "363": "armadillo", "364": "three-toed sloth, ai, Bradypus tridactylus", "365": "orangutan, orang, orangutang, Pongo pygmaeus", "366": "gorilla, Gorilla gorilla", "367": "chimpanzee, chimp, Pan troglodytes", "368": "gibbon, Hylobates lar", "369": "siamang, Hylobates syndactylus, Symphalangus syndactylus", "370": "guenon, guenon monkey", "371": "patas, hussar monkey, Erythrocebus patas", "372": "baboon", "373": "macaque", "374": "langur", "375": "colobus, colobus monkey", "376": "proboscis monkey, Nasalis larvatus", "377": "marmoset", "378": "capuchin, ringtail, Cebus capucinus", "379": "howler monkey, howler", "380": "titi, titi monkey", "381": "spider monkey, Ateles geoffroyi", "382": "squirrel monkey, Saimiri sciureus", "383": "Madagascar cat, ring-tailed lemur, Lemur catta", "384": "indri, indris, Indri indri, Indri brevicaudatus", "385": "Indian elephant, Elephas maximus", "386": "African elephant, Loxodonta africana", "387": "lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens", "388": "giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca", "389": "barracouta, snoek", "390": "eel", "391": "coho, cohoe, coho salmon, blue jack, silver salmon, Oncorhynchus kisutch", "392": "rock beauty, Holocanthus tricolor", "393": "anemone fish", "394": "sturgeon", "395": "gar, garfish, garpike, billfish, Lepisosteus osseus", "396": "lionfish", "397": "puffer, pufferfish, blowfish, globefish", "398": "abacus", "399": "abaya", "400": "academic gown, academic robe, judge's robe", "401": "accordion, piano accordion, squeeze box", "402": "acoustic guitar", "403": "aircraft carrier, carrier, flattop, attack aircraft carrier", "404": "airliner", "405": "airship, dirigible", "406": "altar", "407": "ambulance", "408": "amphibian, amphibious vehicle", "409": "analog clock", "410": "apiary, bee house", "411": "apron", "412": "ashcan, trash can, garbage can, wastebin, ash bin, ash-bin, ashbin, dustbin, trash barrel, trash bin", "413": "assault rifle, assault gun", "414": "backpack, back pack, knapsack, packsack, rucksack, haversack", "415": "bakery, bakeshop, bakehouse", "416": "balance beam, beam", "417": "balloon", "418": "ballpoint, ballpoint pen, ballpen, Biro", "419": "Band Aid", "420": "banjo", "421": "bannister, banister, balustrade, balusters, handrail", "422": "barbell", "423": "barber chair", "424": "barbershop", "425": "barn", "426": "barometer", "427": "barrel, cask", "428": "barrow, garden cart, lawn cart, wheelbarrow", "429": "baseball", "430": "basketball", "431": "bassinet", "432": "bassoon", "433": "bathing cap, swimming cap", "434": "bath towel", "435": "bathtub, bathing tub, bath, tub", "436": "beach wagon, station wagon, wagon, estate car, beach waggon, station waggon, waggon", "437": "beacon, lighthouse, beacon light, pharos", "438": "beaker", "439": "bearskin, busby, shako", "440": "beer bottle", "441": "beer glass", "442": "bell cote, bell cot", "443": "bib", "444": "bicycle-built-for-two, tandem bicycle, tandem", "445": "bikini, two-piece", "446": "binder, ring-binder", "447": "binoculars, field glasses, opera glasses", "448": "birdhouse", "449": "boathouse", "450": "bobsled, bobsleigh, bob", "451": "bolo tie, bolo, bola tie, bola", "452": "bonnet, poke bonnet", "453": "bookcase", "454": "bookshop, bookstore, bookstall", "455": "bottlecap", "456": "bow", "457": "bow tie, bow-tie, bowtie", "458": "brass, memorial tablet, plaque", "459": "brassiere, bra, bandeau", "460": "breakwater, groin, groyne, mole, bulwark, seawall, jetty", "461": "breastplate, aegis, egis", "462": "broom", "463": "bucket, pail", "464": "buckle", "465": "bulletproof vest", "466": "bullet train, bullet", "467": "butcher shop, meat market", "468": "cab, hack, taxi, taxicab", "469": "caldron, cauldron", "470": "candle, taper, wax light", "471": "cannon", "472": "canoe", "473": "can opener, tin opener", "474": "cardigan", "475": "car mirror", "476": "carousel, carrousel, merry-go-round, roundabout, whirligig", "477": "carpenter's kit, tool kit", "478": "carton", "479": "car wheel", "480": "cash machine, cash dispenser, automated teller machine, automatic teller machine, automated teller, automatic teller, ATM", "481": "cassette", "482": "cassette player", "483": "castle", "484": "catamaran", "485": "CD player", "486": "cello, violoncello", "487": "cellular telephone, cellular phone, cellphone, cell, mobile phone", "488": "chain", "489": "chainlink fence", "490": "chain mail, ring mail, mail, chain armor, chain armour, ring armor, ring armour", "491": "chain saw, chainsaw", "492": "chest", "493": "chiffonier, commode", "494": "chime, bell, gong", "495": "china cabinet, china closet", "496": "Christmas stocking", "497": "church, church building", "498": "cinema, movie theater, movie theatre, movie house, picture palace", "499": "cleaver, meat cleaver, chopper", "500": "cliff dwelling", "501": "cloak", "502": "clog, geta, patten, sabot", "503": "cocktail shaker", "504": "coffee mug", "505": "coffeepot", "506": "coil, spiral, volute, whorl, helix", "507": "combination lock", "508": "computer keyboard, keypad", "509": "confectionery, confectionary, candy store", "510": "container ship, containership, container vessel", "511": "convertible", "512": "corkscrew, bottle screw", "513": "cornet, horn, trumpet, trump", "514": "cowboy boot", "515": "cowboy hat, ten-gallon hat", "516": "cradle", "517": "crane", "518": "crash helmet", "519": "crate", "520": "crib, cot", "521": "Crock Pot", "522": "croquet ball", "523": "crutch", "524": "cuirass", "525": "dam, dike, dyke", "526": "desk", "527": "desktop computer", "528": "dial telephone, dial phone", "529": "diaper, nappy, napkin", "530": "digital clock", "531": "digital watch", "532": "dining table, board", "533": "dishrag, dishcloth", "534": "dishwasher, dish washer, dishwashing machine", "535": "disk brake, disc brake", "536": "dock, dockage, docking facility", "537": "dogsled, dog sled, dog sleigh", "538": "dome", "539": "doormat, welcome mat", "540": "drilling platform, offshore rig", "541": "drum, membranophone, tympan", "542": "drumstick", "543": "dumbbell", "544": "Dutch oven", "545": "electric fan, blower", "546": "electric guitar", "547": "electric locomotive", "548": "entertainment center", "549": "envelope", "550": "espresso maker", "551": "face powder", "552": "feather boa, boa", "553": "file, file cabinet, filing cabinet", "554": "fireboat", "555": "fire engine, fire truck", "556": "fire screen, fireguard", "557": "flagpole, flagstaff", "558": "flute, transverse flute", "559": "folding chair", "560": "football helmet", "561": "forklift", "562": "fountain", "563": "fountain pen", "564": "four-poster", "565": "freight car", "566": "French horn, horn", "567": "frying pan, frypan, skillet", "568": "fur coat", "569": "garbage truck, dustcart", "570": "gasmask, respirator, gas helmet", "571": "gas pump, gasoline pump, petrol pump, island dispenser", "572": "goblet", "573": "go-kart", "574": "golf ball", "575": "golfcart, golf cart", "576": "gondola", "577": "gong, tam-tam", "578": "gown", "579": "grand piano, grand", "580": "greenhouse, nursery, glasshouse", "581": "grille, radiator grille", "582": "grocery store, grocery, food market, market", "583": "guillotine", "584": "hair slide", "585": "hair spray", "586": "half track", "587": "hammer", "588": "hamper", "589": "hand blower, blow dryer, blow drier, hair dryer, hair drier", "590": "hand-held computer, hand-held microcomputer", "591": "handkerchief, hankie, hanky, hankey", "592": "hard disc, hard disk, fixed disk", "593": "harmonica, mouth organ, harp, mouth harp", "594": "harp", "595": "harvester, reaper", "596": "hatchet", "597": "holster", "598": "home theater, home theatre", "599": "honeycomb", "600": "hook, claw", "601": "hoopskirt, crinoline", "602": "horizontal bar, high bar", "603": "horse cart, horse-cart", "604": "hourglass", "605": "iPod", "606": "iron, smoothing iron", "607": "jack-o'-lantern", "608": "jean, blue jean, denim", "609": "jeep, landrover", "610": "jersey, T-shirt, tee shirt", "611": "jigsaw puzzle", "612": "jinrikisha, ricksha, rickshaw", "613": "joystick", "614": "kimono", "615": "knee pad", "616": "knot", "617": "lab coat, laboratory coat", "618": "ladle", "619": "lampshade, lamp shade", "620": "laptop, laptop computer", "621": "lawn mower, mower", "622": "lens cap, lens cover", "623": "letter opener, paper knife, paperknife", "624": "library", "625": "lifeboat", "626": "lighter, light, igniter, ignitor", "627": "limousine, limo", "628": "liner, ocean liner", "629": "lipstick, lip rouge", "630": "Loafer", "631": "lotion", "632": "loudspeaker, speaker, speaker unit, loudspeaker system, speaker system", "633": "loupe, jeweler's loupe", "634": "lumbermill, sawmill", "635": "magnetic compass", "636": "mailbag, postbag", "637": "mailbox, letter box", "638": "maillot", "639": "maillot, tank suit", "640": "manhole cover", "641": "maraca", "642": "marimba, xylophone", "643": "mask", "644": "matchstick", "645": "maypole", "646": "maze, labyrinth", "647": "measuring cup", "648": "medicine chest, medicine cabinet", "649": "megalith, megalithic structure", "650": "microphone, mike", "651": "microwave, microwave oven", "652": "military uniform", "653": "milk can", "654": "minibus", "655": "miniskirt, mini", "656": "minivan", "657": "missile", "658": "mitten", "659": "mixing bowl", "660": "mobile home, manufactured home", "661": "Model T", "662": "modem", "663": "monastery", "664": "monitor", "665": "moped", "666": "mortar", "667": "mortarboard", "668": "mosque", "669": "mosquito net", "670": "motor scooter, scooter", "671": "mountain bike, all-terrain bike, off-roader", "672": "mountain tent", "673": "mouse, computer mouse", "674": "mousetrap", "675": "moving van", "676": "muzzle", "677": "nail", "678": "neck brace", "679": "necklace", "680": "nipple", "681": "notebook, notebook computer", "682": "obelisk", "683": "oboe, hautboy, hautbois", "684": "ocarina, sweet potato", "685": "odometer, hodometer, mileometer, milometer", "686": "oil filter", "687": "organ, pipe organ", "688": "oscilloscope, scope, cathode-ray oscilloscope, CRO", "689": "overskirt", "690": "oxcart", "691": "oxygen mask", "692": "packet", "693": "paddle, boat paddle", "694": "paddlewheel, paddle wheel", "695": "padlock", "696": "paintbrush", "697": "pajama, pyjama, pj's, jammies", "698": "palace", "699": "panpipe, pandean pipe, syrinx", "700": "paper towel", "701": "parachute, chute", "702": "parallel bars, bars", "703": "park bench", "704": "parking meter", "705": "passenger car, coach, carriage", "706": "patio, terrace", "707": "pay-phone, pay-station", "708": "pedestal, plinth, footstall", "709": "pencil box, pencil case", "710": "pencil sharpener", "711": "perfume, essence", "712": "Petri dish", "713": "photocopier", "714": "pick, plectrum, plectron", "715": "pickelhaube", "716": "picket fence, paling", "717": "pickup, pickup truck", "718": "pier", "719": "piggy bank, penny bank", "720": "pill bottle", "721": "pillow", "722": "ping-pong ball", "723": "pinwheel", "724": "pirate, pirate ship", "725": "pitcher, ewer", "726": "plane, carpenter's plane, woodworking plane", "727": "planetarium", "728": "plastic bag", "729": "plate rack", "730": "plow, plough", "731": "plunger, plumber's helper", "732": "Polaroid camera, Polaroid Land camera", "733": "pole", "734": "police van, police wagon, paddy wagon, patrol wagon, wagon, black Maria", "735": "poncho", "736": "pool table, billiard table, snooker table", "737": "pop bottle, soda bottle", "738": "pot, flowerpot", "739": "potter's wheel", "740": "power drill", "741": "prayer rug, prayer mat", "742": "printer", "743": "prison, prison house", "744": "projectile, missile", "745": "projector", "746": "puck, hockey puck", "747": "punching bag, punch bag, punching ball, punchball", "748": "purse", "749": "quill, quill pen", "750": "quilt, comforter, comfort, puff", "751": "racer, race car, racing car", "752": "racket, racquet", "753": "radiator", "754": "radio, wireless", "755": "radio telescope, radio reflector", "756": "rain barrel", "757": "recreational vehicle, RV, R.V.", "758": "reel", "759": "reflex camera", "760": "refrigerator, icebox", "761": "remote control, remote", "762": "restaurant, eating house, eating place, eatery", "763": "revolver, six-gun, six-shooter", "764": "rifle", "765": "rocking chair, rocker", "766": "rotisserie", "767": "rubber eraser, rubber, pencil eraser", "768": "rugby ball", "769": "rule, ruler", "770": "running shoe", "771": "safe", "772": "safety pin", "773": "saltshaker, salt shaker", "774": "sandal", "775": "sarong", "776": "sax, saxophone", "777": "scabbard", "778": "scale, weighing machine", "779": "school bus", "780": "schooner", "781": "scoreboard", "782": "screen, CRT screen", "783": "screw", "784": "screwdriver", "785": "seat belt, seatbelt", "786": "sewing machine", "787": "shield, buckler", "788": "shoe shop, shoe-shop, shoe store", "789": "shoji", "790": "shopping basket", "791": "shopping cart", "792": "shovel", "793": "shower cap", "794": "shower curtain", "795": "ski", "796": "ski mask", "797": "sleeping bag", "798": "slide rule, slipstick", "799": "sliding door", "800": "slot, one-armed bandit", "801": "snorkel", "802": "snowmobile", "803": "snowplow, snowplough", "804": "soap dispenser", "805": "soccer ball", "806": "sock", "807": "solar dish, solar collector, solar furnace", "808": "sombrero", "809": "soup bowl", "810": "space bar", "811": "space heater", "812": "space shuttle", "813": "spatula", "814": "speedboat", "815": "spider web, spider's web", "816": "spindle", "817": "sports car, sport car", "818": "spotlight, spot", "819": "stage", "820": "steam locomotive", "821": "steel arch bridge", "822": "steel drum", "823": "stethoscope", "824": "stole", "825": "stone wall", "826": "stopwatch, stop watch", "827": "stove", "828": "strainer", "829": "streetcar, tram, tramcar, trolley, trolley car", "830": "stretcher", "831": "studio couch, day bed", "832": "stupa, tope", "833": "submarine, pigboat, sub, U-boat", "834": "suit, suit of clothes", "835": "sundial", "836": "sunglass", "837": "sunglasses, dark glasses, shades", "838": "sunscreen, sunblock, sun blocker", "839": "suspension bridge", "840": "swab, swob, mop", "841": "sweatshirt", "842": "swimming trunks, bathing trunks", "843": "swing", "844": "switch, electric switch, electrical switch", "845": "syringe", "846": "table lamp", "847": "tank, army tank, armored combat vehicle, armoured combat vehicle", "848": "tape player", "849": "teapot", "850": "teddy, teddy bear", "851": "television, television system", "852": "tennis ball", "853": "thatch, thatched roof", "854": "theater curtain, theatre curtain", "855": "thimble", "856": "thresher, thrasher, threshing machine", "857": "throne", "858": "tile roof", "859": "toaster", "860": "tobacco shop, tobacconist shop, tobacconist", "861": "toilet seat", "862": "torch", "863": "totem pole", "864": "tow truck, tow car, wrecker", "865": "toyshop", "866": "tractor", "867": "trailer truck, tractor trailer, trucking rig, rig, articulated lorry, semi", "868": "tray", "869": "trench coat", "870": "tricycle, trike, velocipede", "871": "trimaran", "872": "tripod", "873": "triumphal arch", "874": "trolleybus, trolley coach, trackless trolley", "875": "trombone", "876": "tub, vat", "877": "turnstile", "878": "typewriter keyboard", "879": "umbrella", "880": "unicycle, monocycle", "881": "upright, upright piano", "882": "vacuum, vacuum cleaner", "883": "vase", "884": "vault", "885": "velvet", "886": "vending machine", "887": "vestment", "888": "viaduct", "889": "violin, fiddle", "890": "volleyball", "891": "waffle iron", "892": "wall clock", "893": "wallet, billfold, notecase, pocketbook", "894": "wardrobe, closet, press", "895": "warplane, military plane", "896": "washbasin, handbasin, washbowl, lavabo, wash-hand basin", "897": "washer, automatic washer, washing machine", "898": "water bottle", "899": "water jug", "900": "water tower", "901": "whiskey jug", "902": "whistle", "903": "wig", "904": "window screen", "905": "window shade", "906": "Windsor tie", "907": "wine bottle", "908": "wing", "909": "wok", "910": "wooden spoon", "911": "wool, woolen, woollen", "912": "worm fence, snake fence, snake-rail fence, Virginia fence", "913": "wreck", "914": "yawl", "915": "yurt", "916": "web site, website, internet site, site", "917": "comic book", "918": "crossword puzzle, crossword", "919": "street sign", "920": "traffic light, traffic signal, stoplight", "921": "book jacket, dust cover, dust jacket, dust wrapper", "922": "menu", "923": "plate", "924": "guacamole", "925": "consomme", "926": "hot pot, hotpot", "927": "trifle", "928": "ice cream, icecream", "929": "ice lolly, lolly, lollipop, popsicle", "930": "French loaf", "931": "bagel, beigel", "932": "pretzel", "933": "cheeseburger", "934": "hotdog, hot dog, red hot", "935": "mashed potato", "936": "head cabbage", "937": "broccoli", "938": "cauliflower", "939": "zucchini, courgette", "940": "spaghetti squash", "941": "acorn squash", "942": "butternut squash", "943": "cucumber, cuke", "944": "artichoke, globe artichoke", "945": "bell pepper", "946": "cardoon", "947": "mushroom", "948": "Granny Smith", "949": "strawberry", "950": "orange", "951": "lemon", "952": "fig", "953": "pineapple, ananas", "954": "banana", "955": "jackfruit, jak, jack", "956": "custard apple", "957": "pomegranate", "958": "hay", "959": "carbonara", "960": "chocolate sauce, chocolate syrup", "961": "dough", "962": "meat loaf, meatloaf", "963": "pizza, pizza pie", "964": "potpie", "965": "burrito", "966": "red wine", "967": "espresso", "968": "cup", "969": "eggnog", "970": "alp", "971": "bubble", "972": "cliff, drop, drop-off", "973": "coral reef", "974": "geyser", "975": "lakeside, lakeshore", "976": "promontory, headland, head, foreland", "977": "sandbar, sand bar", "978": "seashore, coast, seacoast, sea-coast", "979": "valley, vale", "980": "volcano", "981": "ballplayer, baseball player", "982": "groom, bridegroom", "983": "scuba diver", "984": "rapeseed", "985": "daisy", "986": "yellow lady's slipper, yellow lady-slipper, Cypripedium calceolus, Cypripedium parviflorum", "987": "corn", "988": "acorn", "989": "hip, rose hip, rosehip", "990": "buckeye, horse chestnut, conker", "991": "coral fungus", "992": "agaric", "993": "gyromitra", "994": "stinkhorn, carrion fungus", "995": "earthstar", "996": "hen-of-the-woods, hen of the woods, Polyporus frondosus, Grifola frondosa", "997": "bolete", "998": "ear, spike, capitulum", "999": "toilet tissue, toilet paper, bathroom tissue"} \ No newline at end of file diff --git a/video/mintime/model_code/models/efficientnet/hubconf.py b/video/mintime/model_code/models/efficientnet/hubconf.py deleted file mode 100644 index dd0ea978cabcc7676bff4fcd18e7a0555eda98ab..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/hubconf.py +++ /dev/null @@ -1,43 +0,0 @@ -from efficientnet_pytorch import EfficientNet as _EfficientNet - -dependencies = ['torch'] - - -def _create_model_fn(model_name): - def _model_fn(num_classes=1000, in_channels=3, pretrained='imagenet'): - """Create Efficient Net. - - Described in detail here: https://arxiv.org/abs/1905.11946 - - Args: - num_classes (int, optional): Number of classes, default is 1000. - in_channels (int, optional): Number of input channels, default - is 3. - pretrained (str, optional): One of [None, 'imagenet', 'advprop'] - If None, no pretrained model is loaded. - If 'imagenet', models trained on imagenet dataset are loaded. - If 'advprop', models trained using adversarial training called - advprop are loaded. It is important to note that the - preprocessing required for the advprop pretrained models is - slightly different from normal ImageNet preprocessing - """ - model_name_ = model_name.replace('_', '-') - if pretrained is not None: - model = _EfficientNet.from_pretrained( - model_name=model_name_, - advprop=(pretrained == 'advprop'), - num_classes=num_classes, - in_channels=in_channels) - else: - model = _EfficientNet.from_name( - model_name=model_name_, - override_params={'num_classes': num_classes}, - ) - model._change_in_channels(in_channels) - - return model - - return _model_fn - -for model_name in ['efficientnet_b' + str(i) for i in range(9)]: - locals()[model_name] = _create_model_fn(model_name) diff --git a/video/mintime/model_code/models/efficientnet/setup.py b/video/mintime/model_code/models/efficientnet/setup.py deleted file mode 100644 index eb8d95a136169d2178f6525965afac2ab2a824aa..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/setup.py +++ /dev/null @@ -1,123 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# Note: To use the 'upload' functionality of this file, you must: -# $ pipenv install twine --dev - -import io -import os -import sys -from shutil import rmtree - -from setuptools import find_packages, setup, Command - -# Package meta-data. -NAME = 'efficientnet_pytorch' -DESCRIPTION = 'EfficientNet implemented in PyTorch.' -URL = 'https://github.com/lukemelas/EfficientNet-PyTorch' -EMAIL = 'lmelaskyriazi@college.harvard.edu' -AUTHOR = 'Luke' -REQUIRES_PYTHON = '>=3.5.0' -VERSION = '0.7.1' - -# What packages are required for this module to be executed? -REQUIRED = [ - 'torch' -] - -# What packages are optional? -EXTRAS = { - # 'fancy feature': ['django'], -} - -# The rest you shouldn't have to touch too much :) -# ------------------------------------------------ -# Except, perhaps the License and Trove Classifiers! -# If you do change the License, remember to change the Trove Classifier for that! - -here = os.path.abspath(os.path.dirname(__file__)) - -# Import the README and use it as the long-description. -# Note: this will only work if 'README.md' is present in your MANIFEST.in file! -try: - with io.open(os.path.join(here, 'README.md'), encoding='utf-8') as f: - long_description = '\n' + f.read() -except FileNotFoundError: - long_description = DESCRIPTION - -# Load the package's __version__.py module as a dictionary. -about = {} -if not VERSION: - project_slug = NAME.lower().replace("-", "_").replace(" ", "_") - with open(os.path.join(here, project_slug, '__version__.py')) as f: - exec(f.read(), about) -else: - about['__version__'] = VERSION - - -class UploadCommand(Command): - """Support setup.py upload.""" - - description = 'Build and publish the package.' - user_options = [] - - @staticmethod - def status(s): - """Prints things in bold.""" - print('\033[1m{0}\033[0m'.format(s)) - - def initialize_options(self): - pass - - def finalize_options(self): - pass - - def run(self): - try: - self.status('Removing previous builds…') - rmtree(os.path.join(here, 'dist')) - except OSError: - pass - - self.status('Building Source and Wheel (universal) distribution…') - os.system('{0} setup.py sdist bdist_wheel --universal'.format(sys.executable)) - - self.status('Uploading the package to PyPI via Twine…') - os.system('twine upload dist/*') - - self.status('Pushing git tags…') - os.system('git tag v{0}'.format(about['__version__'])) - os.system('git push --tags') - - sys.exit() - - -# Where the magic happens: -setup( - name=NAME, - version=about['__version__'], - description=DESCRIPTION, - long_description=long_description, - long_description_content_type='text/markdown', - author=AUTHOR, - author_email=EMAIL, - python_requires=REQUIRES_PYTHON, - url=URL, - packages=find_packages(exclude=["tests", "*.tests", "*.tests.*", "tests.*"]), - # py_modules=['model'], # If your package is a single module, use this instead of 'packages' - install_requires=REQUIRED, - extras_require=EXTRAS, - include_package_data=True, - license='Apache', - classifiers=[ - # Full list: https://pypi.python.org/pypi?%3Aaction=list_classifiers - 'License :: OSI Approved :: Apache Software License', - 'Programming Language :: Python', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - ], - # $ setup.py publish support. - cmdclass={ - 'upload': UploadCommand, - }, -) diff --git a/video/mintime/model_code/models/efficientnet/sotabench.py b/video/mintime/model_code/models/efficientnet/sotabench.py deleted file mode 100644 index 67816ff301d8cae39dde534edf688eeb010320c8..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/sotabench.py +++ /dev/null @@ -1,71 +0,0 @@ -import os -import numpy as np -import PIL -import torch -from torch.utils.data import DataLoader -import torchvision.transforms as transforms -from torchvision.datasets import ImageNet - -from efficientnet_pytorch import EfficientNet - -from sotabencheval.image_classification import ImageNetEvaluator -from sotabencheval.utils import is_server - -if is_server(): - DATA_ROOT = DATA_ROOT = os.environ.get('IMAGENET_DIR', './imagenet') # './.data/vision/imagenet' -else: # local settings - DATA_ROOT = os.environ['IMAGENET_DIR'] - assert bool(DATA_ROOT), 'please set IMAGENET_DIR environment variable' - print('Local data root: ', DATA_ROOT) - -model_name = 'EfficientNet-B5' -model = EfficientNet.from_pretrained(model_name.lower()) -image_size = EfficientNet.get_image_size(model_name.lower()) - -input_transform = transforms.Compose([ - transforms.Resize(image_size, PIL.Image.BICUBIC), - transforms.CenterCrop(image_size), - transforms.ToTensor(), - transforms.Normalize( - mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), -]) - -test_dataset = ImageNet( - DATA_ROOT, - split="val", - transform=input_transform, - target_transform=None, -) - -test_loader = DataLoader( - test_dataset, - batch_size=128, - shuffle=False, - num_workers=4, - pin_memory=True, -) - -model = model.cuda() -model.eval() - -evaluator = ImageNetEvaluator(model_name=model_name, - paper_arxiv_id='1905.11946') - -def get_img_id(image_name): - return image_name.split('/')[-1].replace('.JPEG', '') - -with torch.no_grad(): - for i, (input, target) in enumerate(test_loader): - input = input.to(device='cuda', non_blocking=True) - target = target.to(device='cuda', non_blocking=True) - output = model(input) - image_ids = [get_img_id(img[0]) for img in test_loader.dataset.imgs[i*test_loader.batch_size:(i+1)*test_loader.batch_size]] - evaluator.add(dict(zip(image_ids, list(output.cpu().numpy())))) - if evaluator.cache_exists: - break - -if not is_server(): - print("Results:") - print(evaluator.get_results()) - -evaluator.save() diff --git a/video/mintime/model_code/models/efficientnet/sotabench_setup.sh b/video/mintime/model_code/models/efficientnet/sotabench_setup.sh deleted file mode 100644 index e45bdeaebb0e1e9b27caa419b3a38623ffff5983..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/sotabench_setup.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash -x -source /workspace/venv/bin/activate -PYTHON=${PYTHON:-"python"} -$PYTHON -m pip install torch -$PYTHON -m pip install torchvision -$PYTHON -m pip install scipy diff --git a/video/mintime/model_code/models/efficientnet/tests/test_model.py b/video/mintime/model_code/models/efficientnet/tests/test_model.py deleted file mode 100644 index 0a034677324a19b82f6dc279bf5b27aad6c835f3..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/tests/test_model.py +++ /dev/null @@ -1,124 +0,0 @@ -from collections import OrderedDict - -import pytest -import torch -import torch.nn as nn - -from efficientnet_pytorch import EfficientNet - - -# -- fixtures ------------------------------------------------------------------------------------- - -@pytest.fixture(scope='module', params=[x for x in range(4)]) -def model(request): - return 'efficientnet-b{}'.format(request.param) - - -@pytest.fixture(scope='module', params=[True, False]) -def pretrained(request): - return request.param - - -@pytest.fixture(scope='function') -def net(model, pretrained): - return EfficientNet.from_pretrained(model) if pretrained else EfficientNet.from_name(model) - - -# -- tests ---------------------------------------------------------------------------------------- - -@pytest.mark.parametrize('img_size', [224, 256, 512]) -def test_forward(net, img_size): - """Test `.forward()` doesn't throw an error""" - data = torch.zeros((1, 3, img_size, img_size)) - output = net(data) - assert not torch.isnan(output).any() - - -def test_dropout_training(net): - """Test dropout `.training` is set by `.train()` on parent `nn.module`""" - net.train() - assert net._dropout.training == True - - -def test_dropout_eval(net): - """Test dropout `.training` is set by `.eval()` on parent `nn.module`""" - net.eval() - assert net._dropout.training == False - - -def test_dropout_update(net): - """Test dropout `.training` is updated by `.train()` and `.eval()` on parent `nn.module`""" - net.train() - assert net._dropout.training == True - net.eval() - assert net._dropout.training == False - net.train() - assert net._dropout.training == True - net.eval() - assert net._dropout.training == False - - -@pytest.mark.parametrize('img_size', [224, 256, 512]) -def test_modify_dropout(net, img_size): - """Test ability to modify dropout and fc modules of network""" - dropout = nn.Sequential(OrderedDict([ - ('_bn2', nn.BatchNorm1d(net._bn1.num_features)), - ('_drop1', nn.Dropout(p=net._global_params.dropout_rate)), - ('_linear1', nn.Linear(net._bn1.num_features, 512)), - ('_relu', nn.ReLU()), - ('_bn3', nn.BatchNorm1d(512)), - ('_drop2', nn.Dropout(p=net._global_params.dropout_rate / 2)) - ])) - fc = nn.Linear(512, net._global_params.num_classes) - - net._dropout = dropout - net._fc = fc - - data = torch.zeros((2, 3, img_size, img_size)) - output = net(data) - assert not torch.isnan(output).any() - - -@pytest.mark.parametrize('img_size', [224, 256, 512]) -def test_modify_pool(net, img_size): - """Test ability to modify pooling module of network""" - - class AdaptiveMaxAvgPool(nn.Module): - - def __init__(self): - super().__init__() - self.ada_avgpool = nn.AdaptiveAvgPool2d(1) - self.ada_maxpool = nn.AdaptiveMaxPool2d(1) - - def forward(self, x): - avg_x = self.ada_avgpool(x) - max_x = self.ada_maxpool(x) - x = torch.cat((avg_x, max_x), dim=1) - return x - - avg_pooling = AdaptiveMaxAvgPool() - fc = nn.Linear(net._fc.in_features * 2, net._global_params.num_classes) - - net._avg_pooling = avg_pooling - net._fc = fc - - data = torch.zeros((2, 3, img_size, img_size)) - output = net(data) - assert not torch.isnan(output).any() - - -@pytest.mark.parametrize('img_size', [224, 256, 512]) -def test_extract_endpoints(net, img_size): - """Test `.extract_endpoints()` doesn't throw an error""" - data = torch.zeros((1, 3, img_size, img_size)) - endpoints = net.extract_endpoints(data) - assert not torch.isnan(endpoints['reduction_1']).any() - assert not torch.isnan(endpoints['reduction_2']).any() - assert not torch.isnan(endpoints['reduction_3']).any() - assert not torch.isnan(endpoints['reduction_4']).any() - assert not torch.isnan(endpoints['reduction_5']).any() - assert endpoints['reduction_1'].size(2) == img_size // 2 - assert endpoints['reduction_2'].size(2) == img_size // 4 - assert endpoints['reduction_3'].size(2) == img_size // 8 - assert endpoints['reduction_4'].size(2) == img_size // 16 - assert endpoints['reduction_5'].size(2) == img_size // 32 diff --git a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/README.md b/video/mintime/model_code/models/efficientnet/tf_to_pytorch/README.md deleted file mode 100644 index 9699aa807198df8a5b776fd35fce5052baaf6783..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/README.md +++ /dev/null @@ -1,25 +0,0 @@ -### TensorFlow to PyTorch Conversion - -This directory is used to convert TensorFlow weights to PyTorch. It was hacked together fairly quickly, so the code is not the most beautiful (just a warning!), but it does the job. I will be refactoring it soon. - -I should also emphasize that you do *not* need to run any of this code to load pretrained weights. Simply use `EfficientNet.from_pretrained(...)`. - -That being said, the main script here is `convert_to_tf/load_tf_weights.py`. In order to use it, you should first download the pretrained TensorFlow weights: - ```bash -cd pretrained_tensorflow -./download.sh efficientnet-b0 -cd .. -``` -Then -```bash -mkdir -p pretrained_pytorch -cd convert_tf_to_pt -python load_tf_weights.py \ - --model_name efficientnet-b0 \ - --tf_checkpoint ../pretrained_tensorflow/efficientnet-b0/ \ - --output_file ../pretrained_pytorch/efficientnet-b0.pth -``` - - diff --git a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/download.sh b/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/download.sh deleted file mode 100755 index 6405dbd93e4f54338b1c7874ef89926491742f38..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/download.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -mkdir original_tf -cd original_tf -touch __init__.py -wget https://raw.githubusercontent.com/tensorflow/tpu/master/models/official/efficientnet/efficientnet_builder.py -wget https://raw.githubusercontent.com/tensorflow/tpu/master/models/official/efficientnet/efficientnet_model.py -wget https://raw.githubusercontent.com/tensorflow/tpu/master/models/official/efficientnet/eval_ckpt_main.py -wget https://raw.githubusercontent.com/tensorflow/tpu/master/models/official/efficientnet/utils.py -wget https://raw.githubusercontent.com/tensorflow/tpu/master/models/official/efficientnet/preprocessing.py -cd .. -mkdir -p tmp \ No newline at end of file diff --git a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/load_tf_weights.py b/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/load_tf_weights.py deleted file mode 100644 index 22e296e87558b521a3c60f8de3c4a8031743d1b4..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/load_tf_weights.py +++ /dev/null @@ -1,174 +0,0 @@ -import numpy as np -import tensorflow as tf -import torch - -tf.compat.v1.disable_v2_behavior() - -def load_param(checkpoint_file, conversion_table, model_name): - """ - Load parameters according to conversion_table. - - Args: - checkpoint_file (string): pretrained checkpoint model file in tensorflow - conversion_table (dict): { pytorch tensor in a model : checkpoint variable name } - """ - for pyt_param, tf_param_name in conversion_table.items(): - tf_param_name = str(model_name) + '/' + tf_param_name - tf_param = tf.train.load_variable(checkpoint_file, tf_param_name) - if 'conv' in tf_param_name and 'kernel' in tf_param_name: - tf_param = np.transpose(tf_param, (3, 2, 0, 1)) - if 'depthwise' in tf_param_name: - tf_param = np.transpose(tf_param, (1, 0, 2, 3)) - elif tf_param_name.endswith('kernel'): # for weight(kernel), we should do transpose - tf_param = np.transpose(tf_param) - assert pyt_param.size() == tf_param.shape, \ - 'Dim Mismatch: %s vs %s ; %s' % (tuple(pyt_param.size()), tf_param.shape, tf_param_name) - pyt_param.data = torch.from_numpy(tf_param) - - -def load_efficientnet(model, checkpoint_file, model_name): - """ - Load PyTorch EfficientNet from TensorFlow checkpoint file - """ - - # This will store the enire conversion table - conversion_table = {} - merge = lambda dict1, dict2: {**dict1, **dict2} - - # All the weights not in the conv blocks - conversion_table_for_weights_outside_blocks = { - model._conv_stem.weight: 'stem/conv2d/kernel', # [3, 3, 3, 32]), - model._bn0.bias: 'stem/tpu_batch_normalization/beta', # [32]), - model._bn0.weight: 'stem/tpu_batch_normalization/gamma', # [32]), - model._bn0.running_mean: 'stem/tpu_batch_normalization/moving_mean', # [32]), - model._bn0.running_var: 'stem/tpu_batch_normalization/moving_variance', # [32]), - model._conv_head.weight: 'head/conv2d/kernel', # [1, 1, 320, 1280]), - model._bn1.bias: 'head/tpu_batch_normalization/beta', # [1280]), - model._bn1.weight: 'head/tpu_batch_normalization/gamma', # [1280]), - model._bn1.running_mean: 'head/tpu_batch_normalization/moving_mean', # [32]), - model._bn1.running_var: 'head/tpu_batch_normalization/moving_variance', # [32]), - model._fc.bias: 'head/dense/bias', # [1000]), - model._fc.weight: 'head/dense/kernel', # [1280, 1000]), - } - conversion_table = merge(conversion_table, conversion_table_for_weights_outside_blocks) - - # The first conv block is special because it does not have _expand_conv - conversion_table_for_first_block = { - model._blocks[0]._project_conv.weight: 'blocks_0/conv2d/kernel', # 1, 1, 32, 16]), - model._blocks[0]._depthwise_conv.weight: 'blocks_0/depthwise_conv2d/depthwise_kernel', # [3, 3, 32, 1]), - model._blocks[0]._se_reduce.bias: 'blocks_0/se/conv2d/bias', # , [8]), - model._blocks[0]._se_reduce.weight: 'blocks_0/se/conv2d/kernel', # , [1, 1, 32, 8]), - model._blocks[0]._se_expand.bias: 'blocks_0/se/conv2d_1/bias', # , [32]), - model._blocks[0]._se_expand.weight: 'blocks_0/se/conv2d_1/kernel', # , [1, 1, 8, 32]), - model._blocks[0]._bn1.bias: 'blocks_0/tpu_batch_normalization/beta', # [32]), - model._blocks[0]._bn1.weight: 'blocks_0/tpu_batch_normalization/gamma', # [32]), - model._blocks[0]._bn1.running_mean: 'blocks_0/tpu_batch_normalization/moving_mean', - model._blocks[0]._bn1.running_var: 'blocks_0/tpu_batch_normalization/moving_variance', - model._blocks[0]._bn2.bias: 'blocks_0/tpu_batch_normalization_1/beta', # [16]), - model._blocks[0]._bn2.weight: 'blocks_0/tpu_batch_normalization_1/gamma', # [16]), - model._blocks[0]._bn2.running_mean: 'blocks_0/tpu_batch_normalization_1/moving_mean', - model._blocks[0]._bn2.running_var: 'blocks_0/tpu_batch_normalization_1/moving_variance', - } - conversion_table = merge(conversion_table, conversion_table_for_first_block) - - # Conv blocks - for i in range(len(model._blocks)): - - is_first_block = '_expand_conv.weight' not in [n for n, p in model._blocks[i].named_parameters()] - - if is_first_block: - conversion_table_block = { - model._blocks[i]._project_conv.weight: 'blocks_' + str(i) + '/conv2d/kernel', # 1, 1, 32, 16]), - model._blocks[i]._depthwise_conv.weight: 'blocks_' + str(i) + '/depthwise_conv2d/depthwise_kernel', - # [3, 3, 32, 1]), - model._blocks[i]._se_reduce.bias: 'blocks_' + str(i) + '/se/conv2d/bias', # , [8]), - model._blocks[i]._se_reduce.weight: 'blocks_' + str(i) + '/se/conv2d/kernel', # , [1, 1, 32, 8]), - model._blocks[i]._se_expand.bias: 'blocks_' + str(i) + '/se/conv2d_1/bias', # , [32]), - model._blocks[i]._se_expand.weight: 'blocks_' + str(i) + '/se/conv2d_1/kernel', # , [1, 1, 8, 32]), - model._blocks[i]._bn1.bias: 'blocks_' + str(i) + '/tpu_batch_normalization/beta', # [32]), - model._blocks[i]._bn1.weight: 'blocks_' + str(i) + '/tpu_batch_normalization/gamma', # [32]), - model._blocks[i]._bn1.running_mean: 'blocks_' + str(i) + '/tpu_batch_normalization/moving_mean', - model._blocks[i]._bn1.running_var: 'blocks_' + str(i) + '/tpu_batch_normalization/moving_variance', - model._blocks[i]._bn2.bias: 'blocks_' + str(i) + '/tpu_batch_normalization_1/beta', # [16]), - model._blocks[i]._bn2.weight: 'blocks_' + str(i) + '/tpu_batch_normalization_1/gamma', # [16]), - model._blocks[i]._bn2.running_mean: 'blocks_' + str(i) + '/tpu_batch_normalization_1/moving_mean', - model._blocks[i]._bn2.running_var: 'blocks_' + str(i) + '/tpu_batch_normalization_1/moving_variance', - } - - else: - conversion_table_block = { - model._blocks[i]._expand_conv.weight: 'blocks_' + str(i) + '/conv2d/kernel', - model._blocks[i]._project_conv.weight: 'blocks_' + str(i) + '/conv2d_1/kernel', - model._blocks[i]._depthwise_conv.weight: 'blocks_' + str(i) + '/depthwise_conv2d/depthwise_kernel', - model._blocks[i]._se_reduce.bias: 'blocks_' + str(i) + '/se/conv2d/bias', - model._blocks[i]._se_reduce.weight: 'blocks_' + str(i) + '/se/conv2d/kernel', - model._blocks[i]._se_expand.bias: 'blocks_' + str(i) + '/se/conv2d_1/bias', - model._blocks[i]._se_expand.weight: 'blocks_' + str(i) + '/se/conv2d_1/kernel', - model._blocks[i]._bn0.bias: 'blocks_' + str(i) + '/tpu_batch_normalization/beta', - model._blocks[i]._bn0.weight: 'blocks_' + str(i) + '/tpu_batch_normalization/gamma', - model._blocks[i]._bn0.running_mean: 'blocks_' + str(i) + '/tpu_batch_normalization/moving_mean', - model._blocks[i]._bn0.running_var: 'blocks_' + str(i) + '/tpu_batch_normalization/moving_variance', - model._blocks[i]._bn1.bias: 'blocks_' + str(i) + '/tpu_batch_normalization_1/beta', - model._blocks[i]._bn1.weight: 'blocks_' + str(i) + '/tpu_batch_normalization_1/gamma', - model._blocks[i]._bn1.running_mean: 'blocks_' + str(i) + '/tpu_batch_normalization_1/moving_mean', - model._blocks[i]._bn1.running_var: 'blocks_' + str(i) + '/tpu_batch_normalization_1/moving_variance', - model._blocks[i]._bn2.bias: 'blocks_' + str(i) + '/tpu_batch_normalization_2/beta', - model._blocks[i]._bn2.weight: 'blocks_' + str(i) + '/tpu_batch_normalization_2/gamma', - model._blocks[i]._bn2.running_mean: 'blocks_' + str(i) + '/tpu_batch_normalization_2/moving_mean', - model._blocks[i]._bn2.running_var: 'blocks_' + str(i) + '/tpu_batch_normalization_2/moving_variance', - } - - conversion_table = merge(conversion_table, conversion_table_block) - - # Load TensorFlow parameters into PyTorch model - load_param(checkpoint_file, conversion_table, model_name) - return conversion_table - - -def load_and_save_temporary_tensorflow_model(model_name, model_ckpt, example_img= '../../example/img.jpg'): - """ Loads and saves a TensorFlow model. """ - image_files = [example_img] - eval_ckpt_driver = eval_ckpt_main.EvalCkptDriver(model_name) - with tf.Graph().as_default(), tf.compat.v1.Session() as sess: - images, labels = eval_ckpt_driver.build_dataset(image_files, [0] * len(image_files), False) - probs = eval_ckpt_driver.build_model(images, is_training=False) - sess.run(tf.compat.v1.global_variables_initializer()) - print(model_ckpt) - eval_ckpt_driver.restore_model(sess, model_ckpt) - tf.compat.v1.train.Saver().save(sess, 'tmp/model.ckpt') - - -if __name__ == '__main__': - - import sys - import argparse - - sys.path.append('original_tf') - import eval_ckpt_main - - from efficientnet_pytorch import EfficientNet - - parser = argparse.ArgumentParser( - description='Convert TF model to PyTorch model and save for easier future loading') - parser.add_argument('--model_name', type=str, default='efficientnet-b0', - help='efficientnet-b{N}, where N is an integer 0 <= N <= 8') - parser.add_argument('--tf_checkpoint', type=str, default='pretrained_tensorflow/efficientnet-b0/', - help='checkpoint file path') - parser.add_argument('--output_file', type=str, default='pretrained_pytorch/efficientnet-b0.pth', - help='output PyTorch model file name') - args = parser.parse_args() - - # Build model - model = EfficientNet.from_name(args.model_name) - - # Load and save temporary TensorFlow file due to TF nuances - print(args.tf_checkpoint) - load_and_save_temporary_tensorflow_model(args.model_name, args.tf_checkpoint) - - # Load weights - load_efficientnet(model, 'tmp/model.ckpt', model_name=args.model_name) - print('Loaded TF checkpoint weights') - - # Save PyTorch file - torch.save(model.state_dict(), args.output_file) - print('Saved model to', args.output_file) diff --git a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/load_tf_weights_tf1.py b/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/load_tf_weights_tf1.py deleted file mode 100644 index 0722a68389ae1a0d0827ad8635fae744e9d2dfe3..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/load_tf_weights_tf1.py +++ /dev/null @@ -1,172 +0,0 @@ -import numpy as np -import tensorflow as tf -import torch - -def load_param(checkpoint_file, conversion_table, model_name): - """ - Load parameters according to conversion_table. - - Args: - checkpoint_file (string): pretrained checkpoint model file in tensorflow - conversion_table (dict): { pytorch tensor in a model : checkpoint variable name } - """ - for pyt_param, tf_param_name in conversion_table.items(): - tf_param_name = str(model_name) + '/' + tf_param_name - tf_param = tf.train.load_variable(checkpoint_file, tf_param_name) - if 'conv' in tf_param_name and 'kernel' in tf_param_name: - tf_param = np.transpose(tf_param, (3, 2, 0, 1)) - if 'depthwise' in tf_param_name: - tf_param = np.transpose(tf_param, (1, 0, 2, 3)) - elif tf_param_name.endswith('kernel'): # for weight(kernel), we should do transpose - tf_param = np.transpose(tf_param) - assert pyt_param.size() == tf_param.shape, \ - 'Dim Mismatch: %s vs %s ; %s' % (tuple(pyt_param.size()), tf_param.shape, tf_param_name) - pyt_param.data = torch.from_numpy(tf_param) - - -def load_efficientnet(model, checkpoint_file, model_name): - """ - Load PyTorch EfficientNet from TensorFlow checkpoint file - """ - - # This will store the enire conversion table - conversion_table = {} - merge = lambda dict1, dict2: {**dict1, **dict2} - - # All the weights not in the conv blocks - conversion_table_for_weights_outside_blocks = { - model._conv_stem.weight: 'stem/conv2d/kernel', # [3, 3, 3, 32]), - model._bn0.bias: 'stem/tpu_batch_normalization/beta', # [32]), - model._bn0.weight: 'stem/tpu_batch_normalization/gamma', # [32]), - model._bn0.running_mean: 'stem/tpu_batch_normalization/moving_mean', # [32]), - model._bn0.running_var: 'stem/tpu_batch_normalization/moving_variance', # [32]), - model._conv_head.weight: 'head/conv2d/kernel', # [1, 1, 320, 1280]), - model._bn1.bias: 'head/tpu_batch_normalization/beta', # [1280]), - model._bn1.weight: 'head/tpu_batch_normalization/gamma', # [1280]), - model._bn1.running_mean: 'head/tpu_batch_normalization/moving_mean', # [32]), - model._bn1.running_var: 'head/tpu_batch_normalization/moving_variance', # [32]), - model._fc.bias: 'head/dense/bias', # [1000]), - model._fc.weight: 'head/dense/kernel', # [1280, 1000]), - } - conversion_table = merge(conversion_table, conversion_table_for_weights_outside_blocks) - - # The first conv block is special because it does not have _expand_conv - conversion_table_for_first_block = { - model._blocks[0]._project_conv.weight: 'blocks_0/conv2d/kernel', # 1, 1, 32, 16]), - model._blocks[0]._depthwise_conv.weight: 'blocks_0/depthwise_conv2d/depthwise_kernel', # [3, 3, 32, 1]), - model._blocks[0]._se_reduce.bias: 'blocks_0/se/conv2d/bias', # , [8]), - model._blocks[0]._se_reduce.weight: 'blocks_0/se/conv2d/kernel', # , [1, 1, 32, 8]), - model._blocks[0]._se_expand.bias: 'blocks_0/se/conv2d_1/bias', # , [32]), - model._blocks[0]._se_expand.weight: 'blocks_0/se/conv2d_1/kernel', # , [1, 1, 8, 32]), - model._blocks[0]._bn1.bias: 'blocks_0/tpu_batch_normalization/beta', # [32]), - model._blocks[0]._bn1.weight: 'blocks_0/tpu_batch_normalization/gamma', # [32]), - model._blocks[0]._bn1.running_mean: 'blocks_0/tpu_batch_normalization/moving_mean', - model._blocks[0]._bn1.running_var: 'blocks_0/tpu_batch_normalization/moving_variance', - model._blocks[0]._bn2.bias: 'blocks_0/tpu_batch_normalization_1/beta', # [16]), - model._blocks[0]._bn2.weight: 'blocks_0/tpu_batch_normalization_1/gamma', # [16]), - model._blocks[0]._bn2.running_mean: 'blocks_0/tpu_batch_normalization_1/moving_mean', - model._blocks[0]._bn2.running_var: 'blocks_0/tpu_batch_normalization_1/moving_variance', - } - conversion_table = merge(conversion_table, conversion_table_for_first_block) - - # Conv blocks - for i in range(len(model._blocks)): - - is_first_block = '_expand_conv.weight' not in [n for n, p in model._blocks[i].named_parameters()] - - if is_first_block: - conversion_table_block = { - model._blocks[i]._project_conv.weight: 'blocks_' + str(i) + '/conv2d/kernel', # 1, 1, 32, 16]), - model._blocks[i]._depthwise_conv.weight: 'blocks_' + str(i) + '/depthwise_conv2d/depthwise_kernel', - # [3, 3, 32, 1]), - model._blocks[i]._se_reduce.bias: 'blocks_' + str(i) + '/se/conv2d/bias', # , [8]), - model._blocks[i]._se_reduce.weight: 'blocks_' + str(i) + '/se/conv2d/kernel', # , [1, 1, 32, 8]), - model._blocks[i]._se_expand.bias: 'blocks_' + str(i) + '/se/conv2d_1/bias', # , [32]), - model._blocks[i]._se_expand.weight: 'blocks_' + str(i) + '/se/conv2d_1/kernel', # , [1, 1, 8, 32]), - model._blocks[i]._bn1.bias: 'blocks_' + str(i) + '/tpu_batch_normalization/beta', # [32]), - model._blocks[i]._bn1.weight: 'blocks_' + str(i) + '/tpu_batch_normalization/gamma', # [32]), - model._blocks[i]._bn1.running_mean: 'blocks_' + str(i) + '/tpu_batch_normalization/moving_mean', - model._blocks[i]._bn1.running_var: 'blocks_' + str(i) + '/tpu_batch_normalization/moving_variance', - model._blocks[i]._bn2.bias: 'blocks_' + str(i) + '/tpu_batch_normalization_1/beta', # [16]), - model._blocks[i]._bn2.weight: 'blocks_' + str(i) + '/tpu_batch_normalization_1/gamma', # [16]), - model._blocks[i]._bn2.running_mean: 'blocks_' + str(i) + '/tpu_batch_normalization_1/moving_mean', - model._blocks[i]._bn2.running_var: 'blocks_' + str(i) + '/tpu_batch_normalization_1/moving_variance', - } - - else: - conversion_table_block = { - model._blocks[i]._expand_conv.weight: 'blocks_' + str(i) + '/conv2d/kernel', - model._blocks[i]._project_conv.weight: 'blocks_' + str(i) + '/conv2d_1/kernel', - model._blocks[i]._depthwise_conv.weight: 'blocks_' + str(i) + '/depthwise_conv2d/depthwise_kernel', - model._blocks[i]._se_reduce.bias: 'blocks_' + str(i) + '/se/conv2d/bias', - model._blocks[i]._se_reduce.weight: 'blocks_' + str(i) + '/se/conv2d/kernel', - model._blocks[i]._se_expand.bias: 'blocks_' + str(i) + '/se/conv2d_1/bias', - model._blocks[i]._se_expand.weight: 'blocks_' + str(i) + '/se/conv2d_1/kernel', - model._blocks[i]._bn0.bias: 'blocks_' + str(i) + '/tpu_batch_normalization/beta', - model._blocks[i]._bn0.weight: 'blocks_' + str(i) + '/tpu_batch_normalization/gamma', - model._blocks[i]._bn0.running_mean: 'blocks_' + str(i) + '/tpu_batch_normalization/moving_mean', - model._blocks[i]._bn0.running_var: 'blocks_' + str(i) + '/tpu_batch_normalization/moving_variance', - model._blocks[i]._bn1.bias: 'blocks_' + str(i) + '/tpu_batch_normalization_1/beta', - model._blocks[i]._bn1.weight: 'blocks_' + str(i) + '/tpu_batch_normalization_1/gamma', - model._blocks[i]._bn1.running_mean: 'blocks_' + str(i) + '/tpu_batch_normalization_1/moving_mean', - model._blocks[i]._bn1.running_var: 'blocks_' + str(i) + '/tpu_batch_normalization_1/moving_variance', - model._blocks[i]._bn2.bias: 'blocks_' + str(i) + '/tpu_batch_normalization_2/beta', - model._blocks[i]._bn2.weight: 'blocks_' + str(i) + '/tpu_batch_normalization_2/gamma', - model._blocks[i]._bn2.running_mean: 'blocks_' + str(i) + '/tpu_batch_normalization_2/moving_mean', - model._blocks[i]._bn2.running_var: 'blocks_' + str(i) + '/tpu_batch_normalization_2/moving_variance', - } - - conversion_table = merge(conversion_table, conversion_table_block) - - # Load TensorFlow parameters into PyTorch model - load_param(checkpoint_file, conversion_table, model_name) - return conversion_table - - -def load_and_save_temporary_tensorflow_model(model_name, model_ckpt, example_img= '../../example/img.jpg'): - """ Loads and saves a TensorFlow model. """ - image_files = [example_img] - eval_ckpt_driver = eval_ckpt_main.EvalCkptDriver(model_name) - with tf.Graph().as_default(), tf.Session() as sess: - images, labels = eval_ckpt_driver.build_dataset(image_files, [0] * len(image_files), False) - probs = eval_ckpt_driver.build_model(images, is_training=False) - sess.run(tf.global_variables_initializer()) - print(model_ckpt) - eval_ckpt_driver.restore_model(sess, model_ckpt) - tf.train.Saver().save(sess, 'tmp/model.ckpt') - - -if __name__ == '__main__': - - import sys - import argparse - - sys.path.append('original_tf') - import eval_ckpt_main - - from efficientnet_pytorch import EfficientNet - - parser = argparse.ArgumentParser( - description='Convert TF model to PyTorch model and save for easier future loading') - parser.add_argument('--model_name', type=str, default='efficientnet-b0', - help='efficientnet-b{N}, where N is an integer 0 <= N <= 8') - parser.add_argument('--tf_checkpoint', type=str, default='pretrained_tensorflow/efficientnet-b0/', - help='checkpoint file path') - parser.add_argument('--output_file', type=str, default='pretrained_pytorch/efficientnet-b0.pth', - help='output PyTorch model file name') - args = parser.parse_args() - - # Build model - model = EfficientNet.from_name(args.model_name) - - # Load and save temporary TensorFlow file due to TF nuances - print(args.tf_checkpoint) - load_and_save_temporary_tensorflow_model(args.model_name, args.tf_checkpoint) - - # Load weights - load_efficientnet(model, 'tmp/model.ckpt', model_name=args.model_name) - print('Loaded TF checkpoint weights') - - # Save PyTorch file - torch.save(model.state_dict(), args.output_file) - print('Saved model to', args.output_file) diff --git a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/original_tf/__init__.py b/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/original_tf/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/original_tf/efficientnet_builder.py b/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/original_tf/efficientnet_builder.py deleted file mode 100644 index ff384b1126b8efc36e74c87e065976fedad21394..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/original_tf/efficientnet_builder.py +++ /dev/null @@ -1,329 +0,0 @@ -# Copyright 2019 The TensorFlow Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============================================================================== -"""Model Builder for EfficientNet.""" - -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -import functools -import os -import re -from absl import logging -import numpy as np -import six -import tensorflow.compat.v1 as tf - -import efficientnet_model -import utils -MEAN_RGB = [0.485 * 255, 0.456 * 255, 0.406 * 255] -STDDEV_RGB = [0.229 * 255, 0.224 * 255, 0.225 * 255] - - -def efficientnet_params(model_name): - """Get efficientnet params based on model name.""" - params_dict = { - # (width_coefficient, depth_coefficient, resolution, dropout_rate) - 'efficientnet-b0': (1.0, 1.0, 224, 0.2), - 'efficientnet-b1': (1.0, 1.1, 240, 0.2), - 'efficientnet-b2': (1.1, 1.2, 260, 0.3), - 'efficientnet-b3': (1.2, 1.4, 300, 0.3), - 'efficientnet-b4': (1.4, 1.8, 380, 0.4), - 'efficientnet-b5': (1.6, 2.2, 456, 0.4), - 'efficientnet-b6': (1.8, 2.6, 528, 0.5), - 'efficientnet-b7': (2.0, 3.1, 600, 0.5), - 'efficientnet-b8': (2.2, 3.6, 672, 0.5), - 'efficientnet-l2': (4.3, 5.3, 800, 0.5), - } - return params_dict[model_name] - - -class BlockDecoder(object): - """Block Decoder for readability.""" - - def _decode_block_string(self, block_string): - """Gets a block through a string notation of arguments.""" - if six.PY2: - assert isinstance(block_string, (str, unicode)) - else: - assert isinstance(block_string, str) - ops = block_string.split('_') - options = {} - for op in ops: - splits = re.split(r'(\d.*)', op) - if len(splits) >= 2: - key, value = splits[:2] - options[key] = value - - if 's' not in options or len(options['s']) != 2: - raise ValueError('Strides options should be a pair of integers.') - - return efficientnet_model.BlockArgs( - kernel_size=int(options['k']), - num_repeat=int(options['r']), - input_filters=int(options['i']), - output_filters=int(options['o']), - expand_ratio=int(options['e']), - id_skip=('noskip' not in block_string), - se_ratio=float(options['se']) if 'se' in options else None, - strides=[int(options['s'][0]), - int(options['s'][1])], - conv_type=int(options['c']) if 'c' in options else 0, - fused_conv=int(options['f']) if 'f' in options else 0, - super_pixel=int(options['p']) if 'p' in options else 0, - condconv=('cc' in block_string)) - - def _encode_block_string(self, block): - """Encodes a block to a string.""" - args = [ - 'r%d' % block.num_repeat, - 'k%d' % block.kernel_size, - 's%d%d' % (block.strides[0], block.strides[1]), - 'e%s' % block.expand_ratio, - 'i%d' % block.input_filters, - 'o%d' % block.output_filters, - 'c%d' % block.conv_type, - 'f%d' % block.fused_conv, - 'p%d' % block.super_pixel, - ] - if block.se_ratio > 0 and block.se_ratio <= 1: - args.append('se%s' % block.se_ratio) - if block.id_skip is False: # pylint: disable=g-bool-id-comparison - args.append('noskip') - if block.condconv: - args.append('cc') - return '_'.join(args) - - def decode(self, string_list): - """Decodes a list of string notations to specify blocks inside the network. - - Args: - string_list: a list of strings, each string is a notation of block. - - Returns: - A list of namedtuples to represent blocks arguments. - """ - assert isinstance(string_list, list) - blocks_args = [] - for block_string in string_list: - blocks_args.append(self._decode_block_string(block_string)) - return blocks_args - - def encode(self, blocks_args): - """Encodes a list of Blocks to a list of strings. - - Args: - blocks_args: A list of namedtuples to represent blocks arguments. - Returns: - a list of strings, each string is a notation of block. - """ - block_strings = [] - for block in blocks_args: - block_strings.append(self._encode_block_string(block)) - return block_strings - - -def swish(features, use_native=True, use_hard=False): - """Computes the Swish activation function. - - We provide three alternnatives: - - Native tf.nn.swish, use less memory during training than composable swish. - - Quantization friendly hard swish. - - A composable swish, equivalant to tf.nn.swish, but more general for - finetuning and TF-Hub. - - Args: - features: A `Tensor` representing preactivation values. - use_native: Whether to use the native swish from tf.nn that uses a custom - gradient to reduce memory usage, or to use customized swish that uses - default TensorFlow gradient computation. - use_hard: Whether to use quantization-friendly hard swish. - - Returns: - The activation value. - """ - if use_native and use_hard: - raise ValueError('Cannot specify both use_native and use_hard.') - - if use_native: - return tf.nn.swish(features) - - if use_hard: - return features * tf.nn.relu6(features + np.float32(3)) * (1. / 6.) - - features = tf.convert_to_tensor(features, name='features') - return features * tf.nn.sigmoid(features) - - -_DEFAULT_BLOCKS_ARGS = [ - 'r1_k3_s11_e1_i32_o16_se0.25', 'r2_k3_s22_e6_i16_o24_se0.25', - 'r2_k5_s22_e6_i24_o40_se0.25', 'r3_k3_s22_e6_i40_o80_se0.25', - 'r3_k5_s11_e6_i80_o112_se0.25', 'r4_k5_s22_e6_i112_o192_se0.25', - 'r1_k3_s11_e6_i192_o320_se0.25', -] - - -def efficientnet(width_coefficient=None, - depth_coefficient=None, - dropout_rate=0.2, - survival_prob=0.8): - """Creates a efficientnet model.""" - global_params = efficientnet_model.GlobalParams( - blocks_args=_DEFAULT_BLOCKS_ARGS, - batch_norm_momentum=0.99, - batch_norm_epsilon=1e-3, - dropout_rate=dropout_rate, - survival_prob=survival_prob, - data_format='channels_last', - num_classes=1000, - width_coefficient=width_coefficient, - depth_coefficient=depth_coefficient, - depth_divisor=8, - min_depth=None, - relu_fn=tf.nn.swish, - # The default is TPU-specific batch norm. - # The alternative is tf.layers.BatchNormalization. - batch_norm=utils.TpuBatchNormalization, # TPU-specific requirement. - use_se=True, - clip_projection_output=False) - return global_params - - -def get_model_params(model_name, override_params): - """Get the block args and global params for a given model.""" - if model_name.startswith('efficientnet'): - width_coefficient, depth_coefficient, _, dropout_rate = ( - efficientnet_params(model_name)) - global_params = efficientnet( - width_coefficient, depth_coefficient, dropout_rate) - else: - raise NotImplementedError('model name is not pre-defined: %s' % model_name) - - if override_params: - # ValueError will be raised here if override_params has fields not included - # in global_params. - global_params = global_params._replace(**override_params) - - decoder = BlockDecoder() - blocks_args = decoder.decode(global_params.blocks_args) - - logging.info('global_params= %s', global_params) - return blocks_args, global_params - - -def build_model(images, - model_name, - training, - override_params=None, - model_dir=None, - fine_tuning=False, - features_only=False, - pooled_features_only=False): - """A helper functiion to creates a model and returns predicted logits. - - Args: - images: input images tensor. - model_name: string, the predefined model name. - training: boolean, whether the model is constructed for training. - override_params: A dictionary of params for overriding. Fields must exist in - efficientnet_model.GlobalParams. - model_dir: string, optional model dir for saving configs. - fine_tuning: boolean, whether the model is used for finetuning. - features_only: build the base feature network only (excluding final - 1x1 conv layer, global pooling, dropout and fc head). - pooled_features_only: build the base network for features extraction (after - 1x1 conv layer and global pooling, but before dropout and fc head). - - Returns: - logits: the logits tensor of classes. - endpoints: the endpoints for each layer. - - Raises: - When model_name specified an undefined model, raises NotImplementedError. - When override_params has invalid fields, raises ValueError. - """ - assert isinstance(images, tf.Tensor) - assert not (features_only and pooled_features_only) - - # For backward compatibility. - if override_params and override_params.get('drop_connect_rate', None): - override_params['survival_prob'] = 1 - override_params['drop_connect_rate'] - - if not training or fine_tuning: - if not override_params: - override_params = {} - override_params['batch_norm'] = utils.BatchNormalization - if fine_tuning: - override_params['relu_fn'] = functools.partial(swish, use_native=False) - blocks_args, global_params = get_model_params(model_name, override_params) - - if model_dir: - param_file = os.path.join(model_dir, 'model_params.txt') - if not tf.gfile.Exists(param_file): - if not tf.gfile.Exists(model_dir): - tf.gfile.MakeDirs(model_dir) - with tf.gfile.GFile(param_file, 'w') as f: - logging.info('writing to %s', param_file) - f.write('model_name= %s\n\n' % model_name) - f.write('global_params= %s\n\n' % str(global_params)) - f.write('blocks_args= %s\n\n' % str(blocks_args)) - - with tf.variable_scope(model_name): - model = efficientnet_model.Model(blocks_args, global_params) - outputs = model( - images, - training=training, - features_only=features_only, - pooled_features_only=pooled_features_only) - if features_only: - outputs = tf.identity(outputs, 'features') - elif pooled_features_only: - outputs = tf.identity(outputs, 'pooled_features') - else: - outputs = tf.identity(outputs, 'logits') - return outputs, model.endpoints - - -def build_model_base(images, model_name, training, override_params=None): - """A helper functiion to create a base model and return global_pool. - - Args: - images: input images tensor. - model_name: string, the predefined model name. - training: boolean, whether the model is constructed for training. - override_params: A dictionary of params for overriding. Fields must exist in - efficientnet_model.GlobalParams. - - Returns: - features: global pool features. - endpoints: the endpoints for each layer. - - Raises: - When model_name specified an undefined model, raises NotImplementedError. - When override_params has invalid fields, raises ValueError. - """ - assert isinstance(images, tf.Tensor) - # For backward compatibility. - if override_params and override_params.get('drop_connect_rate', None): - override_params['survival_prob'] = 1 - override_params['drop_connect_rate'] - - blocks_args, global_params = get_model_params(model_name, override_params) - - with tf.variable_scope(model_name): - model = efficientnet_model.Model(blocks_args, global_params) - features = model(images, training=training, features_only=True) - - features = tf.identity(features, 'features') - return features, model.endpoints diff --git a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/original_tf/efficientnet_model.py b/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/original_tf/efficientnet_model.py deleted file mode 100644 index 6bc827e1e0de4ced8192f8e1920ff44afdbb0e93..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/original_tf/efficientnet_model.py +++ /dev/null @@ -1,713 +0,0 @@ -# Copyright 2019 The TensorFlow Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============================================================================== -"""Contains definitions for EfficientNet model. - -[1] Mingxing Tan, Quoc V. Le - EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks. - ICML'19, https://arxiv.org/abs/1905.11946 -""" - -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -import collections -import functools -import math - -from absl import logging -import numpy as np -import six -from six.moves import xrange -import tensorflow.compat.v1 as tf - -import utils -# from condconv import condconv_layers - -GlobalParams = collections.namedtuple('GlobalParams', [ - 'batch_norm_momentum', 'batch_norm_epsilon', 'dropout_rate', 'data_format', - 'num_classes', 'width_coefficient', 'depth_coefficient', 'depth_divisor', - 'min_depth', 'survival_prob', 'relu_fn', 'batch_norm', 'use_se', - 'local_pooling', 'condconv_num_experts', 'clip_projection_output', - 'blocks_args' -]) -GlobalParams.__new__.__defaults__ = (None,) * len(GlobalParams._fields) - -BlockArgs = collections.namedtuple('BlockArgs', [ - 'kernel_size', 'num_repeat', 'input_filters', 'output_filters', - 'expand_ratio', 'id_skip', 'strides', 'se_ratio', 'conv_type', 'fused_conv', - 'super_pixel', 'condconv' -]) -# defaults will be a public argument for namedtuple in Python 3.7 -# https://docs.python.org/3/library/collections.html#collections.namedtuple -BlockArgs.__new__.__defaults__ = (None,) * len(BlockArgs._fields) - - -def conv_kernel_initializer(shape, dtype=None, partition_info=None): - """Initialization for convolutional kernels. - - The main difference with tf.variance_scaling_initializer is that - tf.variance_scaling_initializer uses a truncated normal with an uncorrected - standard deviation, whereas here we use a normal distribution. Similarly, - tf.initializers.variance_scaling uses a truncated normal with - a corrected standard deviation. - - Args: - shape: shape of variable - dtype: dtype of variable - partition_info: unused - - Returns: - an initialization for the variable - """ - del partition_info - kernel_height, kernel_width, _, out_filters = shape - fan_out = int(kernel_height * kernel_width * out_filters) - return tf.random_normal( - shape, mean=0.0, stddev=np.sqrt(2.0 / fan_out), dtype=dtype) - - -def dense_kernel_initializer(shape, dtype=None, partition_info=None): - """Initialization for dense kernels. - - This initialization is equal to - tf.variance_scaling_initializer(scale=1.0/3.0, mode='fan_out', - distribution='uniform'). - It is written out explicitly here for clarity. - - Args: - shape: shape of variable - dtype: dtype of variable - partition_info: unused - - Returns: - an initialization for the variable - """ - del partition_info - init_range = 1.0 / np.sqrt(shape[1]) - return tf.random_uniform(shape, -init_range, init_range, dtype=dtype) - - -def superpixel_kernel_initializer(shape, dtype='float32', partition_info=None): - """Initializes superpixel kernels. - - This is inspired by space-to-depth transformation that is mathematically - equivalent before and after the transformation. But we do the space-to-depth - via a convolution. Moreover, we make the layer trainable instead of direct - transform, we can initialization it this way so that the model can learn not - to do anything but keep it mathematically equivalent, when improving - performance. - - - Args: - shape: shape of variable - dtype: dtype of variable - partition_info: unused - - Returns: - an initialization for the variable - """ - del partition_info - # use input depth to make superpixel kernel. - depth = shape[-2] - filters = np.zeros([2, 2, depth, 4 * depth], dtype=dtype) - i = np.arange(2) - j = np.arange(2) - k = np.arange(depth) - mesh = np.array(np.meshgrid(i, j, k)).T.reshape(-1, 3).T - filters[ - mesh[0], - mesh[1], - mesh[2], - 4 * mesh[2] + 2 * mesh[0] + mesh[1]] = 1 - return filters - - -def round_filters(filters, global_params): - """Round number of filters based on depth multiplier.""" - orig_f = filters - multiplier = global_params.width_coefficient - divisor = global_params.depth_divisor - min_depth = global_params.min_depth - if not multiplier: - return filters - - filters *= multiplier - min_depth = min_depth or divisor - new_filters = max(min_depth, int(filters + divisor / 2) // divisor * divisor) - # Make sure that round down does not go down by more than 10%. - if new_filters < 0.9 * filters: - new_filters += divisor - logging.info('round_filter input=%s output=%s', orig_f, new_filters) - return int(new_filters) - - -def round_repeats(repeats, global_params): - """Round number of filters based on depth multiplier.""" - multiplier = global_params.depth_coefficient - if not multiplier: - return repeats - return int(math.ceil(multiplier * repeats)) - - -class MBConvBlock(tf.keras.layers.Layer): - """A class of MBConv: Mobile Inverted Residual Bottleneck. - - Attributes: - endpoints: dict. A list of internal tensors. - """ - - def __init__(self, block_args, global_params): - """Initializes a MBConv block. - - Args: - block_args: BlockArgs, arguments to create a Block. - global_params: GlobalParams, a set of global parameters. - """ - super(MBConvBlock, self).__init__() - self._block_args = block_args - self._batch_norm_momentum = global_params.batch_norm_momentum - self._batch_norm_epsilon = global_params.batch_norm_epsilon - self._batch_norm = global_params.batch_norm - self._condconv_num_experts = global_params.condconv_num_experts - self._data_format = global_params.data_format - if self._data_format == 'channels_first': - self._channel_axis = 1 - self._spatial_dims = [2, 3] - else: - self._channel_axis = -1 - self._spatial_dims = [1, 2] - - self._relu_fn = global_params.relu_fn or tf.nn.swish - self._has_se = ( - global_params.use_se and self._block_args.se_ratio is not None and - 0 < self._block_args.se_ratio <= 1) - - self._clip_projection_output = global_params.clip_projection_output - - self.endpoints = None - - self.conv_cls = tf.layers.Conv2D - self.depthwise_conv_cls = utils.DepthwiseConv2D - if self._block_args.condconv: - self.conv_cls = functools.partial( - condconv_layers.CondConv2D, num_experts=self._condconv_num_experts) - self.depthwise_conv_cls = functools.partial( - condconv_layers.DepthwiseCondConv2D, - num_experts=self._condconv_num_experts) - - # Builds the block accordings to arguments. - self._build() - - def block_args(self): - return self._block_args - - def _build(self): - """Builds block according to the arguments.""" - if self._block_args.super_pixel == 1: - self._superpixel = tf.layers.Conv2D( - self._block_args.input_filters, - kernel_size=[2, 2], - strides=[2, 2], - kernel_initializer=conv_kernel_initializer, - padding='same', - data_format=self._data_format, - use_bias=False) - self._bnsp = self._batch_norm( - axis=self._channel_axis, - momentum=self._batch_norm_momentum, - epsilon=self._batch_norm_epsilon) - - if self._block_args.condconv: - # Add the example-dependent routing function - self._avg_pooling = tf.keras.layers.GlobalAveragePooling2D( - data_format=self._data_format) - self._routing_fn = tf.layers.Dense( - self._condconv_num_experts, activation=tf.nn.sigmoid) - - filters = self._block_args.input_filters * self._block_args.expand_ratio - kernel_size = self._block_args.kernel_size - - # Fused expansion phase. Called if using fused convolutions. - self._fused_conv = self.conv_cls( - filters=filters, - kernel_size=[kernel_size, kernel_size], - strides=self._block_args.strides, - kernel_initializer=conv_kernel_initializer, - padding='same', - data_format=self._data_format, - use_bias=False) - - # Expansion phase. Called if not using fused convolutions and expansion - # phase is necessary. - self._expand_conv = self.conv_cls( - filters=filters, - kernel_size=[1, 1], - strides=[1, 1], - kernel_initializer=conv_kernel_initializer, - padding='same', - data_format=self._data_format, - use_bias=False) - self._bn0 = self._batch_norm( - axis=self._channel_axis, - momentum=self._batch_norm_momentum, - epsilon=self._batch_norm_epsilon) - - # Depth-wise convolution phase. Called if not using fused convolutions. - self._depthwise_conv = self.depthwise_conv_cls( - kernel_size=[kernel_size, kernel_size], - strides=self._block_args.strides, - depthwise_initializer=conv_kernel_initializer, - padding='same', - data_format=self._data_format, - use_bias=False) - - self._bn1 = self._batch_norm( - axis=self._channel_axis, - momentum=self._batch_norm_momentum, - epsilon=self._batch_norm_epsilon) - - if self._has_se: - num_reduced_filters = max( - 1, int(self._block_args.input_filters * self._block_args.se_ratio)) - # Squeeze and Excitation layer. - self._se_reduce = tf.layers.Conv2D( - num_reduced_filters, - kernel_size=[1, 1], - strides=[1, 1], - kernel_initializer=conv_kernel_initializer, - padding='same', - data_format=self._data_format, - use_bias=True) - self._se_expand = tf.layers.Conv2D( - filters, - kernel_size=[1, 1], - strides=[1, 1], - kernel_initializer=conv_kernel_initializer, - padding='same', - data_format=self._data_format, - use_bias=True) - - # Output phase. - filters = self._block_args.output_filters - self._project_conv = self.conv_cls( - filters=filters, - kernel_size=[1, 1], - strides=[1, 1], - kernel_initializer=conv_kernel_initializer, - padding='same', - data_format=self._data_format, - use_bias=False) - self._bn2 = self._batch_norm( - axis=self._channel_axis, - momentum=self._batch_norm_momentum, - epsilon=self._batch_norm_epsilon) - - def _call_se(self, input_tensor): - """Call Squeeze and Excitation layer. - - Args: - input_tensor: Tensor, a single input tensor for Squeeze/Excitation layer. - - Returns: - A output tensor, which should have the same shape as input. - """ - se_tensor = tf.reduce_mean(input_tensor, self._spatial_dims, keepdims=True) - se_tensor = self._se_expand(self._relu_fn(self._se_reduce(se_tensor))) - logging.info('Built Squeeze and Excitation with tensor shape: %s', - (se_tensor.shape)) - return tf.sigmoid(se_tensor) * input_tensor - - def call(self, inputs, training=True, survival_prob=None): - """Implementation of call(). - - Args: - inputs: the inputs tensor. - training: boolean, whether the model is constructed for training. - survival_prob: float, between 0 to 1, drop connect rate. - - Returns: - A output tensor. - """ - logging.info('Block input: %s shape: %s', inputs.name, inputs.shape) - logging.info('Block input depth: %s output depth: %s', - self._block_args.input_filters, - self._block_args.output_filters) - - x = inputs - - fused_conv_fn = self._fused_conv - expand_conv_fn = self._expand_conv - depthwise_conv_fn = self._depthwise_conv - project_conv_fn = self._project_conv - - if self._block_args.condconv: - pooled_inputs = self._avg_pooling(inputs) - routing_weights = self._routing_fn(pooled_inputs) - # Capture routing weights as additional input to CondConv layers - fused_conv_fn = functools.partial( - self._fused_conv, routing_weights=routing_weights) - expand_conv_fn = functools.partial( - self._expand_conv, routing_weights=routing_weights) - depthwise_conv_fn = functools.partial( - self._depthwise_conv, routing_weights=routing_weights) - project_conv_fn = functools.partial( - self._project_conv, routing_weights=routing_weights) - - # creates conv 2x2 kernel - if self._block_args.super_pixel == 1: - with tf.variable_scope('super_pixel'): - x = self._relu_fn( - self._bnsp(self._superpixel(x), training=training)) - logging.info( - 'Block start with SuperPixel: %s shape: %s', x.name, x.shape) - - if self._block_args.fused_conv: - # If use fused mbconv, skip expansion and use regular conv. - x = self._relu_fn(self._bn1(fused_conv_fn(x), training=training)) - logging.info('Conv2D: %s shape: %s', x.name, x.shape) - else: - # Otherwise, first apply expansion and then apply depthwise conv. - if self._block_args.expand_ratio != 1: - x = self._relu_fn(self._bn0(expand_conv_fn(x), training=training)) - logging.info('Expand: %s shape: %s', x.name, x.shape) - - x = self._relu_fn(self._bn1(depthwise_conv_fn(x), training=training)) - logging.info('DWConv: %s shape: %s', x.name, x.shape) - - if self._has_se: - with tf.variable_scope('se'): - x = self._call_se(x) - - self.endpoints = {'expansion_output': x} - - x = self._bn2(project_conv_fn(x), training=training) - # Add identity so that quantization-aware training can insert quantization - # ops correctly. - x = tf.identity(x) - if self._clip_projection_output: - x = tf.clip_by_value(x, -6, 6) - if self._block_args.id_skip: - if all( - s == 1 for s in self._block_args.strides - ) and self._block_args.input_filters == self._block_args.output_filters: - # Apply only if skip connection presents. - if survival_prob: - x = utils.drop_connect(x, training, survival_prob) - x = tf.add(x, inputs) - logging.info('Project: %s shape: %s', x.name, x.shape) - return x - - -class MBConvBlockWithoutDepthwise(MBConvBlock): - """MBConv-like block without depthwise convolution and squeeze-and-excite.""" - - def _build(self): - """Builds block according to the arguments.""" - filters = self._block_args.input_filters * self._block_args.expand_ratio - if self._block_args.expand_ratio != 1: - # Expansion phase: - self._expand_conv = tf.layers.Conv2D( - filters, - kernel_size=[3, 3], - strides=[1, 1], - kernel_initializer=conv_kernel_initializer, - padding='same', - use_bias=False) - self._bn0 = self._batch_norm( - axis=self._channel_axis, - momentum=self._batch_norm_momentum, - epsilon=self._batch_norm_epsilon) - - # Output phase: - filters = self._block_args.output_filters - self._project_conv = tf.layers.Conv2D( - filters, - kernel_size=[1, 1], - strides=self._block_args.strides, - kernel_initializer=conv_kernel_initializer, - padding='same', - use_bias=False) - self._bn1 = self._batch_norm( - axis=self._channel_axis, - momentum=self._batch_norm_momentum, - epsilon=self._batch_norm_epsilon) - - def call(self, inputs, training=True, survival_prob=None): - """Implementation of call(). - - Args: - inputs: the inputs tensor. - training: boolean, whether the model is constructed for training. - survival_prob: float, between 0 to 1, drop connect rate. - - Returns: - A output tensor. - """ - logging.info('Block input: %s shape: %s', inputs.name, inputs.shape) - if self._block_args.expand_ratio != 1: - x = self._relu_fn(self._bn0(self._expand_conv(inputs), training=training)) - else: - x = inputs - logging.info('Expand: %s shape: %s', x.name, x.shape) - - self.endpoints = {'expansion_output': x} - - x = self._bn1(self._project_conv(x), training=training) - # Add identity so that quantization-aware training can insert quantization - # ops correctly. - x = tf.identity(x) - if self._clip_projection_output: - x = tf.clip_by_value(x, -6, 6) - - if self._block_args.id_skip: - if all( - s == 1 for s in self._block_args.strides - ) and self._block_args.input_filters == self._block_args.output_filters: - # Apply only if skip connection presents. - if survival_prob: - x = utils.drop_connect(x, training, survival_prob) - x = tf.add(x, inputs) - logging.info('Project: %s shape: %s', x.name, x.shape) - return x - - -class Model(tf.keras.Model): - """A class implements tf.keras.Model for MNAS-like model. - - Reference: https://arxiv.org/abs/1807.11626 - """ - - def __init__(self, blocks_args=None, global_params=None): - """Initializes an `Model` instance. - - Args: - blocks_args: A list of BlockArgs to construct block modules. - global_params: GlobalParams, a set of global parameters. - - Raises: - ValueError: when blocks_args is not specified as a list. - """ - super(Model, self).__init__() - if not isinstance(blocks_args, list): - raise ValueError('blocks_args should be a list.') - self._global_params = global_params - self._blocks_args = blocks_args - self._relu_fn = global_params.relu_fn or tf.nn.swish - self._batch_norm = global_params.batch_norm - - self.endpoints = None - - self._build() - - def _get_conv_block(self, conv_type): - conv_block_map = {0: MBConvBlock, 1: MBConvBlockWithoutDepthwise} - return conv_block_map[conv_type] - - def _build(self): - """Builds a model.""" - self._blocks = [] - batch_norm_momentum = self._global_params.batch_norm_momentum - batch_norm_epsilon = self._global_params.batch_norm_epsilon - if self._global_params.data_format == 'channels_first': - channel_axis = 1 - self._spatial_dims = [2, 3] - else: - channel_axis = -1 - self._spatial_dims = [1, 2] - - # Stem part. - self._conv_stem = tf.layers.Conv2D( - filters=round_filters(32, self._global_params), - kernel_size=[3, 3], - strides=[2, 2], - kernel_initializer=conv_kernel_initializer, - padding='same', - data_format=self._global_params.data_format, - use_bias=False) - self._bn0 = self._batch_norm( - axis=channel_axis, - momentum=batch_norm_momentum, - epsilon=batch_norm_epsilon) - - # Builds blocks. - for block_args in self._blocks_args: - assert block_args.num_repeat > 0 - assert block_args.super_pixel in [0, 1, 2] - # Update block input and output filters based on depth multiplier. - input_filters = round_filters(block_args.input_filters, - self._global_params) - output_filters = round_filters(block_args.output_filters, - self._global_params) - kernel_size = block_args.kernel_size - block_args = block_args._replace( - input_filters=input_filters, - output_filters=output_filters, - num_repeat=round_repeats(block_args.num_repeat, self._global_params)) - - # The first block needs to take care of stride and filter size increase. - conv_block = self._get_conv_block(block_args.conv_type) - if not block_args.super_pixel: # no super_pixel at all - self._blocks.append(conv_block(block_args, self._global_params)) - else: - # if superpixel, adjust filters, kernels, and strides. - depth_factor = int(4 / block_args.strides[0] / block_args.strides[1]) - block_args = block_args._replace( - input_filters=block_args.input_filters * depth_factor, - output_filters=block_args.output_filters * depth_factor, - kernel_size=((block_args.kernel_size + 1) // 2 if depth_factor > 1 - else block_args.kernel_size)) - # if the first block has stride-2 and super_pixel trandformation - if (block_args.strides[0] == 2 and block_args.strides[1] == 2): - block_args = block_args._replace(strides=[1, 1]) - self._blocks.append(conv_block(block_args, self._global_params)) - block_args = block_args._replace( # sp stops at stride-2 - super_pixel=0, - input_filters=input_filters, - output_filters=output_filters, - kernel_size=kernel_size) - elif block_args.super_pixel == 1: - self._blocks.append(conv_block(block_args, self._global_params)) - block_args = block_args._replace(super_pixel=2) - else: - self._blocks.append(conv_block(block_args, self._global_params)) - if block_args.num_repeat > 1: # rest of blocks with the same block_arg - # pylint: disable=protected-access - block_args = block_args._replace( - input_filters=block_args.output_filters, strides=[1, 1]) - # pylint: enable=protected-access - for _ in xrange(block_args.num_repeat - 1): - self._blocks.append(conv_block(block_args, self._global_params)) - - # Head part. - self._conv_head = tf.layers.Conv2D( - filters=round_filters(1280, self._global_params), - kernel_size=[1, 1], - strides=[1, 1], - kernel_initializer=conv_kernel_initializer, - padding='same', - use_bias=False) - self._bn1 = self._batch_norm( - axis=channel_axis, - momentum=batch_norm_momentum, - epsilon=batch_norm_epsilon) - - self._avg_pooling = tf.keras.layers.GlobalAveragePooling2D( - data_format=self._global_params.data_format) - if self._global_params.num_classes: - self._fc = tf.layers.Dense( - self._global_params.num_classes, - kernel_initializer=dense_kernel_initializer) - else: - self._fc = None - - if self._global_params.dropout_rate > 0: - self._dropout = tf.keras.layers.Dropout(self._global_params.dropout_rate) - else: - self._dropout = None - - def call(self, - inputs, - training=True, - features_only=None, - pooled_features_only=False): - """Implementation of call(). - - Args: - inputs: input tensors. - training: boolean, whether the model is constructed for training. - features_only: build the base feature network only. - pooled_features_only: build the base network for features extraction - (after 1x1 conv layer and global pooling, but before dropout and fc - head). - - Returns: - output tensors. - """ - outputs = None - self.endpoints = {} - reduction_idx = 0 - # Calls Stem layers - with tf.variable_scope('stem'): - outputs = self._relu_fn( - self._bn0(self._conv_stem(inputs), training=training)) - logging.info('Built stem layers with output shape: %s', outputs.shape) - self.endpoints['stem'] = outputs - - # Calls blocks. - for idx, block in enumerate(self._blocks): - is_reduction = False # reduction flag for blocks after the stem layer - # If the first block has super-pixel (space-to-depth) layer, then stem is - # the first reduction point. - if (block.block_args().super_pixel == 1 and idx == 0): - reduction_idx += 1 - self.endpoints['reduction_%s' % reduction_idx] = outputs - - elif ((idx == len(self._blocks) - 1) or - self._blocks[idx + 1].block_args().strides[0] > 1): - is_reduction = True - reduction_idx += 1 - - with tf.variable_scope('blocks_%s' % idx): - survival_prob = self._global_params.survival_prob - if survival_prob: - drop_rate = 1.0 - survival_prob - survival_prob = 1.0 - drop_rate * float(idx) / len(self._blocks) - logging.info('block_%s survival_prob: %s', idx, survival_prob) - outputs = block.call( - outputs, training=training, survival_prob=survival_prob) - self.endpoints['block_%s' % idx] = outputs - if is_reduction: - self.endpoints['reduction_%s' % reduction_idx] = outputs - if block.endpoints: - for k, v in six.iteritems(block.endpoints): - self.endpoints['block_%s/%s' % (idx, k)] = v - if is_reduction: - self.endpoints['reduction_%s/%s' % (reduction_idx, k)] = v - self.endpoints['features'] = outputs - - if not features_only: - # Calls final layers and returns logits. - with tf.variable_scope('head'): - outputs = self._relu_fn( - self._bn1(self._conv_head(outputs), training=training)) - self.endpoints['head_1x1'] = outputs - - if self._global_params.local_pooling: - shape = outputs.get_shape().as_list() - kernel_size = [ - 1, shape[self._spatial_dims[0]], shape[self._spatial_dims[1]], 1] - outputs = tf.nn.avg_pool( - outputs, ksize=kernel_size, strides=[1, 1, 1, 1], padding='VALID') - self.endpoints['pooled_features'] = outputs - if not pooled_features_only: - if self._dropout: - outputs = self._dropout(outputs, training=training) - self.endpoints['global_pool'] = outputs - if self._fc: - outputs = tf.squeeze(outputs, self._spatial_dims) - outputs = self._fc(outputs) - self.endpoints['head'] = outputs - else: - outputs = self._avg_pooling(outputs) - self.endpoints['pooled_features'] = outputs - if not pooled_features_only: - if self._dropout: - outputs = self._dropout(outputs, training=training) - self.endpoints['global_pool'] = outputs - if self._fc: - outputs = self._fc(outputs) - self.endpoints['head'] = outputs - return outputs diff --git a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/original_tf/eval_ckpt_main.py b/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/original_tf/eval_ckpt_main.py deleted file mode 100644 index 5993c323b3a8340fd0914ef56bf2a75cda5723d6..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/original_tf/eval_ckpt_main.py +++ /dev/null @@ -1,225 +0,0 @@ -# Copyright 2019 The TensorFlow Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============================================================================== -"""Eval checkpoint driver. - -This is an example evaluation script for users to understand the EfficientNet -model checkpoints on CPU. To serve EfficientNet, please consider to export a -`SavedModel` from checkpoints and use tf-serving to serve. -""" - -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -import json -import sys -from absl import app -from absl import flags -import numpy as np -import tensorflow as tf - - -import efficientnet_builder -import preprocessing - - -tf.compat.v1.disable_v2_behavior() - -flags.DEFINE_string('model_name', 'efficientnet-b0', 'Model name to eval.') -flags.DEFINE_string('runmode', 'examples', 'Running mode: examples or imagenet') -flags.DEFINE_string('imagenet_eval_glob', None, - 'Imagenet eval image glob, ' - 'such as /imagenet/ILSVRC2012*.JPEG') -flags.DEFINE_string('imagenet_eval_label', None, - 'Imagenet eval label file path, ' - 'such as /imagenet/ILSVRC2012_validation_ground_truth.txt') -flags.DEFINE_string('ckpt_dir', '/tmp/ckpt/', 'Checkpoint folders') -flags.DEFINE_string('example_img', '/tmp/panda.jpg', - 'Filepath for a single example image.') -flags.DEFINE_string('labels_map_file', '/tmp/labels_map.txt', - 'Labels map from label id to its meaning.') -flags.DEFINE_integer('num_images', 5000, - 'Number of images to eval. Use -1 to eval all images.') -FLAGS = flags.FLAGS - -MEAN_RGB = [0.485 * 255, 0.456 * 255, 0.406 * 255] -STDDEV_RGB = [0.229 * 255, 0.224 * 255, 0.225 * 255] - - -class EvalCkptDriver(object): - """A driver for running eval inference. - - Attributes: - model_name: str. Model name to eval. - batch_size: int. Eval batch size. - num_classes: int. Number of classes, default to 1000 for ImageNet. - image_size: int. Input image size, determined by model name. - """ - - def __init__(self, model_name='efficientnet-b0', batch_size=1): - """Initialize internal variables.""" - self.model_name = model_name - self.batch_size = batch_size - self.num_classes = 1000 - # Model Scaling parameters - _, _, self.image_size, _ = efficientnet_builder.efficientnet_params( - model_name) - - def restore_model(self, sess, ckpt_dir): - """Restore variables from checkpoint dir.""" - checkpoint = tf.train.latest_checkpoint(ckpt_dir) - ema = tf.train.ExponentialMovingAverage(decay=0.9999) - ema_vars = tf.compat.v1.trainable_variables() + tf.compat.v1.get_collection('moving_vars') - for v in tf.compat.v1.global_variables(): - if 'moving_mean' in v.name or 'moving_variance' in v.name: - ema_vars.append(v) - ema_vars = list(set(ema_vars)) - var_dict = ema.variables_to_restore(ema_vars) - saver = tf.compat.v1.train.Saver(var_dict, max_to_keep=1) - saver.restore(sess, checkpoint) - - def build_model(self, features, is_training): - """Build model with input features.""" - features -= tf.constant(MEAN_RGB, shape=[1, 1, 3], dtype=features.dtype) - features /= tf.constant(STDDEV_RGB, shape=[1, 1, 3], dtype=features.dtype) - logits, _ = efficientnet_builder.build_model( - features, self.model_name, is_training) - probs = tf.nn.softmax(logits) - probs = tf.squeeze(probs) - return probs - - def build_dataset(self, filenames, labels, is_training): - """Build input dataset.""" - filenames = tf.constant(filenames) - labels = tf.constant(labels) - - dataset = tf.compat.v1.data.Dataset.from_tensor_slices((filenames, labels)) - - def _parse_function(filename, label): - image_string = tf.io.read_file(filename) - image_decoded = preprocessing.preprocess_image( - image_string, is_training, self.image_size) - image = tf.cast(image_decoded, tf.float32) - return image, label - - dataset = dataset.map(_parse_function) - dataset = dataset.batch(self.batch_size) - - iterator = dataset.make_one_shot_iterator() - #iterator = iter(dataset) - images, labels = iterator.get_next() - return images, labels - - def run_inference(self, ckpt_dir, image_files, labels): - """Build and run inference on the target images and labels.""" - with tf.Graph().as_default(), tf.Session() as sess: - images, labels = self.build_dataset(image_files, labels, False) - probs = self.build_model(images, is_training=False) - - sess.run(tf.global_variables_initializer()) - self.restore_model(sess, ckpt_dir) - - prediction_idx = [] - prediction_prob = [] - for _ in range(len(image_files) // self.batch_size): - out_probs = sess.run(probs) - idx = np.argsort(out_probs)[::-1] - prediction_idx.append(idx[:5]) - prediction_prob.append([out_probs[pid] for pid in idx[:5]]) - - # Return the top 5 predictions (idx and prob) for each image. - return prediction_idx, prediction_prob - - -def eval_example_images(model_name, ckpt_dir, image_files, labels_map_file): - """Eval a list of example images. - - Args: - model_name: str. The name of model to eval. - ckpt_dir: str. Checkpoint directory path. - image_files: List[str]. A list of image file paths. - labels_map_file: str. The labels map file path. - - Returns: - A tuple (pred_idx, and pred_prob), where pred_idx is the top 5 prediction - index and pred_prob is the top 5 prediction probability. - """ - eval_ckpt_driver = EvalCkptDriver(model_name) - classes = json.loads(tf.gfile.Open(labels_map_file).read()) - pred_idx, pred_prob = eval_ckpt_driver.run_inference( - ckpt_dir, image_files, [0] * len(image_files)) - for i in range(len(image_files)): - print('predicted class for image {}: '.format(image_files[i])) - for j, idx in enumerate(pred_idx[i]): - print(' -> top_{} ({:4.2f}%): {} '.format( - j, pred_prob[i][j] * 100, classes[str(idx)])) - return pred_idx, pred_prob - - -def eval_imagenet(model_name, - ckpt_dir, - imagenet_eval_glob, - imagenet_eval_label, - num_images): - """Eval ImageNet images and report top1/top5 accuracy. - - Args: - model_name: str. The name of model to eval. - ckpt_dir: str. Checkpoint directory path. - imagenet_eval_glob: str. File path glob for all eval images. - imagenet_eval_label: str. File path for eval label. - num_images: int. Number of images to eval: -1 means eval the whole dataset. - - Returns: - A tuple (top1, top5) for top1 and top5 accuracy. - """ - eval_ckpt_driver = EvalCkptDriver(model_name) - imagenet_val_labels = [int(i) for i in tf.gfile.GFile(imagenet_eval_label)] - imagenet_filenames = sorted(tf.gfile.Glob(imagenet_eval_glob)) - if num_images < 0: - num_images = len(imagenet_filenames) - image_files = imagenet_filenames[:num_images] - labels = imagenet_val_labels[:num_images] - - pred_idx, _ = eval_ckpt_driver.run_inference(ckpt_dir, image_files, labels) - top1_cnt, top5_cnt = 0.0, 0.0 - for i, label in enumerate(labels): - top1_cnt += label in pred_idx[i][:1] - top5_cnt += label in pred_idx[i][:5] - if i % 100 == 0: - print('Step {}: top1_acc = {:4.2f}% top5_acc = {:4.2f}%'.format( - i, 100 * top1_cnt / (i + 1), 100 * top5_cnt / (i + 1))) - sys.stdout.flush() - top1, top5 = 100 * top1_cnt / num_images, 100 * top5_cnt / num_images - print('Final: top1_acc = {:4.2f}% top5_acc = {:4.2f}%'.format(top1, top5)) - return top1, top5 - - -def main(unused_argv): - tf.logging.set_verbosity(tf.logging.ERROR) - if FLAGS.runmode == 'examples': - # Run inference for an example image. - eval_example_images(FLAGS.model_name, FLAGS.ckpt_dir, [FLAGS.example_img], - FLAGS.labels_map_file) - elif FLAGS.runmode == 'imagenet': - # Run inference for imagenet. - eval_imagenet(FLAGS.model_name, FLAGS.ckpt_dir, FLAGS.imagenet_eval_glob, - FLAGS.imagenet_eval_label, FLAGS.num_images) - else: - print('must specify runmode: examples or imagenet') - - -if __name__ == '__main__': - app.run(main) diff --git a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/original_tf/eval_ckpt_main_tf1.py b/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/original_tf/eval_ckpt_main_tf1.py deleted file mode 100644 index e869d4ee767f3444e9872a023da00730a95cd4ad..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/original_tf/eval_ckpt_main_tf1.py +++ /dev/null @@ -1,221 +0,0 @@ -# Copyright 2019 The TensorFlow Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============================================================================== -"""Eval checkpoint driver. - -This is an example evaluation script for users to understand the EfficientNet -model checkpoints on CPU. To serve EfficientNet, please consider to export a -`SavedModel` from checkpoints and use tf-serving to serve. -""" - -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -import json -import sys -from absl import app -from absl import flags -import numpy as np -import tensorflow as tf - - -import efficientnet_builder -import preprocessing - - -flags.DEFINE_string('model_name', 'efficientnet-b0', 'Model name to eval.') -flags.DEFINE_string('runmode', 'examples', 'Running mode: examples or imagenet') -flags.DEFINE_string('imagenet_eval_glob', None, - 'Imagenet eval image glob, ' - 'such as /imagenet/ILSVRC2012*.JPEG') -flags.DEFINE_string('imagenet_eval_label', None, - 'Imagenet eval label file path, ' - 'such as /imagenet/ILSVRC2012_validation_ground_truth.txt') -flags.DEFINE_string('ckpt_dir', '/tmp/ckpt/', 'Checkpoint folders') -flags.DEFINE_string('example_img', '/tmp/panda.jpg', - 'Filepath for a single example image.') -flags.DEFINE_string('labels_map_file', '/tmp/labels_map.txt', - 'Labels map from label id to its meaning.') -flags.DEFINE_integer('num_images', 5000, - 'Number of images to eval. Use -1 to eval all images.') -FLAGS = flags.FLAGS - -MEAN_RGB = [0.485 * 255, 0.456 * 255, 0.406 * 255] -STDDEV_RGB = [0.229 * 255, 0.224 * 255, 0.225 * 255] - - -class EvalCkptDriver(object): - """A driver for running eval inference. - - Attributes: - model_name: str. Model name to eval. - batch_size: int. Eval batch size. - num_classes: int. Number of classes, default to 1000 for ImageNet. - image_size: int. Input image size, determined by model name. - """ - - def __init__(self, model_name='efficientnet-b0', batch_size=1): - """Initialize internal variables.""" - self.model_name = model_name - self.batch_size = batch_size - self.num_classes = 1000 - # Model Scaling parameters - _, _, self.image_size, _ = efficientnet_builder.efficientnet_params( - model_name) - - def restore_model(self, sess, ckpt_dir): - """Restore variables from checkpoint dir.""" - checkpoint = tf.train.latest_checkpoint(ckpt_dir) - ema = tf.train.ExponentialMovingAverage(decay=0.9999) - ema_vars = tf.trainable_variables() + tf.get_collection('moving_vars') - for v in tf.global_variables(): - if 'moving_mean' in v.name or 'moving_variance' in v.name: - ema_vars.append(v) - ema_vars = list(set(ema_vars)) - var_dict = ema.variables_to_restore(ema_vars) - saver = tf.train.Saver(var_dict, max_to_keep=1) - saver.restore(sess, checkpoint) - - def build_model(self, features, is_training): - """Build model with input features.""" - features -= tf.constant(MEAN_RGB, shape=[1, 1, 3], dtype=features.dtype) - features /= tf.constant(STDDEV_RGB, shape=[1, 1, 3], dtype=features.dtype) - logits, _ = efficientnet_builder.build_model( - features, self.model_name, is_training) - probs = tf.nn.softmax(logits) - probs = tf.squeeze(probs) - return probs - - def build_dataset(self, filenames, labels, is_training): - """Build input dataset.""" - filenames = tf.constant(filenames) - labels = tf.constant(labels) - dataset = tf.data.Dataset.from_tensor_slices((filenames, labels)) - - def _parse_function(filename, label): - image_string = tf.read_file(filename) - image_decoded = preprocessing.preprocess_image( - image_string, is_training, self.image_size) - image = tf.cast(image_decoded, tf.float32) - return image, label - - dataset = dataset.map(_parse_function) - dataset = dataset.batch(self.batch_size) - - iterator = dataset.make_one_shot_iterator() - images, labels = iterator.get_next() - return images, labels - - def run_inference(self, ckpt_dir, image_files, labels): - """Build and run inference on the target images and labels.""" - with tf.Graph().as_default(), tf.Session() as sess: - images, labels = self.build_dataset(image_files, labels, False) - probs = self.build_model(images, is_training=False) - - sess.run(tf.global_variables_initializer()) - self.restore_model(sess, ckpt_dir) - - prediction_idx = [] - prediction_prob = [] - for _ in range(len(image_files) // self.batch_size): - out_probs = sess.run(probs) - idx = np.argsort(out_probs)[::-1] - prediction_idx.append(idx[:5]) - prediction_prob.append([out_probs[pid] for pid in idx[:5]]) - - # Return the top 5 predictions (idx and prob) for each image. - return prediction_idx, prediction_prob - - -def eval_example_images(model_name, ckpt_dir, image_files, labels_map_file): - """Eval a list of example images. - - Args: - model_name: str. The name of model to eval. - ckpt_dir: str. Checkpoint directory path. - image_files: List[str]. A list of image file paths. - labels_map_file: str. The labels map file path. - - Returns: - A tuple (pred_idx, and pred_prob), where pred_idx is the top 5 prediction - index and pred_prob is the top 5 prediction probability. - """ - eval_ckpt_driver = EvalCkptDriver(model_name) - classes = json.loads(tf.gfile.Open(labels_map_file).read()) - pred_idx, pred_prob = eval_ckpt_driver.run_inference( - ckpt_dir, image_files, [0] * len(image_files)) - for i in range(len(image_files)): - print('predicted class for image {}: '.format(image_files[i])) - for j, idx in enumerate(pred_idx[i]): - print(' -> top_{} ({:4.2f}%): {} '.format( - j, pred_prob[i][j] * 100, classes[str(idx)])) - return pred_idx, pred_prob - - -def eval_imagenet(model_name, - ckpt_dir, - imagenet_eval_glob, - imagenet_eval_label, - num_images): - """Eval ImageNet images and report top1/top5 accuracy. - - Args: - model_name: str. The name of model to eval. - ckpt_dir: str. Checkpoint directory path. - imagenet_eval_glob: str. File path glob for all eval images. - imagenet_eval_label: str. File path for eval label. - num_images: int. Number of images to eval: -1 means eval the whole dataset. - - Returns: - A tuple (top1, top5) for top1 and top5 accuracy. - """ - eval_ckpt_driver = EvalCkptDriver(model_name) - imagenet_val_labels = [int(i) for i in tf.gfile.GFile(imagenet_eval_label)] - imagenet_filenames = sorted(tf.gfile.Glob(imagenet_eval_glob)) - if num_images < 0: - num_images = len(imagenet_filenames) - image_files = imagenet_filenames[:num_images] - labels = imagenet_val_labels[:num_images] - - pred_idx, _ = eval_ckpt_driver.run_inference(ckpt_dir, image_files, labels) - top1_cnt, top5_cnt = 0.0, 0.0 - for i, label in enumerate(labels): - top1_cnt += label in pred_idx[i][:1] - top5_cnt += label in pred_idx[i][:5] - if i % 100 == 0: - print('Step {}: top1_acc = {:4.2f}% top5_acc = {:4.2f}%'.format( - i, 100 * top1_cnt / (i + 1), 100 * top5_cnt / (i + 1))) - sys.stdout.flush() - top1, top5 = 100 * top1_cnt / num_images, 100 * top5_cnt / num_images - print('Final: top1_acc = {:4.2f}% top5_acc = {:4.2f}%'.format(top1, top5)) - return top1, top5 - - -def main(unused_argv): - tf.logging.set_verbosity(tf.logging.ERROR) - if FLAGS.runmode == 'examples': - # Run inference for an example image. - eval_example_images(FLAGS.model_name, FLAGS.ckpt_dir, [FLAGS.example_img], - FLAGS.labels_map_file) - elif FLAGS.runmode == 'imagenet': - # Run inference for imagenet. - eval_imagenet(FLAGS.model_name, FLAGS.ckpt_dir, FLAGS.imagenet_eval_glob, - FLAGS.imagenet_eval_label, FLAGS.num_images) - else: - print('must specify runmode: examples or imagenet') - - -if __name__ == '__main__': - app.run(main) diff --git a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/original_tf/preprocessing.py b/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/original_tf/preprocessing.py deleted file mode 100644 index e7af8ab625d40d9581ed47db3517feab74fe380d..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/original_tf/preprocessing.py +++ /dev/null @@ -1,241 +0,0 @@ -# Copyright 2019 The TensorFlow Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============================================================================== -"""ImageNet preprocessing.""" -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -from absl import logging - -import tensorflow.compat.v1 as tf - - -IMAGE_SIZE = 224 -CROP_PADDING = 32 - - -def distorted_bounding_box_crop(image_bytes, - bbox, - min_object_covered=0.1, - aspect_ratio_range=(0.75, 1.33), - area_range=(0.05, 1.0), - max_attempts=100, - scope=None): - """Generates cropped_image using one of the bboxes randomly distorted. - - See `tf.image.sample_distorted_bounding_box` for more documentation. - - Args: - image_bytes: `Tensor` of binary image data. - bbox: `Tensor` of bounding boxes arranged `[1, num_boxes, coords]` - where each coordinate is [0, 1) and the coordinates are arranged - as `[ymin, xmin, ymax, xmax]`. If num_boxes is 0 then use the whole - image. - min_object_covered: An optional `float`. Defaults to `0.1`. The cropped - area of the image must contain at least this fraction of any bounding - box supplied. - aspect_ratio_range: An optional list of `float`s. The cropped area of the - image must have an aspect ratio = width / height within this range. - area_range: An optional list of `float`s. The cropped area of the image - must contain a fraction of the supplied image within in this range. - max_attempts: An optional `int`. Number of attempts at generating a cropped - region of the image of the specified constraints. After `max_attempts` - failures, return the entire image. - scope: Optional `str` for name scope. - Returns: - cropped image `Tensor` - """ - with tf.name_scope(scope, 'distorted_bounding_box_crop', [image_bytes, bbox]): - shape = tf.image.extract_jpeg_shape(image_bytes) - sample_distorted_bounding_box = tf.image.sample_distorted_bounding_box( - shape, - bounding_boxes=bbox, - min_object_covered=min_object_covered, - aspect_ratio_range=aspect_ratio_range, - area_range=area_range, - max_attempts=max_attempts, - use_image_if_no_bounding_boxes=True) - bbox_begin, bbox_size, _ = sample_distorted_bounding_box - - # Crop the image to the specified bounding box. - offset_y, offset_x, _ = tf.unstack(bbox_begin) - target_height, target_width, _ = tf.unstack(bbox_size) - crop_window = tf.stack([offset_y, offset_x, target_height, target_width]) - image = tf.image.decode_and_crop_jpeg(image_bytes, crop_window, channels=3) - - return image - - -def _at_least_x_are_equal(a, b, x): - """At least `x` of `a` and `b` `Tensors` are equal.""" - match = tf.equal(a, b) - match = tf.cast(match, tf.int32) - return tf.greater_equal(tf.reduce_sum(match), x) - - -def _decode_and_random_crop(image_bytes, image_size): - """Make a random crop of image_size.""" - bbox = tf.constant([0.0, 0.0, 1.0, 1.0], dtype=tf.float32, shape=[1, 1, 4]) - image = distorted_bounding_box_crop( - image_bytes, - bbox, - min_object_covered=0.1, - aspect_ratio_range=(3. / 4, 4. / 3.), - area_range=(0.08, 1.0), - max_attempts=10, - scope=None) - original_shape = tf.image.extract_jpeg_shape(image_bytes) - bad = _at_least_x_are_equal(original_shape, tf.shape(image), 3) - - image = tf.cond( - bad, - lambda: _decode_and_center_crop(image_bytes, image_size), - lambda: tf.image.resize_bicubic([image], # pylint: disable=g-long-lambda - [image_size, image_size])[0]) - - return image - - -def _decode_and_center_crop(image_bytes, image_size): - """Crops to center of image with padding then scales image_size.""" - shape = tf.image.extract_jpeg_shape(image_bytes) - image_height = shape[0] - image_width = shape[1] - - padded_center_crop_size = tf.cast( - ((image_size / (image_size + CROP_PADDING)) * - tf.cast(tf.minimum(image_height, image_width), tf.float32)), - tf.int32) - - offset_height = ((image_height - padded_center_crop_size) + 1) // 2 - offset_width = ((image_width - padded_center_crop_size) + 1) // 2 - crop_window = tf.stack([offset_height, offset_width, - padded_center_crop_size, padded_center_crop_size]) - image = tf.image.decode_and_crop_jpeg(image_bytes, crop_window, channels=3) - image = tf.image.resize_bicubic([image], [image_size, image_size])[0] - return image - - -def _flip(image): - """Random horizontal image flip.""" - image = tf.image.random_flip_left_right(image) - return image - - -def preprocess_for_train(image_bytes, use_bfloat16, image_size=IMAGE_SIZE, - augment_name=None, - randaug_num_layers=None, randaug_magnitude=None): - """Preprocesses the given image for evaluation. - - Args: - image_bytes: `Tensor` representing an image binary of arbitrary size. - use_bfloat16: `bool` for whether to use bfloat16. - image_size: image size. - augment_name: `string` that is the name of the augmentation method - to apply to the image. `autoaugment` if AutoAugment is to be used or - `randaugment` if RandAugment is to be used. If the value is `None` no - augmentation method will be applied applied. See autoaugment.py for more - details. - randaug_num_layers: 'int', if RandAug is used, what should the number of - layers be. See autoaugment.py for detailed description. - randaug_magnitude: 'int', if RandAug is used, what should the magnitude - be. See autoaugment.py for detailed description. - - Returns: - A preprocessed image `Tensor`. - """ - image = _decode_and_random_crop(image_bytes, image_size) - image = _flip(image) - image = tf.reshape(image, [image_size, image_size, 3]) - - image = tf.image.convert_image_dtype( - image, dtype=tf.bfloat16 if use_bfloat16 else tf.float32) - - if augment_name: - try: - import autoaugment # pylint: disable=g-import-not-at-top - except ImportError as e: - logging.exception('Autoaugment is not supported in TF 2.x.') - raise e - - logging.info('Apply AutoAugment policy %s', augment_name) - input_image_type = image.dtype - image = tf.clip_by_value(image, 0.0, 255.0) - image = tf.cast(image, dtype=tf.uint8) - - if augment_name == 'autoaugment': - logging.info('Apply AutoAugment policy %s', augment_name) - image = autoaugment.distort_image_with_autoaugment(image, 'v0') - elif augment_name == 'randaugment': - image = autoaugment.distort_image_with_randaugment( - image, randaug_num_layers, randaug_magnitude) - else: - raise ValueError('Invalid value for augment_name: %s' % (augment_name)) - - image = tf.cast(image, dtype=input_image_type) - return image - - -def preprocess_for_eval(image_bytes, use_bfloat16, image_size=IMAGE_SIZE): - """Preprocesses the given image for evaluation. - - Args: - image_bytes: `Tensor` representing an image binary of arbitrary size. - use_bfloat16: `bool` for whether to use bfloat16. - image_size: image size. - - Returns: - A preprocessed image `Tensor`. - """ - image = _decode_and_center_crop(image_bytes, image_size) - image = tf.reshape(image, [image_size, image_size, 3]) - image = tf.image.convert_image_dtype( - image, dtype=tf.bfloat16 if use_bfloat16 else tf.float32) - return image - - -def preprocess_image(image_bytes, - is_training=False, - use_bfloat16=False, - image_size=IMAGE_SIZE, - augment_name=None, - randaug_num_layers=None, - randaug_magnitude=None): - """Preprocesses the given image. - - Args: - image_bytes: `Tensor` representing an image binary of arbitrary size. - is_training: `bool` for whether the preprocessing is for training. - use_bfloat16: `bool` for whether to use bfloat16. - image_size: image size. - augment_name: `string` that is the name of the augmentation method - to apply to the image. `autoaugment` if AutoAugment is to be used or - `randaugment` if RandAugment is to be used. If the value is `None` no - augmentation method will be applied applied. See autoaugment.py for more - details. - randaug_num_layers: 'int', if RandAug is used, what should the number of - layers be. See autoaugment.py for detailed description. - randaug_magnitude: 'int', if RandAug is used, what should the magnitude - be. See autoaugment.py for detailed description. - - Returns: - A preprocessed image `Tensor` with value range of [0, 255]. - """ - if is_training: - return preprocess_for_train( - image_bytes, use_bfloat16, image_size, augment_name, - randaug_num_layers, randaug_magnitude) - else: - return preprocess_for_eval(image_bytes, use_bfloat16, image_size) diff --git a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/original_tf/utils.py b/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/original_tf/utils.py deleted file mode 100644 index 61782ea3c45d7588dd909061e6c319272d803915..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/original_tf/utils.py +++ /dev/null @@ -1,405 +0,0 @@ -# Copyright 2019 The TensorFlow Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============================================================================== -"""Model utilities.""" - -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -import json -import os -import sys - -from absl import logging -import numpy as np -import tensorflow.compat.v1 as tf - -from tensorflow.python.tpu import tpu_function # pylint:disable=g-direct-tensorflow-import - - -def build_learning_rate(initial_lr, - global_step, - steps_per_epoch=None, - lr_decay_type='exponential', - decay_factor=0.97, - decay_epochs=2.4, - total_steps=None, - warmup_epochs=5): - """Build learning rate.""" - if lr_decay_type == 'exponential': - assert steps_per_epoch is not None - decay_steps = steps_per_epoch * decay_epochs - lr = tf.train.exponential_decay( - initial_lr, global_step, decay_steps, decay_factor, staircase=True) - elif lr_decay_type == 'cosine': - assert total_steps is not None - lr = 0.5 * initial_lr * ( - 1 + tf.cos(np.pi * tf.cast(global_step, tf.float32) / total_steps)) - elif lr_decay_type == 'constant': - lr = initial_lr - else: - assert False, 'Unknown lr_decay_type : %s' % lr_decay_type - - if warmup_epochs: - logging.info('Learning rate warmup_epochs: %d', warmup_epochs) - warmup_steps = int(warmup_epochs * steps_per_epoch) - warmup_lr = ( - initial_lr * tf.cast(global_step, tf.float32) / tf.cast( - warmup_steps, tf.float32)) - lr = tf.cond(global_step < warmup_steps, lambda: warmup_lr, lambda: lr) - - return lr - - -def build_optimizer(learning_rate, - optimizer_name='rmsprop', - decay=0.9, - epsilon=0.001, - momentum=0.9): - """Build optimizer.""" - if optimizer_name == 'sgd': - logging.info('Using SGD optimizer') - optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate) - elif optimizer_name == 'momentum': - logging.info('Using Momentum optimizer') - optimizer = tf.train.MomentumOptimizer( - learning_rate=learning_rate, momentum=momentum) - elif optimizer_name == 'rmsprop': - logging.info('Using RMSProp optimizer') - optimizer = tf.train.RMSPropOptimizer(learning_rate, decay, momentum, - epsilon) - else: - logging.fatal('Unknown optimizer: %s', optimizer_name) - - return optimizer - - -class TpuBatchNormalization(tf.layers.BatchNormalization): - # class TpuBatchNormalization(tf.layers.BatchNormalization): - """Cross replica batch normalization.""" - - def __init__(self, fused=False, **kwargs): - if fused in (True, None): - raise ValueError('TpuBatchNormalization does not support fused=True.') - super(TpuBatchNormalization, self).__init__(fused=fused, **kwargs) - - def _cross_replica_average(self, t, num_shards_per_group): - """Calculates the average value of input tensor across TPU replicas.""" - num_shards = tpu_function.get_tpu_context().number_of_shards - group_assignment = None - if num_shards_per_group > 1: - if num_shards % num_shards_per_group != 0: - raise ValueError('num_shards: %d mod shards_per_group: %d, should be 0' - % (num_shards, num_shards_per_group)) - num_groups = num_shards // num_shards_per_group - group_assignment = [[ - x for x in range(num_shards) if x // num_shards_per_group == y - ] for y in range(num_groups)] - return tf.tpu.cross_replica_sum(t, group_assignment) / tf.cast( - num_shards_per_group, t.dtype) - - def _moments(self, inputs, reduction_axes, keep_dims): - """Compute the mean and variance: it overrides the original _moments.""" - shard_mean, shard_variance = super(TpuBatchNormalization, self)._moments( - inputs, reduction_axes, keep_dims=keep_dims) - - num_shards = tpu_function.get_tpu_context().number_of_shards or 1 - if num_shards <= 8: # Skip cross_replica for 2x2 or smaller slices. - num_shards_per_group = 1 - else: - num_shards_per_group = max(8, num_shards // 8) - logging.info('TpuBatchNormalization with num_shards_per_group %s', - num_shards_per_group) - if num_shards_per_group > 1: - # Compute variance using: Var[X]= E[X^2] - E[X]^2. - shard_square_of_mean = tf.math.square(shard_mean) - shard_mean_of_square = shard_variance + shard_square_of_mean - group_mean = self._cross_replica_average( - shard_mean, num_shards_per_group) - group_mean_of_square = self._cross_replica_average( - shard_mean_of_square, num_shards_per_group) - group_variance = group_mean_of_square - tf.math.square(group_mean) - return (group_mean, group_variance) - else: - return (shard_mean, shard_variance) - - -class BatchNormalization(tf.layers.BatchNormalization): - """Fixed default name of BatchNormalization to match TpuBatchNormalization.""" - - def __init__(self, name='tpu_batch_normalization', **kwargs): - super(BatchNormalization, self).__init__(name=name, **kwargs) - - -def drop_connect(inputs, is_training, survival_prob): - """Drop the entire conv with given survival probability.""" - # "Deep Networks with Stochastic Depth", https://arxiv.org/pdf/1603.09382.pdf - if not is_training: - return inputs - - # Compute tensor. - batch_size = tf.shape(inputs)[0] - random_tensor = survival_prob - random_tensor += tf.random_uniform([batch_size, 1, 1, 1], dtype=inputs.dtype) - binary_tensor = tf.floor(random_tensor) - # Unlike conventional way that multiply survival_prob at test time, here we - # divide survival_prob at training time, such that no addition compute is - # needed at test time. - output = tf.div(inputs, survival_prob) * binary_tensor - return output - - -def archive_ckpt(ckpt_eval, ckpt_objective, ckpt_path): - """Archive a checkpoint if the metric is better.""" - ckpt_dir, ckpt_name = os.path.split(ckpt_path) - - saved_objective_path = os.path.join(ckpt_dir, 'best_objective.txt') - saved_objective = float('-inf') - if tf.gfile.Exists(saved_objective_path): - with tf.gfile.GFile(saved_objective_path, 'r') as f: - saved_objective = float(f.read()) - if saved_objective > ckpt_objective: - logging.info('Ckpt %s is worse than %s', ckpt_objective, saved_objective) - return False - - filenames = tf.gfile.Glob(ckpt_path + '.*') - if filenames is None: - logging.info('No files to copy for checkpoint %s', ckpt_path) - return False - - # Clear the old folder. - dst_dir = os.path.join(ckpt_dir, 'archive') - if tf.gfile.Exists(dst_dir): - tf.gfile.DeleteRecursively(dst_dir) - tf.gfile.MakeDirs(dst_dir) - - # Write checkpoints. - for f in filenames: - dest = os.path.join(dst_dir, os.path.basename(f)) - tf.gfile.Copy(f, dest, overwrite=True) - ckpt_state = tf.train.generate_checkpoint_state_proto( - dst_dir, - model_checkpoint_path=ckpt_name, - all_model_checkpoint_paths=[ckpt_name]) - with tf.gfile.GFile(os.path.join(dst_dir, 'checkpoint'), 'w') as f: - f.write(str(ckpt_state)) - with tf.gfile.GFile(os.path.join(dst_dir, 'best_eval.txt'), 'w') as f: - f.write('%s' % ckpt_eval) - - # Update the best objective. - with tf.gfile.GFile(saved_objective_path, 'w') as f: - f.write('%f' % ckpt_objective) - - logging.info('Copying checkpoint %s to %s', ckpt_path, dst_dir) - return True - - -def get_ema_vars(): - """Get all exponential moving average (ema) variables.""" - ema_vars = tf.trainable_variables() + tf.get_collection('moving_vars') - for v in tf.global_variables(): - # We maintain mva for batch norm moving mean and variance as well. - if 'moving_mean' in v.name or 'moving_variance' in v.name: - ema_vars.append(v) - return list(set(ema_vars)) - - -class DepthwiseConv2D(tf.keras.layers.DepthwiseConv2D, tf.layers.Layer): - """Wrap keras DepthwiseConv2D to tf.layers.""" - - pass - - -class EvalCkptDriver(object): - """A driver for running eval inference. - - Attributes: - model_name: str. Model name to eval. - batch_size: int. Eval batch size. - image_size: int. Input image size, determined by model name. - num_classes: int. Number of classes, default to 1000 for ImageNet. - include_background_label: whether to include extra background label. - """ - - def __init__(self, - model_name, - batch_size=1, - image_size=224, - num_classes=1000, - include_background_label=False): - """Initialize internal variables.""" - self.model_name = model_name - self.batch_size = batch_size - self.num_classes = num_classes - self.include_background_label = include_background_label - self.image_size = image_size - - def restore_model(self, sess, ckpt_dir, enable_ema=True, export_ckpt=None): - """Restore variables from checkpoint dir.""" - sess.run(tf.global_variables_initializer()) - checkpoint = tf.train.latest_checkpoint(ckpt_dir) - if enable_ema: - ema = tf.train.ExponentialMovingAverage(decay=0.0) - ema_vars = get_ema_vars() - var_dict = ema.variables_to_restore(ema_vars) - ema_assign_op = ema.apply(ema_vars) - else: - var_dict = get_ema_vars() - ema_assign_op = None - - tf.train.get_or_create_global_step() - sess.run(tf.global_variables_initializer()) - saver = tf.train.Saver(var_dict, max_to_keep=1) - saver.restore(sess, checkpoint) - - if export_ckpt: - if ema_assign_op is not None: - sess.run(ema_assign_op) - saver = tf.train.Saver(max_to_keep=1, save_relative_paths=True) - saver.save(sess, export_ckpt) - - def build_model(self, features, is_training): - """Build model with input features.""" - del features, is_training - raise ValueError('Must be implemented by subclasses.') - - def get_preprocess_fn(self): - raise ValueError('Must be implemented by subclsses.') - - def build_dataset(self, filenames, labels, is_training): - """Build input dataset.""" - batch_drop_remainder = False - if 'condconv' in self.model_name and not is_training: - # CondConv layers can only be called with known batch dimension. Thus, we - # must drop all remaining examples that do not make up one full batch. - # To ensure all examples are evaluated, use a batch size that evenly - # divides the number of files. - batch_drop_remainder = True - num_files = len(filenames) - if num_files % self.batch_size != 0: - tf.logging.warn('Remaining examples in last batch are not being ' - 'evaluated.') - filenames = tf.constant(filenames) - labels = tf.constant(labels) - dataset = tf.data.Dataset.from_tensor_slices((filenames, labels)) - - def _parse_function(filename, label): - image_string = tf.read_file(filename) - preprocess_fn = self.get_preprocess_fn() - image_decoded = preprocess_fn( - image_string, is_training, image_size=self.image_size) - image = tf.cast(image_decoded, tf.float32) - return image, label - - dataset = dataset.map(_parse_function) - dataset = dataset.batch(self.batch_size, - drop_remainder=batch_drop_remainder) - - iterator = dataset.make_one_shot_iterator() - images, labels = iterator.get_next() - return images, labels - - def run_inference(self, - ckpt_dir, - image_files, - labels, - enable_ema=True, - export_ckpt=None): - """Build and run inference on the target images and labels.""" - label_offset = 1 if self.include_background_label else 0 - with tf.Graph().as_default(), tf.Session() as sess: - images, labels = self.build_dataset(image_files, labels, False) - probs = self.build_model(images, is_training=False) - if isinstance(probs, tuple): - probs = probs[0] - - self.restore_model(sess, ckpt_dir, enable_ema, export_ckpt) - - prediction_idx = [] - prediction_prob = [] - for _ in range(len(image_files) // self.batch_size): - out_probs = sess.run(probs) - idx = np.argsort(out_probs)[::-1] - prediction_idx.append(idx[:5] - label_offset) - prediction_prob.append([out_probs[pid] for pid in idx[:5]]) - - # Return the top 5 predictions (idx and prob) for each image. - return prediction_idx, prediction_prob - - def eval_example_images(self, - ckpt_dir, - image_files, - labels_map_file, - enable_ema=True, - export_ckpt=None): - """Eval a list of example images. - - Args: - ckpt_dir: str. Checkpoint directory path. - image_files: List[str]. A list of image file paths. - labels_map_file: str. The labels map file path. - enable_ema: enable expotential moving average. - export_ckpt: export ckpt folder. - - Returns: - A tuple (pred_idx, and pred_prob), where pred_idx is the top 5 prediction - index and pred_prob is the top 5 prediction probability. - """ - classes = json.loads(tf.gfile.Open(labels_map_file).read()) - pred_idx, pred_prob = self.run_inference( - ckpt_dir, image_files, [0] * len(image_files), enable_ema, export_ckpt) - for i in range(len(image_files)): - print('predicted class for image {}: '.format(image_files[i])) - for j, idx in enumerate(pred_idx[i]): - print(' -> top_{} ({:4.2f}%): {} '.format(j, pred_prob[i][j] * 100, - classes[str(idx)])) - return pred_idx, pred_prob - - def eval_imagenet(self, ckpt_dir, imagenet_eval_glob, - imagenet_eval_label, num_images, enable_ema, export_ckpt): - """Eval ImageNet images and report top1/top5 accuracy. - - Args: - ckpt_dir: str. Checkpoint directory path. - imagenet_eval_glob: str. File path glob for all eval images. - imagenet_eval_label: str. File path for eval label. - num_images: int. Number of images to eval: -1 means eval the whole - dataset. - enable_ema: enable expotential moving average. - export_ckpt: export checkpoint folder. - - Returns: - A tuple (top1, top5) for top1 and top5 accuracy. - """ - imagenet_val_labels = [int(i) for i in tf.gfile.GFile(imagenet_eval_label)] - imagenet_filenames = sorted(tf.gfile.Glob(imagenet_eval_glob)) - if num_images < 0: - num_images = len(imagenet_filenames) - image_files = imagenet_filenames[:num_images] - labels = imagenet_val_labels[:num_images] - - pred_idx, _ = self.run_inference( - ckpt_dir, image_files, labels, enable_ema, export_ckpt) - top1_cnt, top5_cnt = 0.0, 0.0 - for i, label in enumerate(labels): - top1_cnt += label in pred_idx[i][:1] - top5_cnt += label in pred_idx[i][:5] - if i % 100 == 0: - print('Step {}: top1_acc = {:4.2f}% top5_acc = {:4.2f}%'.format( - i, 100 * top1_cnt / (i + 1), 100 * top5_cnt / (i + 1))) - sys.stdout.flush() - top1, top5 = 100 * top1_cnt / num_images, 100 * top5_cnt / num_images - print('Final: top1_acc = {:4.2f}% top5_acc = {:4.2f}%'.format(top1, top5)) - return top1, top5 diff --git a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/rename.sh b/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/rename.sh deleted file mode 100644 index aa791139895b14ae1ffe00098cc55c56dfeca0fd..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/rename.sh +++ /dev/null @@ -1,5 +0,0 @@ -for i in 0 1 2 3 4 5 6 7 8 -do - X=$(sha256sum efficientnet-b${i}.pth | head -c 8) - mv efficientnet-b${i}.pth efficientnet-b${i}-${X}.pth -done diff --git a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/run.sh b/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/run.sh deleted file mode 100755 index f80d5f5d9b879ce98d180672c5abcb3dd9e569b9..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/efficientnet/tf_to_pytorch/convert_tf_to_pt/run.sh +++ /dev/null @@ -1,17 +0,0 @@ -python ../convert_tf_to_pt/load_tf_weights.py --model_name efficientnet-b0 --tf_checkpoint ../pretrained_tensorflow/efficientnet-b0/ --output_file ../pretrained_pytorch/efficientnet-b0.pth - -# python ../convert_tf_to_pt/load_tf_weights.py --model_name efficientnet-b1 --tf_checkpoint ../pretrained_tensorflow/efficientnet-b1/ --output_file ../pretrained_pytorch/efficientnet-b1.pth - -# python ../convert_tf_to_pt/load_tf_weights.py --model_name efficientnet-b2 --tf_checkpoint ../pretrained_tensorflow/efficientnet-b2/ --output_file ../pretrained_pytorch/efficientnet-b2.pth - -# python ../convert_tf_to_pt/load_tf_weights.py --model_name efficientnet-b3 --tf_checkpoint ../pretrained_tensorflow/efficientnet-b3/ --output_file ../pretrained_pytorch/efficientnet-b3.pth - -# python ../convert_tf_to_pt/load_tf_weights.py --model_name efficientnet-b4 --tf_checkpoint ../pretrained_tensorflow/efficientnet-b4/ --output_file ../pretrained_pytorch/efficientnet-b4.pth - -# python ../convert_tf_to_pt/load_tf_weights.py --model_name efficientnet-b5 --tf_checkpoint ../pretrained_tensorflow/efficientnet-b5/ --output_file ../pretrained_pytorch/efficientnet-b5.pth - -# python ../convert_tf_to_pt/load_tf_weights.py --model_name efficientnet-b6 --tf_checkpoint ../pretrained_tensorflow/efficientnet-b6/ --output_file ../pretrained_pytorch/efficientnet-b6.pth - -# python ../convert_tf_to_pt/load_tf_weights.py --model_name efficientnet-b7 --tf_checkpoint ../pretrained_tensorflow/efficientnet-b7/ --output_file ../pretrained_pytorch/efficientnet-b7.pth - -# python ../convert_tf_to_pt/load_tf_weights.py --model_name efficientnet-b8 --tf_checkpoint ../pretrained_tensorflow/efficientnet-b8/ --output_file ../pretrained_pytorch/efficientnet-b8.pth diff --git a/video/mintime/model_code/models/size_invariant_timesformer.py b/video/mintime/model_code/models/size_invariant_timesformer.py deleted file mode 100644 index 67f405858d9c8ef1b09003bd969a176068c35140..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/size_invariant_timesformer.py +++ /dev/null @@ -1,276 +0,0 @@ -import torch -from torch import nn, einsum -import torch.nn.functional as F -from einops import rearrange, repeat -from statistics import mean -from models.efficientnet.efficientnet_pytorch import EfficientNet -from torch.nn.init import trunc_normal_ -import cv2 -import numpy as np -from random import random - - -# helpers -def exists(val): - return val is not None - -# classes -class PreNorm(nn.Module): - def __init__(self, dim, fn): - super().__init__() - self.fn = fn - self.norm = nn.LayerNorm(dim) - - def forward(self, x, *args, **kwargs): - x = self.norm(x) - return self.fn(x, *args, **kwargs) - -# time token shift - -def shift(t, amt): - if amt is 0: - return t - return F.pad(t, (0, 0, 0, 0, amt, -amt)) - -class PreTokenShift(nn.Module): - def __init__(self, frames, fn): - super().__init__() - self.frames = frames - self.fn = fn - - def forward(self, x, *args, **kwargs): - f, dim = self.frames, x.shape[-1] - cls_x, x = x[:, :1], x[:, 1:] - x = rearrange(x, 'b (f n) d -> b f n d', f = f) - - # shift along time frame before and after - - dim_chunk = (dim // 3) - chunks = x.split(dim_chunk, dim = -1) - chunks_to_shift, rest = chunks[:3], chunks[3:] - shifted_chunks = tuple(map(lambda args: shift(*args), zip(chunks_to_shift, (-1, 0, 1)))) - x = torch.cat((*shifted_chunks, *rest), dim = -1) - - x = rearrange(x, 'b f n d -> b (f n) d') - x = torch.cat((cls_x, x), dim = 1) - return self.fn(x, *args, **kwargs) - -# feedforward - -class GEGLU(nn.Module): - def forward(self, x): - x, gates = x.chunk(2, dim = -1) - return x * F.gelu(gates) - -class FeedForward(nn.Module): - def __init__(self, dim, mult = 4, dropout = 0.): - super().__init__() - self.net = nn.Sequential( - nn.Linear(dim, dim * mult * 2), - GEGLU(), - nn.Dropout(dropout), - nn.Linear(dim * mult, dim) - ) - - def forward(self, x): - return self.net(x) - -# attention - -def attn(q, k, v, mask = None): - sim = einsum('b i d, b j d -> b i j', q, k) - if exists(mask): - max_neg_value = -torch.finfo(sim.dtype).max - sim.masked_fill_(~mask, max_neg_value) - attn = sim.softmax(dim = -1) - out = einsum('b i j, b j d -> b i d', attn, v) - return out, attn - -class Attention(nn.Module): - def __init__( - self, - dim, - dim_head = 64, - heads = 8, - dropout = 0., - ): - super().__init__() - self.heads = heads - self.scale = dim_head ** -0.5 - inner_dim = dim_head * heads - - self.to_qkv = nn.Linear(dim, inner_dim * 3, bias = False) - self.to_out = nn.Sequential( - nn.Linear(inner_dim, dim), - nn.Dropout(dropout) - ) - - - def forward(self, x, einops_from, einops_to, mask = None, cls_mask = None, identities_mask = None, rot_emb = None, **einops_dims): - h = self.heads - q, k, v = self.to_qkv(x).chunk(3, dim = -1) - q, k, v = map(lambda t: rearrange(t, 'b n (h d) -> (b h) n d', h = h), (q, k, v)) - - q = q * self.scale - - # splice out classification token at index 1 - (cls_q, q_), (cls_k, k_), (cls_v, v_) = map(lambda t: (t[:, :1], t[:, 1:]), (q, k, v)) - - # let classification token attend to key / values of all patches across time and space - cls_out, cls_attentions = attn(cls_q, k, v, mask = cls_mask) - # rearrange across time or space - q_, k_, v_ = map(lambda t: rearrange(t, f'{einops_from} -> {einops_to}', **einops_dims), (q_, k_, v_)) - - # expand cls token keys and values across time or space and concat - r = q_.shape[0] // cls_k.shape[0] - cls_k, cls_v = map(lambda t: repeat(t, 'b () d -> (b r) () d', r = r), (cls_k, cls_v)) - - k_ = torch.cat((cls_k, k_), dim = 1) - v_ = torch.cat((cls_v, v_), dim = 1) - - # attention - out, attentions = attn(q_, k_, v_, mask = mask) - - # merge back time or space - out = rearrange(out, f'{einops_to} -> {einops_from}', **einops_dims) - - # concat back the cls token - out = torch.cat((cls_out, out), dim = 1) - - # merge back the heads - out = rearrange(out, '(b h) n d -> b n (h d)', h = h) - - # combine heads out - return self.to_out(out), cls_attentions - - -class SizeInvariantTimeSformer(nn.Module): - def __init__( - self, - *, - config, - require_attention = False - ): - - super().__init__() - self.dim = config['model']['dim'] - self.num_frames = config['model']['num-frames'] - self.max_identities = config['model']['max-identities'] - self.image_size = config['model']['image-size'] - self.num_classes = config['model']['num-classes'] - self.patch_size = config['model']['patch-size'] - self.num_patches = config['model']['num-patches'] - self.channels = config['model']['channels'] - self.depth = config['model']['depth'] - self.heads = config['model']['heads'] - self.dim_head = config['model']['dim-head'] - self.attn_dropout = config['model']['attn-dropout'] - self.ff_dropout = config['model']['ff-dropout'] - self.shift_tokens = config['model']['shift-tokens'] - self.enable_size_emb = config['model']['enable-size-emb'] - self.enable_pos_emb = config['model']['enable-pos-emb'] - self.require_attention = require_attention - - num_positions = self.num_frames * self.channels - self.to_patch_embedding = nn.Linear(self.channels , self.dim) - self.cls_token = nn.Parameter(torch.randn(1, self.dim)) - - self.pos_emb = nn.Embedding(num_positions + 1, self.dim) - if self.enable_size_emb: - self.size_emb = nn.Embedding(num_positions + 1, self.dim) - - - self.layers = nn.ModuleList([]) - for _ in range(self.depth): - ff = FeedForward(self.dim, dropout = self.ff_dropout) - time_attn = Attention(self.dim, dim_head = self.dim_head, heads = self.heads, dropout = self.attn_dropout) - spatial_attn = Attention(self.dim, dim_head = self.dim_head, heads = self.heads, dropout = self.attn_dropout) - if self.shift_tokens: - time_attn, spatial_attn, ff = map(lambda t: PreTokenShift(num_frames, t), (time_attn, spatial_attn, ff)) - - - time_attn, spatial_attn, ff = map(lambda t: PreNorm(self.dim, t), (time_attn, spatial_attn, ff)) - self.layers.append(nn.ModuleList([time_attn, spatial_attn, ff])) - - self.to_out = nn.Sequential( - nn.LayerNorm(self.dim), - nn.Linear(self.dim, self.num_classes) - ) - - # Initialization - trunc_normal_(self.pos_emb.weight, std=.02) - trunc_normal_(self.cls_token, std=.02) - if self.enable_size_emb: - trunc_normal_(self.size_emb.weight, std=.02) - self.apply(self._init_weights) - - def _init_weights(self, m): - if isinstance(m, nn.Linear): - trunc_normal_(m.weight, std=.02) - if isinstance(m, nn.Linear) and m.bias is not None: - nn.init.constant_(m.bias, 0) - elif isinstance(m, nn.LayerNorm): - nn.init.constant_(m.bias, 0) - nn.init.constant_(m.weight, 1.0) - - @torch.jit.ignore - def no_weight_decay(self): - if self.enable_size_emb: - return {'pos_emb', 'cls_token', 'size_emb'} - else: - return {'pos_emb', 'cls_token'} - - - def forward(self, x, mask = None, identities_mask = None, size_embedding = None, positions = None): - b, f, c, h, w, *_, device = *x.shape, x.device - n = h * w - x = rearrange(x, 'b f c h w -> b (f h w) c') # B x F*P*P x C - tokens = self.to_patch_embedding(x) # B x 8*7*7 x dim - - # Add cls token - cls_token = repeat(self.cls_token, 'n d -> b n d', b = b) - x = torch.cat((cls_token, tokens), dim = 1) - - # Positional - if self.enable_pos_emb: - x += self.pos_emb(positions) - else: - x += (self.pos_emb(torch.arange(x.shape[1]).to(device))) - - # Size embedding - if self.enable_size_emb: - size_embedding = repeat(size_embedding, 'b f -> b f p', p=self.num_patches) # B x 8 x 49 - size_embedding = rearrange(size_embedding, 'b f p -> b (f p)') - cls_token = torch.Tensor([0]*b).unsqueeze(-1).to(device) - size_embedding = size_embedding.to(device) - size_embedding = torch.cat((cls_token, size_embedding), dim = 1) - size_embedding = size_embedding.to(device).int() - x += self.size_emb(size_embedding) - - - # Frame mask - frame_mask = repeat(mask, 'b f1 -> b f2 f1', f2 = self.num_frames) - frame_mask = torch.logical_and(frame_mask, identities_mask) - frame_mask = F.pad(frame_mask, (1, 0), value= True) - frame_mask = repeat(frame_mask, 'b f1 f2 -> (b h n) f1 f2', n = n, h = self.heads) - - - # CLS mask - cls_attn_mask = repeat(mask, 'b f -> (b h) () (f n)', n = n, h = self.heads) - cls_attn_mask = F.pad(cls_attn_mask, (1, 0), value = True) - - # Time and space attention - for (time_attn, spatial_attn, ff) in self.layers: - y, time_attention = time_attn(x, 'b (f n) d', '(b n) f d', n = n, mask = frame_mask, cls_mask = cls_attn_mask) - x = x + y - y, space_attention = spatial_attn(x, 'b (f n) d', '(b f) n d', f = f, cls_mask = cls_attn_mask) - x = x + y - x = ff(x) + x - - cls_token = x[:, 0] - attentions = [space_attention, time_attention] - - if self.require_attention: - return self.to_out(cls_token), attentions - else: - return self.to_out(cls_token) diff --git a/video/mintime/model_code/models/utils.py b/video/mintime/model_code/models/utils.py deleted file mode 100644 index 48b261a31f5a596900efdc613920d3ef1f3c85d3..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/utils.py +++ /dev/null @@ -1,62 +0,0 @@ -from math import log, pi -import torch -from torch import nn, einsum -import torch.nn.functional as F -from einops import rearrange, repeat - -def rotate_every_two(x): - x = rearrange(x, '... (d j) -> ... d j', j = 2) - x1, x2 = x.unbind(dim = -1) - x = torch.stack((-x2, x1), dim = -1) - return rearrange(x, '... d j -> ... (d j)') - -def apply_rot_emb(q, k, rot_emb): - sin, cos = rot_emb - rot_dim = sin.shape[-1] - (q, q_pass), (k, k_pass) = map(lambda t: (t[..., :rot_dim], t[..., rot_dim:]), (q, k)) - q, k = map(lambda t: t * cos + rotate_every_two(t) * sin, (q, k)) - q, k = map(lambda t: torch.cat(t, dim = -1), ((q, q_pass), (k, k_pass))) - return q, k - -class AxialRotaryEmbedding(nn.Module): - def __init__(self, dim, max_freq = 10): - super().__init__() - self.dim = dim - scales = torch.logspace(0., log(max_freq / 2) / log(2), self.dim // 4, base = 2) - self.register_buffer('scales', scales) - - def forward(self, h, w, device): - scales = rearrange(self.scales, '... -> () ...') - scales = scales.to(device) - - h_seq = torch.linspace(-1., 1., steps = h, device = device) - h_seq = h_seq.unsqueeze(-1) - - w_seq = torch.linspace(-1., 1., steps = w, device = device) - w_seq = w_seq.unsqueeze(-1) - - h_seq = h_seq * scales * pi - w_seq = w_seq * scales * pi - - x_sinu = repeat(h_seq, 'i d -> i j d', j = w) - y_sinu = repeat(w_seq, 'j d -> i j d', i = h) - - sin = torch.cat((x_sinu.sin(), y_sinu.sin()), dim = -1) - cos = torch.cat((x_sinu.cos(), y_sinu.cos()), dim = -1) - - sin, cos = map(lambda t: rearrange(t, 'i j d -> (i j) d'), (sin, cos)) - sin, cos = map(lambda t: repeat(t, 'n d -> () n (d j)', j = 2), (sin, cos)) - return sin, cos - -class RotaryEmbedding(nn.Module): - def __init__(self, dim): - super().__init__() - inv_freqs = 1. / (10000 ** (torch.arange(0, dim, 2).float() / dim)) - self.register_buffer('inv_freqs', inv_freqs) - - def forward(self, n, device): - seq = torch.arange(n, device = device) - freqs = einsum('i, j -> i j', seq, self.inv_freqs) - freqs = torch.cat((freqs, freqs), dim = -1) - freqs = rearrange(freqs, 'n d -> () n d') - return freqs.sin(), freqs.cos() \ No newline at end of file diff --git a/video/mintime/model_code/models/xception.py b/video/mintime/model_code/models/xception.py deleted file mode 100644 index e3ae1de438a55c44021e25c939af8a6420e2ffd9..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/models/xception.py +++ /dev/null @@ -1,272 +0,0 @@ -# ------------------------------------------------------------------------------ -# Copyright (c) SenseTime -# Written by Joey Fang (fangzheng@sensetime.com) -# ------------------------------------------------------------------------------ - -import math -import torch -import torch.nn as nn -import torch.nn.functional as F -import torch.utils.model_zoo as model_zoo -from torch.nn import init - -__all__ = ['xception'] - - -BN = None -class SeparableConv2d(nn.Module): - def __init__(self,in_channels,out_channels,kernel_size=1,stride=1,padding=0,dilation=1,bias=False): - super(SeparableConv2d,self).__init__() - - self.conv1 = nn.Conv2d(in_channels,in_channels,kernel_size,stride,padding,dilation,groups=in_channels,bias=bias) - self.pointwise = nn.Conv2d(in_channels,out_channels,1,1,0,1,1,bias=bias) - - def forward(self,x): - x = self.conv1(x) - x = self.pointwise(x) - return x - - -class Block(nn.Module): - def __init__(self,in_filters,out_filters,reps,strides=1,start_with_relu=True,grow_first=True): - super(Block, self).__init__() - - if out_filters != in_filters or strides!=1: - self.skip = nn.Conv2d(in_filters,out_filters,1,stride=strides, bias=False) - self.skipbn = BN(out_filters) - else: - self.skip=None - - self.relu = nn.ReLU(inplace=True) - rep=[] - - filters=in_filters - if grow_first: - rep.append(self.relu) - rep.append(SeparableConv2d(in_filters,out_filters,3,stride=1,padding=1,bias=False)) - rep.append(BN(out_filters)) - filters = out_filters - - for i in range(reps-1): - rep.append(self.relu) - rep.append(SeparableConv2d(filters,filters,3,stride=1,padding=1,bias=False)) - rep.append(BN(filters)) - - if not grow_first: - rep.append(self.relu) - rep.append(SeparableConv2d(in_filters,out_filters,3,stride=1,padding=1,bias=False)) - rep.append(BN(out_filters)) - - if not start_with_relu: - rep = rep[1:] - else: - rep[0] = nn.ReLU(inplace=False) - - if strides != 1: - rep.append(nn.MaxPool2d(3,strides,1)) - self.rep = nn.Sequential(*rep) - - def forward(self,inp): - x = self.rep(inp) - - if self.skip is not None: - skip = self.skip(inp) - skip = self.skipbn(skip) - else: - skip = inp - - x+=skip - return x - - -class Xception(nn.Module): - """ - Xception optimized for the ImageNet dataset, as specified in - https://arxiv.org/pdf/1610.02357.pdf - """ - def __init__(self, in_channels = 3, num_classes=1000, bn_group_size=1, - bn_group=None, bn_sync_stats=True,feature_visible=False, - dropout=0, return_feature_idx=None, bypass_last_bn=False, **kwargs): - """ Constructor - Args: - num_classes: number of classes - """ - global BN - - BN = nn.BatchNorm2d - - bypass_bn_weight_list = [] - self.inplanes = 64 - - super(Xception, self).__init__() - self.num_classes = num_classes - self.return_feature_idx = return_feature_idx - self.feature_visible = feature_visible - - self.conv1 = nn.Conv2d(in_channels, 32, 3,2, 0, bias=False) - self.bn1 = BN(32) - self.relu = nn.ReLU(inplace=True) - - self.conv2 = nn.Conv2d(32,64,3,bias=False) - self.bn2 = BN(64) - #do relu here - - self.block1=Block(64,128,2,2,start_with_relu=False,grow_first=True) - self.block2=Block(128,256,2,2,start_with_relu=True,grow_first=True) - self.block3=Block(256,728,2,2,start_with_relu=True,grow_first=True) - - self.block4=Block(728,728,3,1,start_with_relu=True,grow_first=True) - self.block5=Block(728,728,3,1,start_with_relu=True,grow_first=True) - self.block6=Block(728,728,3,1,start_with_relu=True,grow_first=True) - self.block7=Block(728,728,3,1,start_with_relu=True,grow_first=True) - - self.block8=Block(728,728,3,1,start_with_relu=True,grow_first=True) - self.block9=Block(728,728,3,1,start_with_relu=True,grow_first=True) - self.block10=Block(728,728,3,1,start_with_relu=True,grow_first=True) - self.block11=Block(728,728,3,1,start_with_relu=True,grow_first=True) - - self.block12=Block(728,1024,2,2,start_with_relu=True,grow_first=False) - - self.conv3 = SeparableConv2d(1024,1536,3,1,1) - self.bn3 = BN(1536) - - #do relu here - self.conv4 = SeparableConv2d(1536,2048,3,1,1) - self.bn4 = BN(2048) - - self.fc = nn.Linear(2048, num_classes) - self.drop = None - if dropout > 0: - self.drop = nn.Dropout(p=dropout) - - for m in self.modules(): - if isinstance(m, nn.Conv2d): - n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels - m.weight.data.normal_(0, math.sqrt(2. / n)) - elif (isinstance(m, torch.nn.SyncBatchNorm) - or isinstance(m, nn.BatchNorm2d)): - m.weight.data.fill_(1) - m.bias.data.zero_() - - if bypass_last_bn: - for param in bypass_bn_weight_list: - param.data.zero_() - print('bypass {} bn.weight in BottleneckBlocks'.format(len(bypass_bn_weight_list))) - - def att_feature(self, feature): - sum_feature = F.relu(torch.sum(feature, dim=1)) - sum_feature = sum_feature / (torch.max(sum_feature)+ 1e-9) - return sum_feature - - def features(self, input): - features = [] - x = self.conv1(input) - x = self.bn1(x) - x = self.relu(x) - - x = self.conv2(x) - x = self.bn2(x) - x = self.relu(x) - features.append(x) - - x_b1 = self.block1(x) - features.append(x_b1) - x_b2 = self.block2(x_b1) - features.append(x_b2) - x_b3 = self.block3(x_b2) - features.append(x_b3) - x_b4 = self.block4(x_b3) - features.append(x_b4) - x_b5 = self.block5(x_b4) - features.append(x_b5) - x_b6 = self.block6(x_b5) - features.append(x_b6) - x_b7 = self.block7(x_b6) - features.append(x_b7) - x_b8 = self.block8(x_b7) - features.append(x_b8) - x_b9 = self.block9(x_b8) - features.append(x_b9) - x_b10 = self.block10(x_b9) - features.append(x_b10) - x_b11 = self.block11(x_b10) - features.append(x_b11) - x_b12 = self.block12(x_b11) - features.append(x_b12) - - x = self.conv3(x_b12) - x = self.bn3(x) - x = self.relu(x) - - x = self.conv4(x) - x = self.bn4(x) - return x, features - - def logits(self, features): - x = self.relu(features) - - x = F.adaptive_avg_pool2d(x, (1, 1)) - x = x.view(x.size(0), -1) - if self.drop is not None: - x = self.drop(x) - out = self.fc(x) - return out, x - - def forward(self, input): - x, features = self.features(input) - return x - ''' - logit, embedding = self.logits(x) - features.append(embedding) - selected_feature = None - if self.return_feature_idx is not None: - selected_feature = [features[i] for i in self.return_feature_idx] - if self.feature_visible: - selected_feature = [self.att_feature(feature) for feature in selected_feature] - return logit, selected_feature - else: - return logit - ''' - -def get_model_size(model): - result = 0 - for key,value in model.state_dict().items(): - s = 1 - for item in value.size(): - s *= item - result += s - print(key) - result *= 4 - return result - -def xception(pretrain_path=None, **kwargs): - model = Xception(**kwargs) - if pretrain_path != None: - state_dict = torch.load(pretrain_path) - if 'state_dict' in state_dict.keys(): - state_dict = torch.load(pretrain_path) - - ''' - for name, weights in state_dict.items(): - if 'pointwise' in name: - print("test") - state_dict[name] = weights.unsqueeze(-1).unsqueeze(-1) - ''' - own_state = model.state_dict() - - for name, param in state_dict.items(): - name = name.replace("module.", "") - if name in own_state: - if isinstance(param, torch.nn.Parameter): - # backwards compatibility for serialized parameters - param = param.data - try: - own_state[name].copy_(param) - except: - print('While copying the parameter named {}, ' - 'whose dimensions in the model are {} and ' - 'whose dimensions in the checkpoint are {}.' - .format(name, own_state[name].size(), param.size())) - - print("Features Extractor checkpoint loaded.") - return model diff --git a/video/mintime/model_code/predict.py b/video/mintime/model_code/predict.py deleted file mode 100644 index 85c65e1c3dacbcfe9ab9c2a89ceb622cd9dde967..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/predict.py +++ /dev/null @@ -1,563 +0,0 @@ - -import argparse -import cv2 -import numpy as np -import yaml -import random - -from typing import Type -import preprocessing.face_detector as face_detector -from preprocessing.face_detector import VideoDataset, VideoFaceDetector -from torch.utils.data.dataloader import DataLoader - -from PIL import Image - -import torch -from preprocessing.utils import preprocess_images, _generate_connected_components -from facenet_pytorch import InceptionResnetV1, fixed_image_standardization - -from statistics import mean - -from albumentations import Compose, RandomBrightnessContrast, HorizontalFlip, FancyPCA, HueSaturationValue, OneOf, ToGray, ShiftScaleRotate, ImageCompression, PadIfNeeded, GaussNoise, GaussianBlur, Rotate, Normalize, Resize -from transforms.albu import IsotropicResize - -from models.size_invariant_timesformer import SizeInvariantTimeSformer -from models.efficientnet.efficientnet_pytorch import EfficientNet -from models.baseline import Baseline -import os -from einops import rearrange -from utils import aggregate_attentions, draw_border, save_attention_plots -from models.xception import xception - - - -RANGE_SIZE = 5 -SIZE_EMB_DICT = [(1+i*RANGE_SIZE, (i+1)*RANGE_SIZE) if i != 0 else (0, RANGE_SIZE) for i in range(20)] - -def detect_faces(video_path, detector_cls: Type[VideoFaceDetector], opt): - # Init the face detector - detector = face_detector.__dict__[detector_cls](device=opt.gpu_id) - - # Read the video and its information - dataset = VideoDataset([video_path]) - loader = DataLoader(dataset, shuffle=False, num_workers=opt.workers, batch_size=1, collate_fn=lambda x: x) - - # Detect the faces - for item in loader: - bboxes = {} - video, indices, fps, frames = item[0] - bboxes.update({i : b for i, b in zip(indices, detector._detect_faces(frames))}) - found_faces = False - for key in bboxes: - if type(bboxes[key]) == list: - found_faces = True - break - - if not found_faces: - raise Exception("No faces found.") - - return bboxes - -def extract_crops(video_path, bboxes_dict): - - # Read video frames - frames = [] - - capture = cv2.VideoCapture(video_path) - frames_num = int(capture.get(cv2.CAP_PROP_FRAME_COUNT)) - fps = int(capture.get(5)) - - for i in range(frames_num): - capture.grab() - success, frame = capture.retrieve() - if not success: - continue - frames.append(frame) - - # Extract the faces crops - explored_indexes = [] - crops = [] - - for i in range(0, len(frames), fps): - while str(i) not in bboxes_dict: - if i == frames_num - 1: - i -= 1 - if i in explored_indexes: - break - else: - explored_indexes.append(i) - - frame = frames[i] - index = i - limit = i + fps - 1 - keys = [int(x) for x in list(bboxes_dict.keys())] - - while index < limit: - index += 1 - if index in keys and bboxes_dict[index] is not None: - break - if index == limit: - continue - - bboxes = bboxes_dict[index] - for bbox in bboxes: - xmin, ymin, xmax, ymax = [int(b * 2) for b in bbox] - w = xmax - xmin - h = ymax - ymin - - # Add some padding to catch background too - p_h = h // 3 - p_w = w // 3 - - crop_h = (ymax + p_h) - max(ymin - p_h, 0) - crop_w = (xmax + p_w) - max(xmin - p_w, 0) - - # Make the image square - if crop_h > crop_w: - p_h -= int(((crop_h - crop_w)/2)) - else: - p_w -= int(((crop_w - crop_h)/2)) - - # Extract the face from the frame - crop = frame[max(ymin - p_h, 0):ymax + p_h, max(xmin - p_w, 0):xmax + p_w] - - # Check if out of bound and correct - h, w = crop.shape[:2] - if h > w: - diff = int((h - w)/2) - if diff > 0: - crop = crop[diff:-diff,:] - else: - crop = crop[1:,:] - elif h < w: - diff = int((w - h)/2) - if diff > 0: - crop = crop[:,diff:-diff] - else: - crop = crop[:,:-1] - - # Add the extracted face to the list - crops.append((i, Image.fromarray(crop), bbox)) - - return crops - -def cluster_faces(crops, valid_cluster_size_ratio = 0.20, similarity_threshold = 0.45): - - # Convert crops to PIL images - crops_images = [row[1] for row in crops] - - # Extract the embeddings - embeddings_extractor = InceptionResnetV1(pretrained='vggface2').eval().to(device) - faces = [preprocess_images(face) for face in crops_images] - faces = np.stack([np.uint8(face) for face in faces]) - faces = torch.as_tensor(faces) - faces = faces.permute(0, 3, 1, 2).float() - faces = fixed_image_standardization(faces) - face_recognition_input = faces.cuda() - embeddings = [] - embeddings = embeddings_extractor(face_recognition_input).detach().cpu().numpy() - - # Clustering - valid_cluster_size = int(len(faces) * valid_cluster_size_ratio) - similarities = np.dot(np.array(embeddings), np.array(embeddings).T) - - components = _generate_connected_components( - similarities, similarity_threshold=similarity_threshold - ) - components = [sorted(component) for component in components] - - clustered_faces = {} - for identity_index, component in enumerate(components): - for index, face_index in enumerate(component): - component[index] = crops[face_index] - - clustered_faces[identity_index] = component - - return clustered_faces - -def get_identity_information(identity, faces): - mean_side = mean([row[1].size[0] for row in faces]) - number_of_faces = len(faces) - return [identity, mean_side, number_of_faces, faces] - -def get_sorted_identities(identities, discarded_faces, max_identities = 2, num_frames = 16): - sorted_identities = [] - discarded_faces = [] - for identity in identities: - sorted_identities.append(get_identity_information(identity, identities[identity])) - - ''' - # If no faces have been found, use the discarded faces - if len(sorted_identities) == 0: - sorted_identities.append(self.get_identity_information(identities)) - discarded_faces = [] - ''' - - # Sort identities based on faces size - sorted_identities = sorted(sorted_identities, key=lambda x:x[1], reverse=True) - - if len(sorted_identities) > max_identities: - sorted_identities = sorted_identities[:max_identities] - - # Adjust the identities list faces number - identities_number = len(sorted_identities) - available_additional_faces = [] - if identities_number > 1: - max_faces_per_identity = {1: [num_frames], - 2: [int(num_frames/2), int(num_frames/2)], - 3: [int(num_frames/3), int(num_frames/3), int(num_frames/4)], - 4: [int(num_frames/3), int(num_frames/3), int(num_frames/8), int(num_frames/8)]} - - max_faces_per_identity = max_faces_per_identity[identities_number] - for i in range(identities_number): - if sorted_identities[i][2] < max_faces_per_identity[i] and i < identities_number - 1: - sorted_identities[i+1][2] += max_faces_per_identity[i] - sorted_identities[i][2] - available_additional_faces.append(0) - elif sorted_identities[i][2] > max_faces_per_identity[i]: - available_additional_faces.append(sorted_identities[i][2] - max_faces_per_identity[i]) - sorted_identities[i][2] = max_faces_per_identity[i] - else: - available_additional_faces.append(0) - - else: # If only one identity is in the video, all the frames are assigned to this identity - sorted_identities[0][2] = num_frames - available_additional_faces.append(0) - - - # Check if we found enough faces to fullfill the input sequence, otherwise go back and add some faces from previous identities - input_sequence_length = sum(faces_number for _, _, faces_number, _ in sorted_identities) - if input_sequence_length < num_frames: - for i in range(identities_number): - needed_faces = num_frames - input_sequence_length - if available_additional_faces[i] > 0: - added_faces = min(available_additional_faces[i], needed_faces) - sorted_identities[i][2] += added_faces - input_sequence_length += added_faces - if input_sequence_length == num_frames: - break - # If not enough faces have been found, add some "dummy" images in the last identity - if input_sequence_length < num_frames: - needed_faces = num_frames - input_sequence_length - sorted_identities[-1][2] += needed_faces - input_sequence_length += needed_faces - - return sorted_identities, discarded_faces - -def create_val_transform(size, additional_targets): - return Compose([ - IsotropicResize(max_side=size, interpolation_down=cv2.INTER_AREA, interpolation_up=cv2.INTER_CUBIC), - PadIfNeeded(min_height=size, min_width=size, border_mode=cv2.BORDER_CONSTANT), - Resize(height=size, width=size) - ], additional_targets = additional_targets - ) - -def generate_masks(video_path, identities, discarded_faces, num_frames, image_size, num_patches): - mask = [] - last_range_end = 0 - sequence = [] - size_embeddings = [] - - images_frames = [] - for identity_index, identity in enumerate(identities): - max_faces = identity[2] - identity_images = identity[3] - ''' - # If no faces were considered for a frame during clustering, probably it is inside the discarded faces - if identity_index == 0 and len(discarded_faces) > 0: - frames = [int(os.path.basename(image_path).split("_")[0]) for image_path in identity_faces] - discarded_frames = [int(os.path.basename(image_path).split("_")[0]) for image_path in discarded_faces] - missing_frames = list(set(discarded_frames) - set(frames)) - missing_faces = [discarded_faces[discarded_frames.index(missing_frame)] for missing_frame in missing_frames] - - if len(missing_faces) > 0: - identity_faces = identity_faces + missing_faces # Add the missing faces to the identity - ''' - - - # Select uniformly the frames in an alternate way - if len(identity_images) > max_faces: - idx = np.round(np.linspace(0, len(identity_images) - 2, max_faces)).astype(int) - identity_images = np.asarray(identity_images)[idx] - - images_frames.extend(identity_image[0] for identity_image in identity_images) - identity_images = [identity_image[1] for identity_image in identity_images] - - # Generate size embeddings - capture = cv2.VideoCapture(video_path) - width = capture.get(3) - height = capture.get(4) - video_area = width*height/2 - identity_size_embeddings = [] - - for image_index, image in enumerate(identity_images): - # Get face-frame area ratio for size embedding - face_area = image.size[0] * image.size[1] - ratio = int(face_area * 100 / video_area) - side_ranges = list(map(lambda a_: ratio in range(a_[0], a_[1] + 1), SIZE_EMB_DICT)) - identity_size_embeddings.append(np.where(side_ranges)[0][0]+1) - - - # If the readed faces are less than max_faces we need to add empty images and generate the mask - if len(identity_images) < max_faces: - diff = max_faces - len(identity_size_embeddings) - identity_size_embeddings = np.concatenate((identity_size_embeddings, np.zeros(diff))) - identity_images.extend([np.zeros((image_size, image_size, 3), dtype=np.uint8) for i in range(diff)]) - mask.extend([1 if i < max_faces - diff else 0 for i in range(max_faces)]) - images_frames.extend([max(images_frames) for i in range(diff)]) - else: # Otherwise all the faces are valid - mask.extend([1 for i in range(max_faces)]) - - # Compose the size_embedding and sequence list - size_embeddings.extend(identity_size_embeddings) - sequence.extend(identity_images) - - # Transform the images, the same transformation is applied to all the faces in the same video - sequence = [np.asarray(image) for image in sequence] - additional_targets_keys = ["image" + str(i) for i in range(num_frames)] - additional_targets_values = ["image" for i in range(num_frames)] - additional_targets = dict(zip(additional_targets_keys, additional_targets_values)) - - - transform = create_val_transform(image_size, additional_targets) - if len(sequence) == 8: - transformed_images = transform(image=sequence[0], image1=sequence[1], image2=sequence[2], image3=sequence[3], image4=sequence[4], image5=sequence[5], image6=sequence[6], image7=sequence[7]) - elif len(sequence) == 16: - transformed_images = transform(image=sequence[0], image1=sequence[1], image2=sequence[2], image3=sequence[3], image4=sequence[4], image5=sequence[5], image6=sequence[6], image7=sequence[7], image8=sequence[8], image9=sequence[9], image10=sequence[10], image11=sequence[11], image12=sequence[12], image13=sequence[13], image14=sequence[14], image15=sequence[15]) - else: - raise Exception("Invalid number of frames.") - - sequence = [transformed_images[key] for key in transformed_images] - - # Generate the identities_mask telling to the model which faces attend to an identity and which to another one - identities_mask = [] - last_range_end = 0 - for identity_index in range(len(identities)): - identity_mask = [True if i >= last_range_end and i < last_range_end + identities[identity_index][2] else False for i in range(0, num_frames)] - for k in range(identities[identity_index][2]): - identities_mask.append(identity_mask) - last_range_end += identities[identity_index][2] - - # Generate coherent temporal-positional embedding - images_frames_positions = {k: v+1 for v, k in enumerate(sorted(set(images_frames)))} - frame_positions = [images_frames_positions[frame] for frame in images_frames] - if num_patches != None: - positions = [[i+1 for i in range(((frame_position-1)*num_patches), num_patches*(frame_position))] for frame_position in frame_positions] - positions = sum(positions, []) # Merge the lists - positions.insert(0,0) # Add CLS - else: - positions = [] - - tokens_per_identity = [(identities[i][0], identities[i][2]*num_patches + identities[i-1][2]*num_patches) if i > 0 else (identities[i][0], identities[i][2]*num_patches) for i in range(len(identities))] - - return torch.tensor([sequence]).float(), torch.tensor([size_embeddings]).int(), torch.tensor([mask]).bool(), torch.tensor([identities_mask]).bool(), torch.tensor([positions]), tokens_per_identity - - -def predict(video_path, clustered_faces, config, opt, discarded_faces = None): - - # Load required weights for feature extractor - if opt.extractor_model == 0: # EfficientNet-B0 - if opt.extractor_weights.lower() == 'imagenet': - features_extractor = EfficientNet.from_pretrained('efficientnet-b0') - else: - features_extractor = EfficientNet.from_name('efficientnet-b0') - features_extractor.load_matching_state_dict(torch.load(opt.extractor_weights, map_location=torch.device('cpu'))) - print("Custom features extractor weights loaded.") - else: # XceptionNet - if opt.extractor_weights.lower() == 'pretrained': - features_extractor = xception(num_classes=1, pretrain_path="weights/ckpt_iter.pth.tar") - else: - features_extractor = xception(num_classes=1, pretrain_path=opt.extractor_weights) - - - - # Init the model - model = SizeInvariantTimeSformer(config=config, require_attention=True) - num_patches = config['model']['num-patches'] - - - features_extractor = torch.nn.DataParallel(features_extractor) - model = torch.nn.DataParallel(model) - - # Move into GPU - features_extractor = features_extractor.to(device) - model = model.to(device) - features_extractor.eval() - model.eval() - - if os.path.exists(opt.model_weights): - model.load_state_dict(torch.load(opt.model_weights)) - else: - raise Exception("No checkpoint loaded for the model.") - - identities, discarded_faces = get_sorted_identities(clustered_faces, discarded_faces) - videos, size_embeddings, mask, identities_mask, positions, tokens_per_identity = generate_masks(video_path, identities, discarded_faces, config["model"]["num-frames"], config["model"]["image-size"], config["model"]["num-patches"]) - b, f, h, w, c = videos.shape - videos = videos.to(device) - identities_mask = identities_mask.to(device) - mask = mask.to(device) - positions = positions.to(device) - - - with torch.no_grad(): - video = rearrange(videos, "b f h w c -> (b f) c h w") - features = features_extractor(video) - - features = rearrange(features, '(b f) c h w -> b f c h w', b = b, f = f) - test_pred, attentions = model(features, mask=mask, size_embedding=size_embeddings, identities_mask=identities_mask, positions=positions) - - identity_names = [row[0] for row in tokens_per_identity] - frames_per_identity = [int(row[1] / config["model"]["num-patches"]) for row in tokens_per_identity] - - if opt.save_attentions: - aggregated_attentions, identity_attentions = aggregate_attentions(attentions, config['model']['heads'], config['model']['num-frames'], frames_per_identity) - save_attention_plots(aggregated_attentions, identity_names, frames_per_identity, config['model']['num-frames'], os.path.basename(video_path)) - else: - identity_attentions = [] - aggregated_attentions = [] - return torch.sigmoid(test_pred[0]).item(), identity_attentions, aggregated_attentions, identities, frames_per_identity - -def get_identities_bboxes(identities): - identities_bboxes = {} - for row in identities: - identity = row[3] - for face in identity: - frame = face[0] - if frame in identities_bboxes: - identities_bboxes[frame].append(face[2]) - else: - identities_bboxes[frame] = [face[2]] - return identities_bboxes - - -def generate_output_video(video_path, pred, identity_attentions, aggregated_attentions, identities, frames_per_identity): - - identities_bboxes = get_identities_bboxes(identities) - available_frames_keys = [frame for frame in identities_bboxes] - - cap = cv2.VideoCapture(video_path) - width = cap.get(3) - height = cap.get(4) - fps = int(cap.get(5)) - fourcc = hex(int(cap.get(cv2.CAP_PROP_FOURCC))) - output = cv2.VideoWriter("examples/preds/"+str(os.path.basename(video_path).replace(".mp4", ".avi")), cv2.VideoWriter_fourcc("X", "V", "I", "D"), fps, (int(width), int(height))) - frame_index = 0 - while True: - ret, frame = cap.read() - if ret: - nearest_frame_index = min(available_frames_keys, key=lambda x:abs(x - frame_index)) - if nearest_frame_index - frame_index > fps: - continue - - bbox = identities_bboxes[nearest_frame_index] - - for identity_index, identity_bbox in enumerate(bbox): - - xmin, ymin, xmax, ymax = [int(b * 2) for b in identity_bbox] - if pred > 0.5: - red = 255 * identity_attentions[identity_index] - green = 255 - red - - if red > green: - text = 'Fake ' + str(round(pred*100,2)) + "%" - else: - text = 'Pristine' - else: - green = int(255 * (1 - pred)) - red = 255 - green - text = 'Pristine ' + str(round((1-pred)*100,2)) + "%" - - color = (0, green, red) - frame = draw_border(frame, (xmin,ymin), (xmax,ymax), color, 2, 10, 20) - cv2.putText(frame, text, (xmin, ymin - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, color, 2) - - output.write(frame) - else: - break - - frame_index += 1 - output.release() - cap.release() - - - - -if __name__ == "__main__": - - parser = argparse.ArgumentParser() - parser.add_argument('--video_path', type=str, - help='Path to the video file') - parser.add_argument("--detector_type", help="type of the detector", default="FacenetDetector", - choices=["FacenetDetector"]) - parser.add_argument('--random_state', default=42, type=int, - help='Random state value') - parser.add_argument('--gpu_id', default=0, type=int, - help='ID of GPU to be used') - parser.add_argument('--workers', default=1, type=int, - help='Number of data loader workers.') - parser.add_argument('--config', type=str, - help="Which configuration to use. See into 'config' folder.") - parser.add_argument('--model_weights', type=str, - help='Model weights.') - parser.add_argument('--extractor_model', type=int, default=0, - help="Which model use for features extraction (0: EfficientNet; 1: XceptionNet).") - parser.add_argument('--extractor_weights', default='ImageNet', type=str, - help='Path to extractor weights or "imagenet".') - parser.add_argument('--output_type', default=0, type=int, - help='Specify which type of output is requested (0: Prediction; 1: Video)".') - parser.add_argument('--save_attentions', default=False, action="store_true", - help='Save attentions plots.') - - opt = parser.parse_args() - print(opt) - - os.environ["CUDA_VISIBLE_DEVICES"] = "0,1" - device = torch.device("cuda" if torch.cuda.is_available() else "cpu") - with open(opt.config, 'r') as ymlfile: - config = yaml.safe_load(ymlfile) - - # Check for integrity - if config['model']['num-frames'] != 8 and config['model']['num-frames'] != 16: - raise Exception("Invalid number of frames.") - - if not os.path.exists(opt.video_path): - raise Exception("Invalid video path.") - - - # Setup CUDA settings - torch.cuda.set_device(opt.gpu_id) - torch.backends.cudnn.deterministic = True - random.seed(opt.random_state) - torch.manual_seed(opt.random_state) - torch.cuda.manual_seed(opt.random_state) - np.random.seed(opt.random_state) - - - print("Detecting faces...") - bboxes_dict = detect_faces(opt.video_path, opt.detector_type, opt) - print("Face detection completed.") - - - print("Cropping faces from the video...") - crops = extract_crops(opt.video_path, bboxes_dict) - print("Faces cropping completed.") - - ''' - for j, crop in enumerate(crops): - cv2.imwrite("outputs/faces/face_{}.png".format(j), np.asarray(crop[1])) - ''' - - print("Clustering faces...") - clustered_faces = cluster_faces(crops) - print("Faces clustering completed.") - - - print("Searching for fakes in the video...") - pred, identity_attentions, aggregated_attentions, identities, frames_per_identity = predict(opt.video_path, clustered_faces, config, opt) - if pred > 0.5: - print("The video is fake ("+str(round(pred*100,2)) + "%), showing video result...") - else: - print("The video is pristine ("+str(round((1-pred)*100,2)) + "%), showing video result...") - if opt.output_type == 0: - print("Prediction", pred) - else: - generate_output_video(opt.video_path, pred, identity_attentions, aggregated_attentions, identities, frames_per_identity) diff --git a/video/mintime/model_code/preprocessing/cluster_faces.py b/video/mintime/model_code/preprocessing/cluster_faces.py deleted file mode 100644 index 78d0b0395f53a3f39042c11261ab1f8c594d0721..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/preprocessing/cluster_faces.py +++ /dev/null @@ -1,120 +0,0 @@ -# Since several subjects can be found within a video, it is necessary to cluster them into groups based on similarity. -# This operation is carried out in the following code with additional attention to maintaining the temporal coherence of faces. -# The extracted faces are reorganised into consecutive sequences of similar faces so as to be more suitable for network processing. - - -import argparse -import os -import glob -import torch -import numpy as np -import pandas as pd -import shutil -from functools import partial -from multiprocessing.pool import Pool -from numpy.linalg import norm -from PIL import Image -from torchvision import transforms -from facenet_pytorch import InceptionResnetV1, fixed_image_standardization -from collections import OrderedDict -from sklearn.cluster import KMeans -from torch.utils.data.dataloader import DataLoader -from progress.bar import ChargingBar -from utils import preprocess_images, _generate_connected_components - -seed = 42 -def move_files(face_paths): - src_path, dst_path = face_paths - os.makedirs(os.path.dirname(dst_path), exist_ok=True) - shutil.move(src_path, dst_path) - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument('--faces_path', default="../../datasets/ForgeryNet/faces", type=str, - help='Path of folder containing train/val/test with extracted cropped faces to be clustered.') - parser.add_argument('--gpu_id', default=0, type=int, - help='ID of GPU to be used.') - parser.add_argument('--similarity_threshold', default=0.45, type=float, - help='Threshold to discard faces with high distance.') - parser.add_argument('--valid_cluster_size_ratio', default=0.20, type=int, - help='Valid cluster size ratio.') - parser.add_argument('--workers', default=40, type=int, - help='Number of data loader workers.') - - opt = parser.parse_args() - print(opt) - - # Get all the paths of the videos to be clustered - for dataset in os.listdir(opt.faces_path): - dataset_path = os.path.join(opt.faces_path, dataset) - if not os.path.isdir(dataset_path): - continue - - print() - print("Clustering videos in ", dataset_path) - set_paths = glob.glob(f'{dataset_path}/*/**/*.mp4', recursive=True) - - excluded_videos = [] - for path in set_paths: - if os.path.exists(os.path.join(path, "0")): - excluded_videos.append(path) - - set_paths = [video_path for video_path in set_paths if video_path not in excluded_videos] - print("Excluded already clustered videos: ", len(excluded_videos)) - - # For each video in each set, perform faces clustering - bar = ChargingBar('Clustered videos', max=(len(set_paths))) - for path in set_paths: - # Read all faces, load them into a dictionary - faces_files = [face_file for face_file in os.listdir(path) if not os.path.isdir(os.path.join(path, face_file))] - faces_files = sorted(faces_files, key=lambda x:(int(x.split("_")[0]), int(os.path.splitext(x)[0].split("_")[1]))) - mapping = {} - faces = [] - - for index, face_file in enumerate(faces_files): - face_path = os.path.join(path, face_file) - frame_number = int(os.path.splitext(face_file)[0].split("_")[0]) - face = Image.open(face_path) - faces.append(face) - mapping[index] = face_path - - - - # Extract the embeddings - embeddings_extractor = InceptionResnetV1(pretrained='vggface2').eval().to(opt.gpu_id) - faces = [preprocess_images(face) for face in faces] - faces = np.stack([np.uint8(face) for face in faces]) - faces = torch.as_tensor(faces) - faces = faces.permute(0, 3, 1, 2).float() - faces = fixed_image_standardization(faces) - face_recognition_input = faces.cuda() - embeddings = [] - embeddings = embeddings_extractor(face_recognition_input).detach().cpu().numpy() - - # Clustering - valid_cluster_size = int(len(mapping) * opt.valid_cluster_size_ratio) - similarities = np.dot(np.array(embeddings), np.array(embeddings).T) - - components = _generate_connected_components( - similarities, similarity_threshold=opt.similarity_threshold - ) - components = [sorted(component) for component in components] - - mapped_components = [] - for identity_index, component in enumerate(components): - for index in component: - src_path = mapping[index] - folder_path = os.path.dirname(src_path) - file_name = os.path.basename(src_path) - dst_path = os.path.join(folder_path, str(identity_index), file_name) - mapped_components.append((src_path, dst_path)) - - - # Organize the clusters inside the folder - with Pool(processes=opt.workers) as p: - for v in p.imap_unordered(move_files, mapped_components): - continue - - bar.next() - - print() diff --git a/video/mintime/model_code/preprocessing/common.csv b/video/mintime/model_code/preprocessing/common.csv deleted file mode 100644 index c0bf3b642fb27c652293dc1ce3d349a504f3cc2a..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/preprocessing/common.csv +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bc220096eccdad2415a8863efae0ef9f2168e15dc94a44c61088d296fe92f5c8 -size 5213 diff --git a/video/mintime/model_code/preprocessing/count_multi_identities.py b/video/mintime/model_code/preprocessing/count_multi_identities.py deleted file mode 100644 index 6e76b72d51042a51ce38a24935061ac989f521c5..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/preprocessing/count_multi_identities.py +++ /dev/null @@ -1,72 +0,0 @@ -import os -from collections import Counter -import pandas as pd -import matplotlib.pyplot as plt - -CSV_PATH_TRAIN = "../../../datasets/ForgeryNet/faces/train_and_val.csv" - -CSV_PATH_TEST = "../../../datasets/ForgeryNet/faces/test.csv" -DATA_PATH = "../../../datasets/ForgeryNet/faces/" - -col_names = ["video", "label", "8_cls"] - -df_train = pd.read_csv(CSV_PATH_TRAIN, sep=' ', names=col_names) - -df_test = pd.read_csv(CSV_PATH_TEST, sep=' ', names=col_names) -counters_train_test = [] -for df in [df_train, df_test]: - indexes_to_drop = [] - for index, row in df.iterrows(): - video_path = os.path.join(DATA_PATH, row["video"]) - if not os.path.exists(video_path) or len(os.listdir(video_path)) == 0: - indexes_to_drop.append(index) - df.drop(df.index[indexes_to_drop], inplace=True) - - - identities_numbers = [] - for row in df.iterrows(): - video_path = os.path.join(DATA_PATH, row[1]["video"]) - identities = len(os.listdir(video_path)) - identities_numbers.append(identities) - - counters = Counter(identities_numbers) - counters_train_test.append(counters) - - -total_identities_train = sum(counters_train_test[0].values()) -total_identities_test = sum(counters_train_test[1].values()) - -collapsed_train_count = sum(count for num_identities, count in counters_train_test[0].items() if num_identities >= 4) -collapsed_test_count = sum(count for num_identities, count in counters_train_test[1].items() if num_identities >= 4) - -counters_train_test[0][4] = collapsed_train_count -counters_train_test[1][4] = collapsed_test_count - -data = { - 'Number of identities': list(range(1, 4)) + ['4+'], - 'Train': [counters_train_test[0][i] for i in range(1, 4)] + [counters_train_test[0][4]], - 'Test': [counters_train_test[1][i] for i in range(1, 4)] + [counters_train_test[1][4]] -} - -df_plot = pd.DataFrame(data) - -df_plot['Number of identities'] = df_plot['Number of identities'].apply(lambda x: '4+' if x == 4 else str(x)) - -plt.figure(figsize=(8, 6)) -bar_width = 0.35 -opacity = 0.8 - -plt.bar(df_plot.index, df_plot['Train'], bar_width, alpha=opacity, color='b', label='Train') -plt.bar([x + bar_width for x in df_plot.index], df_plot['Test'], bar_width, alpha=opacity, color='g', label='Test') - -plt.xlabel('Number of identities') -plt.ylabel('Number of videos') -plt.title('Number of videos by number of identities (Train and Test)') -plt.xticks([r + bar_width/2 for r in range(len(df_plot))], df_plot['Number of identities']) -plt.legend() - -output_path = "../outputs/plots/forgerynet_multiidentity_videos.png" -os.makedirs(os.path.dirname(output_path), exist_ok=True) -plt.savefig(output_path) - -print(counters_train_test) \ No newline at end of file diff --git a/video/mintime/model_code/preprocessing/detect_faces.py b/video/mintime/model_code/preprocessing/detect_faces.py deleted file mode 100644 index c975111b47204b7b6bfe65c657ed8c859b39b5b4..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/preprocessing/detect_faces.py +++ /dev/null @@ -1,115 +0,0 @@ -# The videos are given as input to the network for training and inference in the form of sequences of faces extracted from the frames. -# Faces are detected using a MTCNN in order to extract one per second. In the case of multiple faces within the same frame, all faces are extracted. - -import argparse -import json -import os -import numpy as np -from typing import Type - -from torch.utils.data.dataloader import DataLoader -from tqdm import tqdm -import pandas as pd -import face_detector -from face_detector import VideoDataset, VideoFaceDetector -import argparse - - -def process_videos(videos, detector_cls: Type[VideoFaceDetector], opt): - - detector = face_detector.__dict__[detector_cls](device=opt.gpu_id) - - dataset = VideoDataset(videos) - loader = DataLoader(dataset, shuffle=False, num_workers=opt.workers, batch_size=1, collate_fn=lambda x: x) - - missed_videos = [] # Used to print videos with no detected faces - - # For each video in the dataset, detect faces - for item in tqdm(loader): - result = {} - video, indices, fps, frames = item[0] - id = video.split(opt.data_path)[-1] - out_dir = opt.output_path + id - out_dir = out_dir.replace("video.mp4", '') - - # Skip already detected videos to improve speed - if os.path.exists(out_dir) and "video.json" in os.listdir(out_dir): - continue - - if fps == 0: - print("Zero fps video", video) - continue - - - result.update({i : b for i, b in zip(indices, detector._detect_faces(frames))}) - - # Save faces as json dictionary into output folder - os.makedirs(out_dir, exist_ok=True) - - with open(os.path.join(out_dir, "video.json"), "w") as f: - json.dump(result, f) - - # Check if some faces have been detected - found_faces = False - for key in result: - if type(result[key]) == list: - found_faces = True - break - - if not found_faces: - print("Faces not found", video) - missed_videos.append(video) - - # Display the missed videos - if len(missed_videos) > 0: - print("The detector did not find faces inside the following videos:") - print(missed_videos) - print(len(missed_videos)) - print("We suggest to re-run the code decreasing the detector threshold.") - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument('--list_file', default="../../datasets/ForgeryNet/Validation/video_list.txt", type=str, - help='Video List txt file path)') - parser.add_argument('--data_path', type=str, - help='Data directory', default='../../datasets/ForgeryNet/Validation/video') - parser.add_argument('--output_path', type=str, - help='Output directory', default='../../datasets/ForgeryNet/Validation/boxes') - parser.add_argument("--detector_type", help="type of the detector", default="FacenetDetector", - choices=["FacenetDetector"]) - parser.add_argument('--gpu_id', default=0, type=int, - help='ID of GPU to be used') - parser.add_argument('--workers', default=40, type=int, - help='Number of data loader workers.') - - opt = parser.parse_args() - print(opt) - - - # Read videos paths from which the user wants to detect faces - with open(opt.list_file, 'r') as temp_f: - col_count = [ len(l.split(" ")) for l in temp_f.readlines() ] - - column_names = [i for i in range(0, max(col_count))] - df = pd.read_csv(opt.list_file, sep=' ', names=column_names) - videos_paths = df.values.tolist() - videos_paths = list(dict.fromkeys([os.path.join(opt.data_path, os.path.dirname(row[1].split(" ")[0]), "video.mp4") for row in videos_paths])) - - # Ignore already extracted videos to improve speed - excluded_videos = [] - for path in videos_paths: - id = path.split(opt.data_path)[-1] - out_dir = opt.output_path + id - out_dir = out_dir.replace("video.mp4", '') - if os.path.exists(out_dir) and "video.json" in os.listdir(out_dir): - excluded_videos.append(path) - - videos_paths = [video_path for video_path in videos_paths if video_path not in excluded_videos] - print("Excluded videos:", len(excluded_videos)) - - # Start face detection - process_videos(videos_paths, opt.detector_type, opt) - -if __name__ == "__main__": - main() diff --git a/video/mintime/model_code/preprocessing/extract_crops.py b/video/mintime/model_code/preprocessing/extract_crops.py deleted file mode 100644 index 336bc44006bea33b37608e02693d50b5919087ec..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/preprocessing/extract_crops.py +++ /dev/null @@ -1,159 +0,0 @@ -# Following face detection, the json files containing the coordinates framing the faces identified by the MTCNN must be converted into images. - -import argparse -import json -import os -from os import cpu_count -from pathlib import Path -from collections import OrderedDict - -import pandas as pd -os.environ["MKL_NUM_THREADS"] = "1" -os.environ["NUMEXPR_NUM_THREADS"] = "1" -os.environ["OMP_NUM_THREADS"] = "1" -from functools import partial -from glob import glob -from multiprocessing.pool import Pool - -import cv2 - -cv2.ocl.setUseOpenCL(False) -cv2.setNumThreads(0) -from tqdm import tqdm - -def extract_video(video, data_path): - # Composes the path where the coordinates of the detected faces were saved - bboxes_path = data_path + "/boxes_better/" + video.split("video/")[-1].split(".")[0] + ".json" - if not os.path.exists(bboxes_path) or not os.path.exists(video): - print(bboxes_path, "not found\n") - return - - # Load the json dictionary and the corresponding video - with open(bboxes_path, "r") as bbox_f: - bboxes_dict = json.load(bbox_f) - capture = cv2.VideoCapture(video) - frames_num = int(capture.get(cv2.CAP_PROP_FRAME_COUNT)) - fps = int(capture.get(5)) - - - # For each frame, save the detected faces into files - frames = [] - for i in range(frames_num): - capture.grab() - success, frame = capture.retrieve() - if not success: - continue - frames.append(frame) - - explored_indexes = [] - - for i in range(0, len(frames), fps): - while str(i) not in bboxes_dict: - if i == frames_num - 1: - i -= 1 - if i in explored_indexes: - break - else: - explored_indexes.append(i) - - frame = frames[i] - id = os.path.splitext(os.path.basename(video))[0] - crops = [] - index = i - limit = i + fps - 1 - keys = [int(x) for x in list(bboxes_dict.keys())] - - while index < limit: - index += 1 - if index in keys and bboxes_dict[str(index)] is not None: - break - if index == limit: - continue - - bboxes = bboxes_dict[str(index)] - - for bbox in bboxes: - xmin, ymin, xmax, ymax = [int(b * 2) for b in bbox] - w = xmax - xmin - h = ymax - ymin - - # Add some padding to catch background too - p_h = h // 3 - p_w = w // 3 - - crop_h = (ymax + p_h) - max(ymin - p_h, 0) - crop_w = (xmax + p_w) - max(xmin - p_w, 0) - - # Make the image square - if crop_h > crop_w: - p_h -= int(((crop_h - crop_w)/2)) - else: - p_w -= int(((crop_w - crop_h)/2)) - - # Extract the face from the frame - crop = frame[max(ymin - p_h, 0):ymax + p_h, max(xmin - p_w, 0):xmax + p_w] - - # Check if out of bound and correct - h, w = crop.shape[:2] - if h > w: - diff = int((h - w)/2) - if diff > 0: - crop = crop[diff:-diff,:] - else: - crop = crop[1:,:] - elif h < w: - diff = int((w - h)/2) - if diff > 0: - crop = crop[:,diff:-diff] - else: - crop = crop[:,:-1] - - - # Add the extracted face to the list - crops.append(crop) - - # Save the extracted faces into files - tmp = video.split("release")[1] - out_dir = opt.output_path + tmp - os.makedirs(out_dir, exist_ok=True) - for j, crop in enumerate(crops): - try: - cv2.imwrite(os.path.join(out_dir, "{}_{}.png".format(i, j)), crop) - except: - print("Error writing image") - - - - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument('--list_file', default="../../datasets/ForgeryNet/Training/video_list.txt", type=str, - help='Images List txt file path)') - parser.add_argument('--data_path', default='../../datasets/ForgeryNet/Training', type=str, - help='Videos directory') - parser.add_argument('--output_path', default='../../datasets/ForgeryNet/Training/faces_fix/crops_fix', type=str, - help='Output directory') - parser.add_argument('--gpu_id', default=0, type=int, - help='ID of GPU to be used') - parser.add_argument('--workers', default=40, type=int, - help='Number of data loader workers.') - - opt = parser.parse_args() - print(opt) - - # Read the dataset - with open(opt.list_file, 'r') as temp_f: - col_count = [ len(l.split(" ")) for l in temp_f.readlines() ] - column_names = [i for i in range(0, max(col_count))] - os.makedirs(opt.output_path, exist_ok=True) - df = pd.read_csv(opt.list_file, sep=' ', names=column_names) - videos_paths = df.values.tolist() - videos_paths = list(dict.fromkeys([os.path.join(opt.data_path, "video", os.path.dirname(row[1].split(" ")[0]), "video.mp4") for row in videos_paths])) - - # Start face extraction - with Pool(processes=opt.workers) as p: - with tqdm(total=len(videos_paths)) as pbar: - for v in p.imap_unordered(partial(extract_video, data_path=opt.data_path), videos_paths): - pbar.update() - - \ No newline at end of file diff --git a/video/mintime/model_code/preprocessing/extract_features.py b/video/mintime/model_code/preprocessing/extract_features.py deleted file mode 100644 index e526b2b2a2060426caa2180ef2863c3a5011038d..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/preprocessing/extract_features.py +++ /dev/null @@ -1,75 +0,0 @@ -# It is possible to decide to extract features from previously detected face images in advance. This is done via an EfficientNet B0 and is useful if you are using the convolutional -# backbone freezed architecture. -# ATTENTION: The features take up a lot of disk space and it may therefore be unavoidable to have to extract them in the training phase as the images are loaded from the data loader. - -from utils import get_paths -from tqdm import tqdm -from efficientnet_pytorch import EfficientNet -from faces_dataset import FacesDataset -from torch.utils.data.dataloader import DataLoader -import argparse -import os -import pickle -import torch -from progress.bar import ChargingBar - - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument('--data_path', default='', type=str, - help='Faces images directory') - parser.add_argument('--support_files_path', default='support_files', type=str, - help='Path to save support files') - parser.add_argument('--gpu_id', default=0, type=int, - help='ID of GPU to be used') - parser.add_argument('--workers', default=40, type=int, - help='Number of data loader workers.') - parser.add_argument('--batch_size', default=48, type=int, - help='Batch size.') - parser.add_argument('--output_path', default='', type=str, - help='Features output directory') - - - opt = parser.parse_args() - print(opt) - - # Reading or saving the file containing previously saved paths to improve speed in the case of multiple executions. - print("Searching for faces...") - list_file_path = os.path.join(opt.support_files_path, "faces.txt") - if os.path.exists(list_file_path): - with open(list_file_path, 'rb') as fp: - paths = pickle.load(fp) - print("Backup file found, loaded", len(paths), "faces.") - else: - paths = get_paths(opt.data_path) - with open(list_file_path, 'wb') as fp: - pickle.dump(paths, fp) - print(len(paths), "faces found.") - - # Read faces and prepare them for extraction - dataset = FacesDataset(paths, output_dir = opt.output_path) - dl = torch.utils.data.DataLoader(dataset, batch_size=opt.batch_size, sampler=None, - batch_sampler=None, num_workers=opt.workers, collate_fn=None, - pin_memory=False, drop_last=False, timeout=0, - worker_init_fn=None, prefetch_factor=2, - persistent_workers=False) - - # Load the pretrained convolutional backbone - model = EfficientNet.from_pretrained('efficientnet-b0') - model = model.cuda(device=opt.gpu_id) - - - # Extract the features and save them into disk - bar = ChargingBar('Extracted: ', max=(len(dl))) - os.makedirs(opt.output_path, exist_ok=True) - for index, (faces, output_paths) in enumerate(dl): - faces = faces.cuda(device=opt.gpu_id) - features = model.extract_features(faces) - - for i in range(len(faces)): - os.makedirs(os.path.dirname(output_paths[i]), exist_ok = True) - torch.save(features[i], output_paths[i]) - - bar.next() - - diff --git a/video/mintime/model_code/preprocessing/face_detector.py b/video/mintime/model_code/preprocessing/face_detector.py deleted file mode 100644 index 18c809a9f10be2c09f66c8cbdd29609d95af8bb9..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/preprocessing/face_detector.py +++ /dev/null @@ -1,83 +0,0 @@ -# File containing classes used for face detection. - -import os -os.environ["MKL_NUM_THREADS"] = "1" -os.environ["NUMEXPR_NUM_THREADS"] = "1" -os.environ["OMP_NUM_THREADS"] = "1" - -from abc import ABC, abstractmethod -from collections import OrderedDict -from typing import List - - -import cv2 -cv2.ocl.setUseOpenCL(False) -cv2.setNumThreads(0) - -from PIL import Image -from facenet_pytorch.models.mtcnn import MTCNN -from torch.utils.data import Dataset - - -class VideoFaceDetector(ABC): - - def __init__(self, **kwargs) -> None: - super().__init__() - - @property - @abstractmethod - def _batch_size(self) -> int: - pass - - @abstractmethod - def _detect_faces(self, frames) -> List: - pass - - -# Class implementing the MTCNN performing face detection -class FacenetDetector(VideoFaceDetector): - - def __init__(self, device="cuda:0") -> None: - super().__init__() - self.detector = MTCNN( - device=device, - thresholds=[0.85, 0.95, 0.95], - margin=0, - ) - - def _detect_faces(self, frames) -> List: - batch_boxes, *_ = self.detector.detect(frames, landmarks=False) - if batch_boxes is None: - return [] - return [b.tolist() if b is not None else None for b in batch_boxes] - - @property - def _batch_size(self): - return 32 - -# Class for managing videos on which to perform face detection. The video is divided into frames when returned by getitem(). -class VideoDataset(Dataset): - - def __init__(self, videos) -> None: - super().__init__() - self.videos = videos - - def __getitem__(self, index: int): - video = self.videos[index] - capture = cv2.VideoCapture(video) - frames_num = int(capture.get(cv2.CAP_PROP_FRAME_COUNT)) - fps = int(capture.get(5)) - frames = OrderedDict() - for i in range(frames_num): - capture.grab() - success, frame = capture.retrieve() - if not success: - continue - frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) - frame = Image.fromarray(frame) - frame = frame.resize(size=[s // 2 for s in frame.size]) - frames[i] = frame - return video, list(frames.keys()), fps, list(frames.values()) - - def __len__(self) -> int: - return len(self.videos) diff --git a/video/mintime/model_code/preprocessing/faces_dataset.py b/video/mintime/model_code/preprocessing/faces_dataset.py deleted file mode 100644 index 6c7eb71c24e5217b2548ad8bf7812fdf9d70ae55..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/preprocessing/faces_dataset.py +++ /dev/null @@ -1,29 +0,0 @@ -# Class used in extract_features.py file - -from torch.utils.data import Dataset -from PIL import Image -import torch -from torchvision import transforms -import os -import cv2 -class FacesDataset(Dataset): - - def __init__(self, faces, output_dir) -> None: - super().__init__() - self.faces = faces - self.output_dir = output_dir - - def __getitem__(self, index: int): - # Preprocess the image as required by EfficientNet - face_path = self.faces[index] - tfms = transforms.Compose([transforms.Resize((224,224)), transforms.ToTensor(), - transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),]) - img = tfms(Image.open(face_path)) - - # Compose the output path - output_path = self.output_dir + face_path.split("faces")[1] + ".pt" - - return img, output_path - - def __len__(self) -> int: - return len(self.faces) diff --git a/video/mintime/model_code/preprocessing/merge_csv.py b/video/mintime/model_code/preprocessing/merge_csv.py deleted file mode 100644 index 37bed21b3be42e46156502a6f912897cc91df9fb..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/preprocessing/merge_csv.py +++ /dev/null @@ -1,11 +0,0 @@ -import pandas as pd - - -df1 = pd.read_csv("../../../datasets/dfdc_test_preview/test_videos_preview_labels.csv", sep=' ', names=["name", "label"]) -df2 = pd.read_csv("preview.csv", sep=' ', usecols=["name", "label"]) - - -df3 = df1.merge(df2, on=["name"]) - -df3 = df3.drop(["label_x"], axis=1) -df3.to_csv("common.csv", index=False) \ No newline at end of file diff --git a/video/mintime/model_code/preprocessing/preview.csv b/video/mintime/model_code/preprocessing/preview.csv deleted file mode 100644 index 3301cfcd9f057ea9a9e0a775f1fe416da66f853b..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/preprocessing/preview.csv +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4e1b4c504b4a6feb331565082dbad3df2ce1c0d9afe75571a20a9546938870cc -size 2688084 diff --git a/video/mintime/model_code/preprocessing/save_folder_structure.py b/video/mintime/model_code/preprocessing/save_folder_structure.py deleted file mode 100644 index bbb7d5efbb9fa8de4a46d4d746569459c04bf4a9..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/preprocessing/save_folder_structure.py +++ /dev/null @@ -1,11 +0,0 @@ -import os -import csv -import glob - -DATA_PATH = "../../datasets/ForgeryNet/faces" -paths = glob.glob(f'{DATA_PATH}/*/**/*.png', recursive=True) -print(len(paths)) - -with open('../csv/faces_files_structure.csv', 'w+') as f: - for path in paths: - f.write(path + "\n") diff --git a/video/mintime/model_code/preprocessing/split_dataset.py b/video/mintime/model_code/preprocessing/split_dataset.py deleted file mode 100644 index 33883edc54c0d601be5ec8c8f66ec43bc0b92a3d..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/preprocessing/split_dataset.py +++ /dev/null @@ -1,177 +0,0 @@ -# ForgeryNet provided a training set and a validation set but not a complete test set. With this code, the validation set is moved into a folder so that it can be used as a test set, -# while a new validation set is derived from the training set. -# The latter is constructed so that it has a distribution of deepfake generation methods equal to that of the training set and is composed of a number of samples equal to 10% -# of those in the training set. -# A plot is also generated to show the distribution of the three datasets. - -import os -import argparse -import pandas as pd -import math -import matplotlib.pyplot as plt -import collections -import random -import shutil -import glob -import csv - -seed = 42 - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument('--train_list_file', default="../../datasets/ForgeryNet/Training/video_list_complete.txt", type=str, - help='Videos List txt file path for training set (to be splitted in train and validation)') - parser.add_argument('--validation_list_file', default="../../datasets/ForgeryNet/Validation/video_list.txt", type=str, - help='Videos List txt file path for validation set (our test set)') - parser.add_argument('--plots_output_path', default="../outputs", type=str, - help='Plots output path') - parser.add_argument('--faces_path', default="../../datasets/ForgeryNet/faces", type=str, - help='Images path') - parser.add_argument('--validation_set_output_path', default="../../datasets/ForgeryNet/faces/val", type=str, - help='Test set output path') - parser.add_argument('--train_faces_path', default="../../datasets/ForgeryNet/faces/train", type=str, - help='Train images path') - parser.add_argument('--test_faces_path', default="../../datasets/ForgeryNet/faces/test", type=str, - help='Test images path') - - opt = parser.parse_args() - print(opt) - datasets = {"train": {}, "val": {}, "test": {}} - - # Reading of the training set and extraction of its distribution excluding videos in which no faces were found. - paths = glob.glob(f'{opt.train_faces_path}/*/**/*.mp4', recursive=True) - with open(opt.train_list_file, 'r') as temp_f: - col_count = [ len(l.split(" ")) for l in temp_f.readlines() ] - - column_names = [i for i in range(0, max(col_count))] - df = pd.read_csv(opt.train_list_file, sep=' ', names=column_names) - - training_counter = {} - column_names.reverse() - skipped = 0 - for index, row in df.iterrows(): - video_name = os.path.join(opt.train_faces_path, row[1].split("train_video_release/")[-1]) - if video_name not in paths: - skipped += 1 - continue - - for column_name in column_names: - if not math.isnan(row[column_name]): - deepfake_class = row[column_name] - break - - if deepfake_class in training_counter: - training_counter[deepfake_class] += 1 - else: - training_counter[deepfake_class] = 1 - - if deepfake_class in datasets["train"]: - datasets["train"][deepfake_class].append(video_name.replace("train_video_release", "train").replace(opt.train_faces_path, "train")) - else: - datasets["train"][deepfake_class] = [video_name.replace("train_video_release", "train").replace(opt.train_faces_path, "train")] - - print(skipped, "videos in training set without detected faces skipped.") - training_counter = collections.OrderedDict(sorted(training_counter.items())) - - # Construction of the validation set from the training set distribution - total_training_samples = len(df) - validation_size = total_training_samples/10 - total = 0 - validation_counter = {} - for key in training_counter: - percentage = training_counter[key]/total_training_samples - elements = validation_size*percentage - validation_counter[key] = int(elements) - training_counter[key] -= elements - - validation_counter = collections.OrderedDict(sorted(validation_counter.items())) - - # Plotting training set distribution - names = list(training_counter.keys()) - values = list(training_counter.values()) - x = [i-0.3 for i in range(len(training_counter))] - plt.bar(x, values, 0.3, tick_label=names, label = "Training Set") - - # Plotting validation set distribution - names = list(validation_counter.keys()) - values = list(validation_counter.values()) - x = [i for i in range(len(training_counter))] - plt.bar(x, values, 0.3, tick_label=names, label = "Validation Set") - - # Reading of the validation set (which will be used as a test set) and extraction of its distribution excluding videos in which no faces were found. - skipped = 0 - with open(opt.validation_list_file, 'r') as temp_f: - col_count = [ len(l.split(" ")) for l in temp_f.readlines() ] - - column_names = [i for i in range(0, max(col_count))] - df = pd.read_csv(opt.validation_list_file, sep=' ', names=column_names) - - test_counter = {} - column_names.reverse() - - paths = glob.glob(f'{opt.test_faces_path}/*/**/*.mp4', recursive=True) - for index, row in df.iterrows(): - video_name = os.path.join(opt.test_faces_path, row[1].split("val_video_release/")[-1]) - if video_name not in paths: - skipped += 1 - continue - - for column_name in column_names: - if not math.isnan(row[column_name]): - deepfake_class = row[column_name] - break - - if deepfake_class in test_counter: - test_counter[deepfake_class] += 1 - else: - test_counter[deepfake_class] = 1 - - if deepfake_class in datasets["test"]: - datasets["test"][deepfake_class].append(video_name.replace("val_video_release", "test").replace(opt.test_faces_path, "test")) - else: - datasets["test"][deepfake_class] = [video_name.replace("val_video_release", "test").replace(opt.test_faces_path, "test")] - - print(skipped, "videos in test set without detected faces skipped.") - test_counter = collections.OrderedDict(sorted(test_counter.items())) - - # Plotting test set distribution - names = list(test_counter.keys()) - values = list(test_counter.values()) - - x = [i+0.3 for i in range(len(test_counter))] - plt.bar(x, values, 0.3, tick_label=names, label = "Test Set") - - plt.legend() - plt.savefig(os.path.join(opt.plots_output_path, "distribution")) - - -# Move selected training files for the validation set construction into validation folder -for deepfake_class in datasets["train"]: - number_of_elements = validation_counter[deepfake_class] - extracted_elements = random.Random(seed).sample(datasets["train"][deepfake_class],number_of_elements) - for index, video_name in enumerate(extracted_elements): - out_path = os.path.join(opt.validation_set_output_path, video_name.split("Training/video")[-1]).replace("val/train", "val") - src_path = os.path.join(opt.faces_path, video_name).replace("train_video_release", "train") - datasets["train"][deepfake_class].remove(video_name) - if deepfake_class in datasets["val"]: - datasets["val"][deepfake_class].append(video_name.replace("train", "val")) - else: - datasets["val"][deepfake_class] = [video_name.replace("train", "val")] - if index % 500 == 0: - print("Moved", index, "videos into validation set.") - shutil.move(src_path, out_path) - -# Generate labels csv files for the three sets -for key in datasets: - f = open(os.path.join(opt.faces_path, key+".csv"), 'w+') - dataset = datasets[key] - for deepfake_class in dataset: - if deepfake_class == 0: - binary_class = "0" - else: - binary_class = "1" - for video in dataset[deepfake_class]: - row = video + " " + binary_class + " " + str(int(deepfake_class)) + "\n" - f.write(row) - - f.close() diff --git a/video/mintime/model_code/preprocessing/utils.py b/video/mintime/model_code/preprocessing/utils.py deleted file mode 100644 index ce21500677165f4fc7bc0555d59dc71f2d21b1f5..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/preprocessing/utils.py +++ /dev/null @@ -1,34 +0,0 @@ -# Utility functions used in preprocessing steps - -import glob -import os -from torchvision.transforms import Resize, ToPILImage, ToTensor -import networkx as nx - -# Returns all the files paths with a specific extension inside a requested root directory -def get_paths(rootdir, ext="png"): - paths = [] - for path in glob.glob(f'{rootdir}/*/**/*.'+ext, recursive=True): - paths.append(path) - return paths - -# Cluster the images generating a graph of connected components -def _generate_connected_components(similarities, similarity_threshold=0.80): - graph = nx.Graph() - for i in range(len(similarities)): - for j in range(len(similarities)): - if i != j and similarities[i, j] > similarity_threshold: - graph.add_edge(i, j) - - components_list = [] - for component in nx.connected_components(graph): - components_list.append(list(component)) - graph.clear() - graph = None - - return components_list - -# Method used to preprocess the image before features extraction in clustering step -def preprocess_images(img, shape=[128, 128]): - img = Resize(shape)(img) - return img diff --git a/video/mintime/model_code/requirements.txt b/video/mintime/model_code/requirements.txt deleted file mode 100644 index c02b978a55438ff3e4a1fa68dfdda80f977cceea..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/requirements.txt +++ /dev/null @@ -1,124 +0,0 @@ -absl-py==1.1.0 -albumentations==0.5.2 -astunparse==1.6.3 -blis==0.7.8 -Bottleneck==1.3.4 -brotlipy==0.7.0 -cachetools==5.2.0 -catalogue==2.0.7 -certifi==2022.5.18.1 -cffi==1.15.0 -charset-normalizer==2.0.4 -click==8.1.3 -colorama==0.4.4 -cryptography==37.0.1 -cycler==0.11.0 -cymem==2.0.6 -DateTime==4.5 -efficientnet-3D==1.0.2 -efficientnet-pytorch==0.7.1 -einops==0.4.1 -facenet-pytorch==2.5.2 -fastai==2.7.4 -fastcore==1.4.5 -fastdownload==0.0.6 -fastprogress==1.0.2 -filelock==3.7.1 -flatbuffers==1.12 -fonttools==4.33.3 -gast==0.4.0 -google-auth==2.8.0 -google-auth-oauthlib==0.4.6 -google-pasta==0.2.0 -grpcio==1.46.3 -h5py==3.7.0 -huggingface-hub==0.7.0 -idna==3.3 -imageio==2.19.3 -imgaug==0.4.0 -Jinja2==3.1.2 -joblib==1.1.0 -keras==2.9.0 -Keras-Preprocessing==1.1.2 -kiwisolver==1.4.2 -langcodes==3.3.0 -libclang==14.0.1 -Markdown==3.3.7 -MarkupSafe==2.1.1 -matplotlib==3.5.2 -mkl-fft==1.3.1 -mkl-random==1.2.2 -mkl-service==2.4.0 -murmurhash==1.0.7 -numexpr==2.7.3 -numpy==1.21.6 -oauthlib==3.2.0 -opencv-python==4.5.5.64 -opencv-python-headless==4.6.0.66 -opt-einsum==3.3.0 -packaging==21.3 -pandas==1.3.5 -pathy==0.6.2 -Pillow==9.0.1 -pip==21.2.4 -preshed==3.0.6 -progress==1.6 -protobuf==3.19.4 -pyasn1==0.4.8 -pyasn1-modules==0.2.8 -pycparser==2.21 -pydantic==1.8.2 -pyOpenSSL==22.0.0 -pyparsing==3.0.9 -PySocks==1.7.1 -python-dateutil==2.8.2 -python-magic==0.4.27 -pytorch-ranger==0.1.1 -pytz==2021.3 -PyWavelets==1.3.0 -PyYAML==6.0 -qudida==0.0.4 -regex==2022.6.2 -requests==2.27.1 -requests-oauthlib==1.3.1 -rsa==4.8 -scikit-image==0.18.3 -scikit-learn==1.0.1 -scipy==1.7.3 -seaborn==0.11.2 -setuptools==62.3.2 -Shapely==1.8.2 -six==1.16.0 -sklearn==0.0 -smart-open==5.2.1 -spacy==3.3.1 -spacy-legacy==3.0.9 -spacy-loggers==1.0.2 -srsly==2.4.3 -tensorboard==2.9.1 -tensorboard-data-server==0.6.1 -tensorboard-plugin-wit==1.8.1 -tensorflow==2.9.1 -tensorflow-estimator==2.9.0 -tensorflow-io-gcs-filesystem==0.26.0 -termcolor==1.1.0 -thinc==8.0.17 -threadpoolctl==3.1.0 -tifffile==2021.11.2 -timesformer-pytorch==0.4.1 -timm==0.5.4 -tokenizers==0.12.1 -torch==1.11.0 -torch-optimizer==0.3.0 -torchsummary==1.5.1 -torchvision==0.12.0 -tqdm==4.64.0 -transformers==4.20.0 -typer==0.4.1 -typing_extensions==4.1.1 -urllib3==1.26.9 -wasabi==0.9.1 -Werkzeug==2.1.2 -wheel==0.37.1 -wrapt==1.14.1 -zope.interface==5.4.0 diff --git a/video/mintime/model_code/splits/test.csv b/video/mintime/model_code/splits/test.csv deleted file mode 100644 index e108386c5f0b124cd922ce10f1216e27285de198..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/splits/test.csv +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7cc46d41ff9adfd0fd8cc2c76978c39afb9a2c41ee452ba10d29eab1f240e976 -size 1057929 diff --git a/video/mintime/model_code/splits/train.csv b/video/mintime/model_code/splits/train.csv deleted file mode 100644 index 1d9fd37be800b37762765251c897d19216b9b137..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/splits/train.csv +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b3c50e0031e5f100eb1e4b9e5b37eb8a18a852133ba61a9a5a4de7293d894e36 -size 10859496 diff --git a/video/mintime/model_code/splits/val.csv b/video/mintime/model_code/splits/val.csv deleted file mode 100644 index 2e669f16398c69d0f5aa8c2ad98e63804ddb8d10..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/splits/val.csv +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:749432545ddd35c6ce68225e2861eb488009572b6f98d9e91d1e52b80af0fc5b -size 1173388 diff --git a/video/mintime/model_code/test.py b/video/mintime/model_code/test.py deleted file mode 100644 index c9d05e0ba3ee45d719e97e977a3d9b53f715fe40..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/test.py +++ /dev/null @@ -1,291 +0,0 @@ - -import torch -import numpy as np -import argparse -from tqdm import tqdm -import math -import yaml -from utils import check_correct, aggregate_attentions, save_attention_plots, count_parameters, slowfast_input_transform -from torch.optim.lr_scheduler import LambdaLR -from datetime import datetime, timedelta -from statistics import mean -import tensorflow as tf -import collections -import os -import json -from sklearn import metrics -from sklearn.metrics import f1_score -from itertools import chain -import random -from einops import rearrange, reduce -import pandas as pd -from os import cpu_count -from multiprocessing.pool import Pool -from functools import partial -from multiprocessing import Manager -from progress.bar import ChargingBar -from torch.optim import lr_scheduler -from deepfakes_dataset import DeepFakesDataset -from models.size_invariant_timesformer import SizeInvariantTimeSformer -from models.efficientnet.efficientnet_pytorch import EfficientNet -from torch.utils.tensorboard import SummaryWriter -import torch_optimizer as optim -from timm.scheduler.cosine_lr import CosineLRScheduler -from models.baseline import Baseline -from models.xception import xception - - - - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - - parser.add_argument('--test_list_file', default="../../datasets/ForgeryNet/faces/test.csv", type=str, - help='Test List txt file path)') - parser.add_argument('--data_path', default="../../datasets/ForgeryNet/faces", type=str, - help='Path to the dataset converted into identities.') - parser.add_argument('--video_path', default="../../datasets/ForgeryNet/videos", type=str, - help='Path to the dataset original videos (.mp4 files).') - parser.add_argument('--deepfake_methods', nargs='*', required=False, - help="For ForgeryNet dataset, filter some deepfake methods for partial training.") - parser.add_argument('--workers', default=8, type=int, - help='Number of data loader workers.') - parser.add_argument('--random_state', default=42, type=int, - help='Random state value') - parser.add_argument('--model_weights', type=str, - help='Model weights.') - parser.add_argument('--extractor_model', type=int, default=0, - help="Which model use for features extraction (0: EfficientNet; 1: XceptionNet).") - parser.add_argument('--extractor_weights', default='ImageNet', type=str, - help='Path to extractor weights or "imagenet".') - parser.add_argument('--gpu_id', default=0, type=int, - help='ID of GPU to be used.') - parser.add_argument('--max_videos', type=int, default=-1, - help="Maximum number of videos to use for training (default: all).") - parser.add_argument('--only_multiidentity', default=False, action="store_true", - help='Use only multiidentity videos.') - parser.add_argument('--config', type=str, - help="Which configuration to use. See into 'config' folder.") - parser.add_argument('--model', type=int, - help="Which model to use. (0: Baseline | 1: Size Invariant TimeSformer | 2: SlowFast).") - parser.add_argument('--identities_ordering', type=int, default = 0, - help="Which ordering rule to use. (0: Size-based | 1: Frequency-based | 2: Random).") - parser.add_argument('--save_attentions', default=False, action="store_true", - help='Save attentions plots.') - opt = parser.parse_args() - - print(opt) - with open(opt.config, 'r') as ymlfile: - config = yaml.safe_load(ymlfile) - - os.environ["CUDA_VISIBLE_DEVICES"] = "0,1" - device = torch.device("cuda" if torch.cuda.is_available() else "cpu") - - - # Check for integrity - if config['model']['num-frames'] != 8 and config['model']['num-frames'] != 16: - raise Exception("Invalid number of frames.") - - - # Setup CUDA settings - torch.backends.cudnn.deterministic = True - random.seed(opt.random_state) - torch.manual_seed(opt.random_state) - torch.cuda.manual_seed(opt.random_state) - np.random.seed(opt.random_state) - - # Load required weights for feature extractor - if opt.model != 2: - if opt.extractor_model == 0: # EfficientNet-B0 - if opt.extractor_weights.lower() == 'imagenet': - features_extractor = EfficientNet.from_pretrained('efficientnet-b0') - else: - features_extractor = EfficientNet.from_name('efficientnet-b0') - features_extractor.load_matching_state_dict(torch.load(opt.extractor_weights, map_location=torch.device('cpu'))) - print("Custom features extractor weights loaded.") - else: # XceptionNet - if opt.extractor_weights.lower() == 'pretrained': - features_extractor = xception(num_classes=1, pretrain_path="weights/ckpt_iter.pth.tar") - else: - features_extractor = xception(num_classes=1, pretrain_path=opt.extractor_weights) - else: - features_extractor = None - - # Init the required model - if opt.model == 0: - model = Baseline(config=config) - num_patches = None - elif opt.model == 1: - model = SizeInvariantTimeSformer(config=config, require_attention=True) - num_patches = config['model']['num-patches'] - elif opt.model == 2: - torch.hub._validate_not_a_forked_repo=lambda a,b,c: True - model = torch.hub.load('facebookresearch/pytorchvideo', 'slowfast_r50', pretrained=True) - output_layer = torch.nn.Linear(2304 , 1) - model.blocks[6].proj = output_layer - num_patches = None - - - if features_extractor != None and opt.gpu_id == -1: - features_extractor = torch.nn.DataParallel(features_extractor) - - if opt.gpu_id == -1: - model = torch.nn.DataParallel(model) - - - if os.path.exists(opt.model_weights): - model.load_state_dict(torch.load(opt.model_weights)) - else: - raise Exception("No checkpoint loaded for the model.") - - loss_fn = torch.nn.BCEWithLogitsLoss() - - # Move into GPU - if features_extractor != None: - features_extractor = features_extractor.to(device) - features_extractor.eval() - print("Extractor Parameters: ", count_parameters(features_extractor)) - print("Model Parameters: ", count_parameters(model)) - model = model.to(device) - model.eval() - - # Read all the paths and initialize data loaders for train and validation - paths = [] - col_names = ["video", "label", "8_cls"] - df_test = pd.read_csv(opt.test_list_file, sep=' ', names=col_names) - df_test = df_test.sample(frac=1, random_state=opt.random_state).reset_index(drop=True) - - - # Filter out deepfake methods if requested for ForgeryNet - if opt.deepfake_methods is not None and len(opt.deepfake_methods) > 0: - opt.deepfake_methods = [int(method) for method in opt.deepfake_methods] - indexes_to_drop = [] - for index, row in df_test.iterrows(): - if row['8_cls'] not in opt.deepfake_methods: - indexes_to_drop.append(index) - df_test.drop(df_test.index[indexes_to_drop], inplace=True) - - # Filter out non-multi-identity videos if requested - if opt.only_multiidentity: - indexes_to_drop = [] - for index, row in df_test.iterrows(): - video_path = os.path.join(opt.data_path, row['video']) - folders = os.listdir(video_path) - if len(folders) < 2: - indexes_to_drop.append(index) - else: - counter = 0 - for folder in folders: - if os.path.isdir(os.path.join(opt.data_path, row['video'], folder)): - counter += 1 - if counter < 2: - indexes_to_drop.append(index) - - df_test.drop(df_test.index[indexes_to_drop], inplace=True) - - # Split videos and labels and reduce to the required number of videos - test_videos = df_test['video'].tolist() - test_labels = df_test['label'].tolist() - multiclass_labels = df_test['8_cls'].tolist() - class_counter = collections.Counter(multiclass_labels) - - if opt.max_videos > -1: - test_videos = test_videos[:opt.max_videos] - test_labels = test_labels[:opt.max_videos] - - test_samples = len(test_videos) - - # Create the data loaders - test_dataset = DeepFakesDataset(test_videos, test_labels, multiclass_labels = multiclass_labels, image_size=config['model']['image-size'], data_path=opt.data_path, video_path=opt.video_path, num_frames=config['model']['num-frames'], num_patches=num_patches, max_identities=config['model']['max-identities'], enable_identity_attention=config['model']['enable-identity-attention'], identities_ordering = opt.identities_ordering, mode='test') - test_dl = torch.utils.data.DataLoader(test_dataset, batch_size=config['test']['bs'], shuffle=False, sampler=None, - batch_sampler=None, num_workers=opt.workers, collate_fn=None, - pin_memory=False, drop_last=False, timeout=0, - worker_init_fn=None, prefetch_factor=2, - persistent_workers=False) - - # Print some useful statistics - print("Test videos:", test_samples) - print("__TEST STATS__") - test_counters = collections.Counter(test_labels) - print(test_counters) - - # Init variables - total_test_loss = 0 - test_correct = 0 - test_positive = 0 - test_negative = 0 - test_counter = 0 - - multiclass_errors = dict.fromkeys([i for i in range(9)]) - for key in multiclass_errors: - multiclass_errors[key] = [0, class_counter[key]] - - bar = ChargingBar('PREDICT', max=(len(test_dl))) - preds = [] - videos_errors = [] - - # Test loop - for index, (videos, size_embeddings, masks, identities_masks, positions, tokens_per_identity, labels, multiclass_labels, video_ids) in enumerate(test_dl): - b, f, h, w, c = videos.shape - labels = labels.unsqueeze(1).float() - identities_masks = identities_masks.to(device) - masks = masks.to(device) - positions = positions.to(device) - - with torch.no_grad(): - - if opt.model != 2: # Use the features extractor - videos = rearrange(videos, "b f h w c -> (b f) c h w") - videos = videos.to(device) - - features = features_extractor(videos) - if opt.model == 0: - test_pred = model(features) - test_pred = torch.mean(test_pred.reshape(-1, config["model"]["num-frames"]), axis=1).unsqueeze(1) - elif opt.model == 1: - features = rearrange(features, '(b f) c h w -> b f c h w', b = b, f = f) - test_pred, attentions = model(features, mask=masks, size_embedding=size_embeddings, identities_mask=identities_masks, positions=positions) - if opt.save_attentions: - identity_names = [row[0] for row in tokens_per_identity] - frames_per_identity = [int(row[1] / config["model"]["num-patches"]) for row in tokens_per_identity] - - aggregated_attentions, identity_attentions = aggregate_attentions(attentions, config['model']['heads'], config['model']['num-frames'], frames_per_identity) - - save_attention_plots(aggregated_attentions, identity_names, frames_per_identity, config['model']['num-frames'], video_ids[0]) - elif opt.model == 2: - videos = rearrange(videos, 'b f h w c -> b c f h w') - videos = slowfast_input_transform(videos) - videos = [torch.cat([v[None, ...].to(device) for v in videos[0]]), torch.cat([v[None, ...].to(device) for v in videos[1]])] - test_pred = model(videos) - - - if opt.model != 2: - videos = videos.cpu() - else: - videos = [torch.cat([v[None, ...].cpu() for v in videos[0]]), torch.cat([v[None, ...].cpu() for v in videos[1]])] - - test_pred = test_pred.cpu() - - test_loss = loss_fn(test_pred, labels) - total_test_loss += round(test_loss.item(), 2) - corrects, positive_class, negative_class, multiclass_errors, batch_errors = check_correct(test_pred, labels, multiclass_labels, multiclass_errors, video_ids) - videos_errors.extend(batch_errors) - test_correct += corrects - test_positive += positive_class - test_counter += 1 - test_negative += negative_class - preds.extend(test_pred) - bar.next() - - preds = [torch.sigmoid(torch.tensor(pred)) for pred in preds] - fpr, tpr, th = metrics.roc_curve(test_labels, preds) - auc = metrics.auc(fpr, tpr) - f1 = f1_score(test_labels, [round(pred.item()) for pred in preds]) - bar.finish() - total_test_loss /= test_counter - test_correct /= test_samples - print("Videos errors", videos_errors) - print("Class errors", multiclass_errors) - print(str(opt.model_weights) + " test loss:" + - str(total_test_loss) + " f1 score: " + str(f1) + " test accuracy:" + str(test_correct) + " test_0s:" + str(test_negative) + "/" + str(test_counters[0]) + " test_1s:" + str(test_positive) + "/" + str(test_counters[1]) + " AUC " + str(auc)) - \ No newline at end of file diff --git a/video/mintime/model_code/train.py b/video/mintime/model_code/train.py deleted file mode 100644 index d6c91478226d133a47628e7efde99f8ec3d42b17..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/train.py +++ /dev/null @@ -1,480 +0,0 @@ -# The training process is conducted using this code and it can be customized on the specific model that you want to train. - -import numpy as np -import argparse -from tqdm import tqdm -import math -import yaml -from utils import check_correct, unix_time_millis, slowfast_input_transform -from torch.optim.lr_scheduler import LambdaLR -from datetime import datetime, timedelta -from statistics import mean -import tensorflow as tf -import collections -import os -import json -from itertools import chain -import random -from einops import rearrange, reduce -import pandas as pd -from os import cpu_count -from multiprocessing.pool import Pool -from functools import partial -from multiprocessing import Manager -from progress.bar import ChargingBar -from torch.optim import lr_scheduler -from deepfakes_dataset import DeepFakesDataset -from models.size_invariant_timesformer import SizeInvariantTimeSformer -from models.efficientnet.efficientnet_pytorch import EfficientNet -from torch.utils.tensorboard import SummaryWriter -import torch_optimizer as optim -from timm.scheduler.cosine_lr import CosineLRScheduler -from models.baseline import Baseline -from models.xception import xception -import pytorchvideo -from pytorchvideo.models.hub.slowfast import _slowfast -from contextlib import redirect_stderr -import sys -os.environ["CUDA_VISIBLE_DEVICES"] = "1" - -import torch - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument('--train_list_file', default="../../datasets/ForgeryNet/faces/train_and_val.csv", type=str, - help='Training List txt file path)') - parser.add_argument('--validation_list_file', default="../../datasets/ForgeryNet/faces/test.csv", type=str, - help='Validation List txt file path)') - parser.add_argument('--data_path', default="../../datasets/ForgeryNet/faces", type=str, - help='Path to the dataset converted into identities.') - parser.add_argument('--video_path', default="../../datasets/ForgeryNet/videos", type=str, - help='Path to the dataset original videos (.mp4 files).') - parser.add_argument('--deepfake_methods', nargs='*', required=False, - help="For ForgeryNet dataset, filter some deepfake methods for partial training.") - parser.add_argument('--num_epochs', default=30, type=int, - help='Number of training epochs.') - parser.add_argument('--workers', default=8, type=int, - help='Number of data loader workers.') - parser.add_argument('--random_state', default=42, type=int, - help='Random state value') - parser.add_argument('--freeze_backbone', default=False, action="store_true", - help='Maintain the backbone freezed or train it.') - parser.add_argument('--restore_epoch', default=False, action="store_true", - help='When resume checkpoint specified, resume from the exact epoch.') - parser.add_argument('--extractor_model', type=int, default=0, - help="Which model use for features extraction (0: EfficientNet; 1: XceptionNet).") - parser.add_argument('--extractor_unfreeze_blocks', type=int, default=-1, - help="How many layers unfreeze in the extractor.") - parser.add_argument('--extractor_weights', default='ImageNet', type=str, - help='Path to extractor weights or "imagenet".') - parser.add_argument('--gpu_id', default=0, type=int, - help='ID of GPU to be used.') - parser.add_argument('--resume', default='', type=str, metavar='PATH', - help='Path to latest checkpoint (default: none).') - parser.add_argument('--max_videos', type=int, default=-1, - help="Maximum number of videos to use for training (default: all).") - parser.add_argument('--config', type=str, - help="Which configuration to use. See into 'config' folder.") - parser.add_argument('--model', type=int, - help="Which model to use. (0: Baseline | 1: Size Invariant TimeSformer | 2: SlowFast).") - parser.add_argument('--patience', type=int, default=5, - help="How many epochs wait before stopping for validation loss not improving.") - parser.add_argument('--logger_name', default='runs/train', - help='Path to save the model and Tensorboard log.') - parser.add_argument('--errors_logs_file', default=None, - help='Path to save the error logs.') - parser.add_argument('--identities_ordering', type=int, default = 0, - help="Which ordering rule to use. (0: Size-based | 1: Length-based | 2: Random).") - parser.add_argument('--models_output_path', default='"outputs/models"', - help='Output path for checkpoints.') - opt = parser.parse_args() - - print(opt) - with open(opt.config, 'r') as ymlfile: - config = yaml.safe_load(ymlfile) - - # Log errors to file - if opt.errors_logs_file is not None: - sys.stderr = open(opt.errors_logs_file, "w") - - # Check for integrity - if config['model']['num-frames'] != 8 and config['model']['num-frames'] != 16 and config['model']['num-frames'] != 32: - raise Exception("Invalid number of frames.") - - # Setup CUDA settings - if opt.gpu_id == -1: - device = torch.device("cuda" if torch.cuda.is_available() else "cpu") - else: - device = opt.gpu_id - - torch.backends.cudnn.deterministic = True - random.seed(opt.random_state) - torch.manual_seed(opt.random_state) - torch.cuda.manual_seed(opt.random_state) - np.random.seed(opt.random_state) - - # Create useful dirs - os.makedirs(opt.logger_name, exist_ok=True) - os.makedirs(opt.models_output_path, exist_ok=True) - - # Load required weights for feature extractor - if opt.model != 2: - if opt.extractor_model == 0: # EfficientNet-B0 - if opt.extractor_weights.lower() == 'imagenet': - features_extractor = EfficientNet.from_pretrained('efficientnet-b0') - else: - features_extractor = EfficientNet.from_name('efficientnet-b0') - features_extractor.load_matching_state_dict(torch.load(opt.extractor_weights, map_location=torch.device('cpu'))) - print("Custom features extractor weights loaded.") - else: # XceptionNet - if opt.extractor_weights.lower() == 'pretrained': - features_extractor = xception(num_classes=1, pretrain_path="weights/ckpt_iter.pth.tar") - else: - features_extractor = xception(num_classes=1, pretrain_path=opt.extractor_weights) - else: - features_extractor = None - # Init the required model - if opt.model == 0: - model = Baseline(config=config) - num_patches = None - elif opt.model == 1: - model = SizeInvariantTimeSformer(config=config) - num_patches = config['model']['num-patches'] - elif opt.model == 2: - torch.hub._validate_not_a_forked_repo=lambda a,b,c: True - model = torch.hub.load('facebookresearch/pytorchvideo', 'slowfast_r50', pretrained=True) - output_layer = torch.nn.Linear(2304 , 1) - model.blocks[6].proj = output_layer - num_patches = None - - - - # Setup the requiring grad layers for features extractor - if features_extractor is not None: - if opt.freeze_backbone: - features_extractor.eval() - else: - features_extractor.train() - if opt.extractor_unfreeze_blocks > -1: - for name, param in features_extractor.named_parameters(): - if "blocks" in name: - param_block = int(name.split(".")[1]) - if param_block >= 16 - opt.extractor_unfreeze_blocks: - param.requires_grad = True - else: - param.requires_grad = False - else: - param.requires_grad = False - else: - for name, param in features_extractor.named_parameters(): - param.requires_grad = True - - # Move models to GPU - print(device, torch.cuda.device_count()) - features_extractor = features_extractor.to(device) - - model = model.to(device) - model.train() - - # Init optimizers - if opt.freeze_backbone: - parameters = model.parameters() - else: - parameters = chain(features_extractor.parameters(), model.parameters()) - - if config['training']['optimizer'].lower() == 'sgd': - optimizer = torch.optim.SGD(parameters, lr=config['training']['lr'], weight_decay=config['training']['weight-decay']) - elif config['training']['optimizer'].lower() == 'adamw': - optimizer = torch.optim.AdamW(parameters, lr=config['training']['lr'], weight_decay=config['training']['weight-decay']) - elif config['training']['optimizer'].lower() == 'adam': - optimizer = torch.optim.Adam(parameters, lr=config['training']['lr'], weight_decay=config['training']['weight-decay']) - else: - print("Error: Invalid optimizer specified in the config file.") - exit() - - - - # Read all the paths and initialize data loaders for train and validation - paths = [] - col_names = ["video", "label", "8_cls"] - df_train = pd.read_csv(opt.train_list_file, sep=' ', names=col_names) - df_validation = pd.read_csv(opt.validation_list_file, sep=' ', names=col_names) - - df_train = df_train.sample(frac=1, random_state=opt.random_state).reset_index(drop=True) - df_validation = df_validation.sample(frac=1, random_state=opt.random_state).reset_index(drop=True) - - - # Remove the videos without face detection from the list - for df in [df_train, df_validation]: - indexes_to_drop = [] - for index, row in df.iterrows(): - video_path = os.path.join(opt.data_path, row["video"]) - if not os.path.exists(video_path) or len(os.listdir(video_path)) == 0: - indexes_to_drop.append(index) - df.drop(df.index[indexes_to_drop], inplace=True) - - # Filter out deepfake methods if requested for ForgeryNet - if opt.deepfake_methods is not None and len(opt.deepfake_methods) > 0: - opt.deepfake_methods = [int(method) for method in opt.deepfake_methods] - for df in [df_train, df_validation]: - indexes_to_drop = [] - for index, row in df.iterrows(): - if row['8_cls'] not in opt.deepfake_methods: - indexes_to_drop.append(index) - df.drop(df.index[indexes_to_drop], inplace=True) - - # Split videos and labels and reduce to the required number of videos - train_videos = df_train['video'].tolist() - train_labels = df_train['label'].tolist() - - validation_videos = df_validation['video'].tolist() - validation_labels = df_validation['label'].tolist() - - if opt.max_videos > -1: - train_videos = train_videos[:opt.max_videos] - train_labels = train_labels[:opt.max_videos] - validation_videos = validation_videos[:opt.max_videos] - validation_labels = validation_labels[:opt.max_videos] - - train_samples = len(train_videos) - validation_samples = len(validation_videos) - - # Print some useful statistics - print("Train videos:", train_samples, "Validation videos:", validation_samples) - print("__TRAINING STATS__") - train_counters = collections.Counter(train_labels) - print(train_counters) - - class_weights = train_counters[0] / train_counters[1] - print("Weights", class_weights) - - print("__VALIDATION STATS__") - val_counters = collections.Counter(validation_labels) - print(val_counters) - print("___________________") - - - # Init logger - tb_logger = SummaryWriter(log_dir=opt.logger_name, comment='') - experiment_path = tb_logger.get_logdir() - - loss_fn = torch.nn.BCEWithLogitsLoss(pos_weight=torch.tensor([class_weights])) - - # Create the data loaders - train_dataset = DeepFakesDataset(train_videos, train_labels, augmentation=config['training']['augmentation'], image_size=config['model']['image-size'], data_path=opt.data_path, video_path=opt.video_path, num_frames=config['model']['num-frames'], num_patches=num_patches, max_identities=config['model']['max-identities'], enable_identity_attention=config['model']['enable-identity-attention'], identities_ordering = opt.identities_ordering) - train_dl = torch.utils.data.DataLoader(train_dataset, batch_size=config['training']['bs'], shuffle=True, sampler=None, - batch_sampler=None, num_workers=opt.workers, collate_fn=None, - pin_memory=False, drop_last=False, timeout=0, - worker_init_fn=None, prefetch_factor=2, - persistent_workers=False) - - validation_dataset = DeepFakesDataset(validation_videos, validation_labels, image_size=config['model']['image-size'], data_path=opt.data_path, video_path=opt.video_path, num_frames=config['model']['num-frames'], num_patches=num_patches, max_identities=config['model']['max-identities'], enable_identity_attention=config['model']['enable-identity-attention'], identities_ordering = opt.identities_ordering, mode='val') - val_dl = torch.utils.data.DataLoader(validation_dataset, batch_size=config['training']['val_bs'], shuffle=True, sampler=None, - batch_sampler=None, num_workers=opt.workers, collate_fn=None, - pin_memory=False, drop_last=False, timeout=0, - worker_init_fn=None, prefetch_factor=2, - persistent_workers=False) - - # Init LR schedulers - if config['training']['scheduler'].lower() == 'steplr': - scheduler = lr_scheduler.StepLR(optimizer, step_size=config['training']['step-size'], gamma=config['training']['gamma']) - elif config['training']['scheduler'].lower() == 'cosinelr': - num_steps = int(opt.num_epochs * len(train_dl)) - lr_scheduler = CosineLRScheduler( - optimizer, - t_initial=num_steps, - lr_min=config['training']['lr'] * 1e-1, - cycle_limit=1, - t_in_epochs=False, - ) - else: - print("Warning: Invalid scheduler specified in the config file.") - - - if opt.gpu_id == -1: - features_extractor = torch.nn.DataParallel(features_extractor) - model = torch.nn.DataParallel(model) - - starting_epoch = 0 - if os.path.exists(opt.resume): - model.load_state_dict(torch.load(opt.resume)) - if opt.restore_epoch: - starting_epoch = int(opt.resume.split("checkpoint")[1].split("_")[0]) + 1 # The checkpoint's file name format should be "checkpoint_EPOCH" - else: - print("No checkpoint loaded for the model.") - - - - - # Init variables for training - not_improved_loss = 0 - previous_loss = math.inf - - # Training loop - for t in range(starting_epoch, opt.num_epochs + 1): - model.train() - if not_improved_loss == opt.patience: - break - - # Init epoch variables - counter = 0 - total_loss = 0 - total_val_loss = 0 - train_correct = 0 - positive = 0 - negative = 0 - train_batches = len(train_dl) - val_batches = len(val_dl) - total_batches = train_batches + val_batches - - # Epoch loop - bar = ChargingBar('EPOCH #' + str(t), max=(len(train_dl)+len(val_dl))) - for index, (videos, size_embeddings, masks, identities_masks, positions, labels) in enumerate(train_dl): - start_time = datetime.now() - b, f, h, w, c = videos.shape - labels = labels.unsqueeze(1).float() - identities_masks = identities_masks.to(device) - masks = masks.to(device) - positions = positions.to(device) - - if opt.model != 2: # Use the features extractor - videos = rearrange(videos, "b f h w c -> (b f) c h w") - videos = videos.to(device) - - if opt.freeze_backbone: - with torch.no_grad(): - features = features_extractor(videos) - else: - features = features_extractor(videos) - - if opt.model == 0: # Baseline - y_pred = model(features) - y_pred = torch.mean(y_pred.reshape(-1, config["model"]["num-frames"]), axis=1).unsqueeze(1) - elif opt.model == 1: # Size-Invariant TimeSformer - features = rearrange(features, '(b f) c h w -> b f c h w', b = b, f = f) - y_pred = model(features, mask=masks, size_embedding=size_embeddings, identities_mask=identities_masks, positions=positions) - else: # SlowFast - videos = rearrange(videos, 'b f h w c -> b c f h w') - videos = slowfast_input_transform(videos) - videos = [torch.cat([v[None, ...].to(device) for v in videos[0]]), torch.cat([v[None, ...].to(device) for v in videos[1]])] - y_pred = model(videos) - - # Calculate loss - if opt.model != 2: - videos = videos.cpu() - else: - videos = [torch.cat([v[None, ...].cpu() for v in videos[0]]), torch.cat([v[None, ...].cpu() for v in videos[1]])] - y_pred = y_pred.cpu() - loss = loss_fn(y_pred, labels) - corrects, positive_class, negative_class = check_correct(y_pred, labels) - train_correct += corrects - positive += positive_class - negative += negative_class - counter += 1 - total_loss += round(loss.item(), 2) - - optimizer.zero_grad() - loss.backward() - optimizer.step() - - if config['training']['scheduler'].lower() == 'cosinelr': - lr_scheduler.step_update((t * (train_batches) + index)) - - # Update time per epoch - time_diff = unix_time_millis(datetime.now() - start_time) - - bar.next() - - # Print intermediate metrics - if index%100 == 0: - expected_time = str(datetime.fromtimestamp((time_diff)*(total_batches-index)/1000).strftime('%H:%M:%S.%f')) - print("\nLoss: ", total_loss/counter, "Accuracy: ", train_correct/(counter*config['training']['bs']) ,"Train 0s: ", negative, "Train 1s:", positive, "Expected Time:", expected_time) - - - # Clean variables before moving into validation - #torch.cuda.empty_cache() - val_correct = 0 - val_positive = 0 - val_negative = 0 - val_counter = 0 - train_correct /= train_samples - total_loss /= counter - model.eval() - - # Epoch validation loop - for index, (videos, size_embeddings, masks, identities_masks, positions, labels) in enumerate(val_dl): - b, f, _, _, _= videos.shape - masks = masks.to(device) - positions = positions.to(device) - identities_masks = identities_masks.to(device) - labels = labels.unsqueeze(1).float() - - # Do not update the gradient during validation - with torch.no_grad(): - if opt.model == 0: - videos = videos.to(device) - videos = rearrange(videos, 'b f h w c -> (b f) c h w') - features = features_extractor(videos) - val_pred = model(features) - val_pred = torch.mean(val_pred.reshape(-1, config["model"]["num-frames"]), axis=1).unsqueeze(1) - elif opt.model == 1: - videos = videos.to(device) - videos = rearrange(videos, 'b f h w c -> (b f) c h w') # B*8 x 3 x 224 x 224 - features = features_extractor(videos) # B*8 x 1280 x 7 x 7 - features = rearrange(features, '(b f) c h w -> b f c h w', b = b, f = f) - val_pred = model(features, mask=masks, size_embedding=size_embeddings, identities_mask=identities_masks, positions=positions) - elif opt.model == 2: - videos = rearrange(videos, 'b f h w c -> b c f h w') - videos = slowfast_input_transform(videos) - videos = [torch.cat([v[None, ...].to(device) for v in videos[0]]), torch.cat([v[None, ...].to(device) for v in videos[1]])] - val_pred = model(videos) - - videos = [torch.cat([v[None, ...].cpu() for v in videos[0]]), torch.cat([v[None, ...].cpu() for v in videos[1]])] - - val_pred = val_pred.cpu() - val_loss = loss_fn(val_pred, labels) - total_val_loss += round(val_loss.item(), 2) - corrects, positive_class, negative_class = check_correct(val_pred, labels) - val_correct += corrects - val_positive += positive_class - val_counter += 1 - val_negative += negative_class - bar.next() - - if config['training']['scheduler'].lower() == 'steplr': - scheduler.step() - - - bar.finish() - - total_val_loss /= val_counter - val_correct /= validation_samples - - if previous_loss <= total_val_loss: - print("Validation loss did not improved") - not_improved_loss += 1 - else: - not_improved_loss = 0 - - - # Save checkpoint if the model's validation loss is improving - if previous_loss > total_val_loss: - if opt.model != 2: - torch.save(features_extractor.state_dict(), os.path.join(opt.models_output_path, "Extractor_checkpoint" + str(t))) - torch.save(model.state_dict(), os.path.join(opt.models_output_path, "Model_checkpoint" + str(t))) - - previous_loss = total_val_loss - # Log some metrics into Tensorboard - tb_logger.add_scalar("Training/Accuracy", train_correct, t) - tb_logger.add_scalar("Training/Loss", total_loss, t) - tb_logger.add_scalar("Training/Learning_Rate", optimizer.param_groups[0]['lr'], t) - tb_logger.add_scalar("Validation/Loss", total_val_loss, t) - tb_logger.add_scalar("Validation/Accuracy", val_correct, t) - - # Print epoch metrics - print("#" + str(t) + "/" + str(opt.num_epochs) + " loss:" + - str(total_loss) + " accuracy:" + str(train_correct) +" val_loss:" + str(total_val_loss) + " val_accuracy:" + str(val_correct) + " val_0s:" + str(val_negative) + "/" + str(val_counters[0]) + " val_1s:" + str(val_positive) + "/" + str(val_counters[1])) - - - - diff --git a/video/mintime/model_code/train_frame_level.py b/video/mintime/model_code/train_frame_level.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/video/mintime/model_code/transforms/albu.py b/video/mintime/model_code/transforms/albu.py deleted file mode 100644 index 7cead378f8f9659a3db0387b9bac4156b13eb445..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/transforms/albu.py +++ /dev/null @@ -1,45 +0,0 @@ -import random - -import cv2 -import numpy as np -from albumentations import DualTransform, ImageOnlyTransform -from albumentations.augmentations.functional import crop - -# Resize the image isotropically -def isotropically_resize_image(img, size, interpolation_down=cv2.INTER_AREA, interpolation_up=cv2.INTER_CUBIC): - h, w = img.shape[:2] - - if max(w, h) == size: - return img - if w > h: - scale = size / w - h = h * scale - w = size - else: - scale = size / h - w = w * scale - h = size - interpolation = interpolation_up if scale > 1 else interpolation_down - - img = img.astype('uint8') - resized = cv2.resize(img, (int(w), int(h)), interpolation=interpolation) - return resized - - -class IsotropicResize(DualTransform): - def __init__(self, max_side, interpolation_down=cv2.INTER_AREA, interpolation_up=cv2.INTER_CUBIC, - always_apply=False, p=1): - super(IsotropicResize, self).__init__(always_apply, p) - self.max_side = max_side - self.interpolation_down = interpolation_down - self.interpolation_up = interpolation_up - - def apply(self, img, interpolation_down=cv2.INTER_AREA, interpolation_up=cv2.INTER_CUBIC, **params): - return isotropically_resize_image(img, size=self.max_side, interpolation_down=interpolation_down, - interpolation_up=interpolation_up) - - def apply_to_mask(self, img, **params): - return self.apply(img, interpolation_down=cv2.INTER_NEAREST, interpolation_up=cv2.INTER_NEAREST, **params) - - def get_transform_init_args_names(self): - return ("max_side", "interpolation_down", "interpolation_up") diff --git a/video/mintime/model_code/utils.py b/video/mintime/model_code/utils.py deleted file mode 100644 index 8f8fbbd2a1d9ad42882e24a0c0b88404f322ba5b..0000000000000000000000000000000000000000 --- a/video/mintime/model_code/utils.py +++ /dev/null @@ -1,186 +0,0 @@ -# Utility functions for training process - -import numpy as np -import torch -from matplotlib import pyplot as plt -from random import random -from scipy.special import softmax -from einops import rearrange -from statistics import mean -import cv2 -import math -from typing import Dict -import json -import urllib -from torchvision.transforms import Compose, Lambda -from torchvision.transforms._transforms_video import ( - CenterCropVideo, - NormalizeVideo, -) -from pytorchvideo.data.encoded_video import EncodedVideo -from pytorchvideo.transforms import ( - ApplyTransformToKey, - ShortSideScale, - UniformTemporalSubsample, - UniformCropVideo -) - -PLOTS_NAMES = ["space", "time", "combined"] - - -# Convert the preds into final video-level prediction -def check_correct(preds, labels, multiclass_labels = None, multiclass_errors = None, videos_ids = None): - preds = [np.asarray(torch.sigmoid(pred).detach().numpy()).round() for pred in preds] - - correct = 0 - positive_class = 0 - negative_class = 0 - videos_errors = [] - for i in range(len(labels)): - pred = int(preds[i]) - if labels[i] == pred: - correct += 1 - if labels[i] != pred: - if multiclass_labels is not None and not math.isnan(multiclass_labels[i]): - multiclass_errors[multiclass_labels[i].item()][0] += 1 - if videos_ids != None: - videos_errors.append(videos_ids[i]) - - if pred == 1: - positive_class += 1 - else: - negative_class += 1 - - if multiclass_errors != None: - return correct, positive_class, negative_class, multiclass_errors, videos_errors - else: - return correct, positive_class, negative_class - - -def unix_time_millis(dt): - return dt.total_seconds() * 1000.0 - - -def multiple_lists_mean(a): - return sum(a) / len(a) - -# Aggregate space and time attention -def aggregate_attentions(attentions, heads, num_frames, frames_per_identity, scale_factor = 50000): - - # Collapse attentions heads for each attention separated - aggregated_attentions = [] - for attention in attentions: - attention = attention.squeeze(1) - attention = rearrange(attention, '(b h) t -> b h t', h = heads) - tokens_means = [torch.max(attention[:, :, i]).item() for i in range(attention.shape[2])] - aggregated_attentions.append(tokens_means) - - # Combined space and time attention - tokens_means_combined = list(np.sum(np.asarray(aggregated_attentions), axis=0)) - aggregated_attentions.append(tokens_means_combined) - - # Softmax all the attentions - for i in range(len(aggregated_attentions)): - aggregated_attentions[i] = np.array_split(np.asarray(aggregated_attentions[i]), num_frames) - aggregated_attentions[i] = softmax([mean(values)*scale_factor for values in aggregated_attentions[i]]) - - identity_attentions = [] - for index, identity_frames in enumerate(frames_per_identity): - if index == 0: - identity_attention = sum(aggregated_attentions[-1][:identity_frames-1]) - else: - previous_identity_frames = frames_per_identity[index-1] - identity_attention = sum(aggregated_attentions[-1][previous_identity_frames-1:identity_frames-1]) - identity_attentions.append(identity_attention) - - return aggregated_attentions, identity_attentions - - -# Visualize the attention -def save_attention_plots(aggregated_attentions, identity_names, frames_per_identity, num_frames, video_id): - colors = np.random.rand(len(frames_per_identity), 4) - for index, tokens_means in enumerate(aggregated_attentions): - plt.bar([i+1 for i in range(num_frames)], tokens_means) - for i in range(len(frames_per_identity)): - plt.vlines(frames_per_identity[i], ymin=min(tokens_means), ymax=max(tokens_means), colors=colors[i], label = str(identity_names[i])) - plt.legend() - plt.savefig("outputs/tokens/" + video_id + "_" + PLOTS_NAMES[index] + ".jpg") - plt.clf() - - -def draw_border(img, pt1, pt2, color, thickness, r, d): - x1,y1 = pt1 - x2,y2 = pt2 - - # Top left - cv2.line(img, (x1 + r, y1), (x1 + r + d, y1), color, thickness) - cv2.line(img, (x1, y1 + r), (x1, y1 + r + d), color, thickness) - cv2.ellipse(img, (x1 + r, y1 + r), (r, r), 180, 0, 90, color, thickness) - - # Top right - cv2.line(img, (x2 - r, y1), (x2 - r - d, y1), color, thickness) - cv2.line(img, (x2, y1 + r), (x2, y1 + r + d), color, thickness) - cv2.ellipse(img, (x2 - r, y1 + r), (r, r), 270, 0, 90, color, thickness) - - # Bottom left - cv2.line(img, (x1 + r, y2), (x1 + r + d, y2), color, thickness) - cv2.line(img, (x1, y2 - r), (x1, y2 - r - d), color, thickness) - cv2.ellipse(img, (x1 + r, y2 - r), (r, r), 90, 0, 90, color, thickness) - - # Bottom right - cv2.line(img, (x2 - r, y2), (x2 - r - d, y2), color, thickness) - cv2.line(img, (x2, y2 - r), (x2, y2 - r - d), color, thickness) - cv2.ellipse(img, (x2 - r, y2 - r), (r, r), 0, 0, 90, color, thickness) - return img - - - -def count_parameters(model): - return sum(p.numel() for p in model.parameters() if p.requires_grad) - - - - -SLOWFAST_ALPHA = 4 - -class PackPathway(torch.nn.Module): - """ - Transform for converting video frames as a list of tensors. - """ - def __init__(self): - super().__init__() - - def forward(self, frames: torch.Tensor): - fast_pathway = frames - # Perform temporal sampling from the fast pathway. - slow_pathway = torch.index_select( - frames, - 1, - torch.linspace( - 0, frames.shape[1] - 1, frames.shape[1] // SLOWFAST_ALPHA - ).long(), - ) - frame_list = [slow_pathway, fast_pathway] - return frame_list - -def slowfast_input_transform(videos, crop_size = 256, side_size = 256, num_frames = 32, sampling_rate = 2, frames_per_second = 30, mean = [0.45, 0.45, 0.45], std = [0.225, 0.225, 0.225]): - transform=Compose( - [ - UniformTemporalSubsample(num_frames), - Lambda(lambda x: x/255.0), - NormalizeVideo(mean, std), - ShortSideScale( - size=side_size - ), - CenterCropVideo(crop_size), - PackPathway() - ] - ) - transformed_videos = [[],[]] - for video in videos: - output = transform(video) - transformed_videos[0].append(output[0]) - transformed_videos[1].append(output[1]) - - - return transformed_videos \ No newline at end of file diff --git a/video/mintime/requirements.txt b/video/mintime/requirements.txt deleted file mode 100644 index 1fbb7aced56711864adef98fae4165608d97564b..0000000000000000000000000000000000000000 --- a/video/mintime/requirements.txt +++ /dev/null @@ -1,14 +0,0 @@ -fastapi -uvicorn -pydantic -python-multipart -torch>=1.8.0 -torchvision>=0.9.0 -facenet-pytorch -opencv-python-headless -numpy<2.0.0 -Pillow -einops -albumentations -networkx -pyyaml diff --git a/video/pwtf-dvd/Dockerfile b/video/pwtf-dvd/Dockerfile deleted file mode 100644 index c1ff8a4d2d404c73a3d00db58389f37fd75fc73f..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/Dockerfile +++ /dev/null @@ -1,57 +0,0 @@ -FROM nvidia/cuda:12.1.1-cudnn8-runtime-ubuntu22.04 - -ENV DEBIAN_FRONTEND=noninteractive -ENV PYTHONUNBUFFERED=1 - -WORKDIR /app - -# Install Python 3.10 and system dependencies for OpenCV -RUN apt-get update && apt-get install -y --no-install-recommends \ - python3 python3-pip \ - libgl1 \ - libglib2.0-0 \ - libsm6 \ - libxext6 \ - libxrender-dev \ - && rm -rf /var/lib/apt/lists/* - -RUN ln -sf /usr/bin/python3 /usr/bin/python - -# Install PyTorch with CUDA 12.1 -RUN pip install --no-cache-dir \ - torch==2.5.1 torchvision==0.20.1 \ - --index-url https://download.pytorch.org/whl/cu121 - -# Copy requirements and install -COPY requirements.txt . -RUN pip install --no-cache-dir -r requirements.txt - -# Create logs and weights directories -RUN mkdir -p logs weights model_code - -# Copy model code (read-only reference, never modified) -COPY model_code/ /app/model_code/ - -# Copy weights -COPY weights/ /app/weights/ - -# Copy application code -COPY app.py . - -# Environment variables -ENV MODEL_PORT=7005 -ENV PRELOAD_MODEL=false -ENV MODEL_TIMEOUT=1800 -ENV WEIGHTS_PATH=/app/weights/pwtf_dvd_checkpoint.pth -ENV MODEL_CODE_DIR=/app/model_code - -# Expose port -EXPOSE 7005 - -# Drop root privileges -RUN adduser --disabled-password --gecos '' appuser && \ - chown -R appuser:appuser /app/logs /app/weights -USER appuser - -# Run the service -CMD ["python", "app.py"] diff --git a/video/pwtf-dvd/app.py b/video/pwtf-dvd/app.py deleted file mode 100644 index b4f79d07d29f474ffd77537914a9858e4e0976d0..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/app.py +++ /dev/null @@ -1,538 +0,0 @@ -"""PwTF-DVD (Pixel-wise Temporal Frequency) deepfake video detection service. - -Wraps the PwTF-DVD (ICCV 2025) face forgery detection model with a -FastAPI endpoint. Uses a dual-stream architecture: an I3D backbone for -spatial features and a ResNet-based attention network for temporal -frequency features, fused via spatial and temporal transformer encoders. - -The preprocessing pipeline performs RetinaFace detection, SORT-based -tracking, face alignment via 68-point landmarks, and temporal FFT -computation on median-filtered residuals. - -Reference: "Pixel-wise Temporal Frequency Domain Video Deepfake -Detection", ICCV 2025. -""" - -import base64 -import gc -import logging -import os -import platform -import sys -import tempfile -import threading -import time -from typing import Any, Dict, List, Optional - -import cv2 -import numpy as np -import torch -import torch.nn.functional as F -import uvicorn -from fastapi import FastAPI, HTTPException -from PIL import Image -from pydantic import BaseModel, ConfigDict, Field -from torchvision.transforms import Compose, Normalize, ToTensor - -logging.basicConfig(level=logging.INFO) -logger = logging.getLogger(__name__) - -MODEL_PORT = int(os.environ.get("MODEL_PORT", 7005)) -PRELOAD_MODEL = os.environ.get("PRELOAD_MODEL", "false").lower() == "true" -MODEL_TIMEOUT = int(os.environ.get("MODEL_TIMEOUT", 1800)) -WEIGHTS_PATH = os.environ.get( - "WEIGHTS_PATH", "/app/weights/pwtf_dvd_checkpoint.pth" -) -MODEL_CODE_DIR = os.environ.get("MODEL_CODE_DIR", "/app/model_code") - -# PwTF-DVD uses 224x224 face crops after alignment -FACE_CROP_SIZE = 224 -# Clip size for temporal analysis (from root_setting.yaml clip_size: 32) -CLIP_SIZE = 32 -# Maximum frames to extract from the video -MAX_FRAMES = 768 - - -def _get_device() -> torch.device: - """Select optimal device: CUDA (NVIDIA) > MPS (Apple) > CPU.""" - override = os.environ.get("DEEPSAFE_DEVICE", "").strip().lower() - if override == "cpu": - return torch.device("cpu") - if override == "cuda" and torch.cuda.is_available(): - return torch.device("cuda") - if ( - override == "mps" - and hasattr(torch.backends, "mps") - and torch.backends.mps.is_available() - ): - return torch.device("mps") - if torch.cuda.is_available(): - return torch.device("cuda") - if ( - platform.system() == "Darwin" - and hasattr(torch.backends, "mps") - and torch.backends.mps.is_available() - ): - return torch.device("mps") - return torch.device("cpu") - - -# ── Global state ──────────────────────────────────────────────────────────── - -_model: Optional[torch.nn.Module] = None -_device: Optional[torch.device] = None -_load_lock = threading.Lock() - -# Lazy-loaded references to model_code modules -_detect_all = None -_grab_all_frames = None -_get_crop_box = None -_multiple_tracking = None -_find_longest = None -_FasterCropAlignXRay = None -_crop_align_func = None - - -def _ensure_model_code_on_path() -> None: - """Add model_code/inference to sys.path so its internal imports work. - - The model code uses bare imports like ``from model.framework import - get_model`` and ``from config_ftcn import config`` which expect the - ``inference/`` directory to be on ``sys.path``. - """ - inference_dir = os.path.join(MODEL_CODE_DIR, "inference") - if inference_dir not in sys.path: - sys.path.insert(0, inference_dir) - - -def _load_models() -> None: - """Load PwTF-DVD model and face detection tools (thread-safe).""" - global _model, _device - global _detect_all, _grab_all_frames, _get_crop_box - global _multiple_tracking, _find_longest - global _FasterCropAlignXRay, _crop_align_func - - if _model is not None: - return - - with _load_lock: - # Double-check after acquiring lock - if _model is not None: - return - - _device = _get_device() - if _device.type == "cuda": - torch.backends.cudnn.benchmark = True - torch.set_float32_matmul_precision("high") - if _device.type == "cuda": - logger.info( - "Device: cuda (%s, %.1f GB VRAM)", - torch.cuda.get_device_name(0), - torch.cuda.get_device_properties(0).total_memory / 1024**3, - ) - else: - logger.warning( - "Device: %s (no CUDA -- check nvidia-container-toolkit)", - _device, - ) - - logger.info("Loading PwTF-DVD model on %s ...", _device) - - # ── Import model_code modules ─────────────────────────────── - _ensure_model_code_on_path() - - from model.framework import get_model - from test_tools.common import detect_all, grab_all_frames - from test_tools.utils import get_crop_box - from test_tools.ct.operations import find_longest, multiple_tracking - from test_tools.faster_crop_align_xray import FasterCropAlignXRay - - _detect_all = detect_all - _grab_all_frames = grab_all_frames - _get_crop_box = get_crop_box - _multiple_tracking = multiple_tracking - _find_longest = find_longest - _FasterCropAlignXRay = FasterCropAlignXRay - - # ── Face crop alignment ───────────────────────────────────── - _crop_align_func = FasterCropAlignXRay(FACE_CROP_SIZE) - - # ── PwTF-DVD classifier ───────────────────────────────────── - if not os.path.exists(WEIGHTS_PATH): - raise FileNotFoundError( - f"PwTF-DVD weights not found at {WEIGHTS_PATH}" - ) - - model = get_model() - state_dict = torch.load( - WEIGHTS_PATH, map_location="cpu", weights_only=False - ) - model.load_state_dict(state_dict) - model = model.to(_device) - model.eval() - - _model = model - logger.info("PwTF-DVD model loaded successfully.") - - -def _is_model_loaded() -> bool: - """Return True if the model is loaded and ready.""" - return _model is not None - - -# ── FastAPI app ───────────────────────────────────────────────────────────── - -app = FastAPI( - title="PwTF-DVD Detection Service", - description=( - "Pixel-wise Temporal Frequency Domain Video Deepfake Detection " - "(ICCV 2025)" - ), - version="1.0.0", -) - - -class PredictRequest(BaseModel): - """Incoming prediction request.""" - - video_data: str # Base64-encoded video bytes - threshold: float = 0.5 - - -class PredictResponse(BaseModel): - """Outgoing prediction result.""" - - model_config = ConfigDict(populate_by_name=True) - - model: str = "pwtf_dvd_detection" - probability: float - prediction: int - class_name: str = Field(..., alias="class") - inference_time: float - metadata: Dict[str, Any] - - -@app.on_event("startup") -async def startup_event(): - """Optionally preload model at startup.""" - if PRELOAD_MODEL: - _load_models() - - -@app.get("/") -def root(): - """Service info endpoint.""" - return { - "service": "pwtf_dvd_detection", - "port": MODEL_PORT, - "model_loaded": _is_model_loaded(), - "device": str(_device) if _device else "unknown", - } - - -def _gpu_health_info() -> dict: - """Return GPU metrics for the health endpoint.""" - if ( - torch.cuda.is_available() - and _device is not None - and _device.type == "cuda" - ): - return { - "gpu_name": torch.cuda.get_device_name(0), - "vram_used_mb": round( - torch.cuda.memory_allocated(0) / 1024**2 - ), - "vram_total_mb": round( - torch.cuda.get_device_properties(0).total_memory / 1024**2 - ), - } - return {} - - -@app.get("/health") -def health(): - """Health check endpoint.""" - return { - "status": "healthy", - "model": "pwtf_dvd_detection", - "device": str(_device) if _device else "cpu", - "model_loaded": _is_model_loaded(), - "weights_exist": os.path.exists(WEIGHTS_PATH), - **_gpu_health_info(), - } - - -# ── Inference pipeline ────────────────────────────────────────────────────── - - -def _run_inference(video_path: str) -> dict: - """Run the full PwTF-DVD inference pipeline on a video file. - - Follows the same logic as ``model_code/inference/test_on_raw_video.py``: - 1. Detect faces in all frames (RetinaFace). - 2. Track faces across frames (SORT-based tracker). - 3. Generate sliding-window clips of ``CLIP_SIZE`` frames. - 4. For each clip: align faces, compute temporal FFT residuals, - run dual-stream model. - 5. Aggregate per-clip predictions. - - Args: - video_path: Path to the video file on disk. - - Returns: - Dict with ``probability``, ``num_frames``, ``num_tracks``, - ``num_clips``, ``frames_with_faces``. - """ - # ── Step 1: Detect faces in all frames ────────────────────────── - detect_res, all_lm68, frames = _detect_all( - video_path, return_frames=True, max_size=MAX_FRAMES - ) - - if not frames: - return { - "probability": 0.5, - "num_frames": 0, - "num_tracks": 0, - "num_clips": 0, - "frames_with_faces": 0, - } - - shape = frames[0].shape[:2] - - # Merge 68-landmark data into detection results - all_detect_res = [] - for faces, faces_lm68 in zip(detect_res, all_lm68): - new_faces = [] - for (box, lm5, score), face_lm68 in zip(faces, faces_lm68): - new_faces.append((box, lm5, face_lm68, score)) - all_detect_res.append(new_faces) - detect_res = all_detect_res - - # ── Step 2: Track faces ───────────────────────────────────────── - tracks = _multiple_tracking(detect_res) - tuples = [(0, len(detect_res))] * len(tracks) - - if len(tracks) == 0: - tuples, tracks = _find_longest(detect_res) - - if len(tracks) == 0: - return { - "probability": 0.5, - "num_frames": len(frames), - "num_tracks": 0, - "num_clips": 0, - "frames_with_faces": 0, - } - - # ── Step 3: Extract face crops and landmarks ──────────────────── - data_storage = {} - frame_boxes = {} - super_clips = [] - - for track_i, ((start, end), track) in enumerate( - zip(tuples, tracks) - ): - super_clips.append(len(track)) - - for face, frame_idx, j in zip( - track, range(start, end), range(len(track)) - ): - box, lm5, lm68 = face[:3] - big_box = _get_crop_box(shape, box, scale=0.5) - - top_left = big_box[:2][None, :] - new_lm5 = lm5 - top_left - new_lm68 = lm68 - top_left - new_box = (box.reshape(2, 2) - top_left).reshape(-1) - - info = (new_box, new_lm5, new_lm68, big_box) - - x1, y1, x2, y2 = big_box - cropped = frames[frame_idx][y1:y2, x1:x2] - - base_key = f"{track_i}_{j}_" - data_storage[base_key + "img"] = cropped - data_storage[base_key + "ldm"] = info - data_storage[base_key + "idx"] = frame_idx - - frame_boxes[frame_idx] = np.rint(box).astype(np.int32) - - # ── Step 4: Generate sliding-window clips ─────────────────────── - clips_for_video = [] - pad_length = CLIP_SIZE - 1 - - for super_clip_idx, super_clip_size in enumerate(super_clips): - inner_index = list(range(super_clip_size)) - - if super_clip_size < CLIP_SIZE: - post_module = inner_index[1:-1][::-1] + inner_index - l_post = len(post_module) - if l_post == 0: - continue - post_module = post_module * (pad_length // l_post + 1) - post_module = post_module[:pad_length] - if len(post_module) != pad_length: - continue - - pre_module = inner_index + inner_index[1:-1][::-1] - l_pre = len(pre_module) - if l_pre == 0: - continue - pre_module = pre_module * (pad_length // l_pre + 1) - pre_module = pre_module[-pad_length:] - if len(pre_module) != pad_length: - continue - - inner_index = pre_module + inner_index + post_module - - padded_size = len(inner_index) - frame_range = [ - inner_index[i: i + CLIP_SIZE] - for i in range(padded_size) - if i + CLIP_SIZE <= padded_size - ] - - for indices in frame_range: - clip = [(super_clip_idx, t) for t in indices] - clips_for_video.append(clip) - - if not clips_for_video: - return { - "probability": 0.5, - "num_frames": len(frames), - "num_tracks": len(tracks), - "num_clips": 0, - "frames_with_faces": len(frame_boxes), - } - - # ── Step 5: Run inference on clips ────────────────────────────── - preds = [] - test_transform = Compose([ - ToTensor(), - Normalize( - mean=[0.485, 0.456, 0.406], - std=[0.229, 0.224, 0.225], - ), - ]) - - for clip in clips_for_video: - images = [data_storage[f"{i}_{j}_img"] for i, j in clip] - landmarks = [data_storage[f"{i}_{j}_ldm"] for i, j in clip] - - # Align and crop faces - landmarks, images = _crop_align_func(landmarks, images) - - # Build image tensor and temporal frequency features - images_tensor = [] - ft_images = [] - for image in images: - image = np.array(image) - img_pil = Image.fromarray(image) - img_tensor = test_transform(img_pil) - images_tensor.append(img_tensor) - - # Median filter residual -> grayscale for FFT - img_filtered = cv2.medianBlur(image.copy(), 5) - residual = cv2.cvtColor( - (image - img_filtered), cv2.COLOR_RGB2GRAY - ) - ft_images.append(residual) - - # Temporal FFT: take first half of frequencies - ft_array = np.array(ft_images) - ft_array = np.absolute( - np.fft.fft(ft_array, axis=0)[:CLIP_SIZE // 2] - * (1.0 / CLIP_SIZE) - ) - ft_tensor = torch.from_numpy(ft_array).to(_device).unsqueeze(0) - - # Stack image frames: (1, C, T, H, W) - img_stack = torch.stack(images_tensor, dim=1).unsqueeze(0) - img_stack = img_stack.to(_device) - - with torch.no_grad(): - output = _model(img_stack, ft_tensor) - output = torch.sigmoid(output).squeeze(0) - - pred = float(output.item()) - preds.append(pred) - - # ── Step 6: Aggregate ─────────────────────────────────────────── - probability = float(np.mean(preds)) - - return { - "probability": probability, - "num_frames": len(frames), - "num_tracks": len(tracks), - "num_clips": len(clips_for_video), - "frames_with_faces": len(frame_boxes), - } - - -# ── Prediction endpoint ───────────────────────────────────────────────────── - - -@app.post("/predict", response_model=PredictResponse) -async def predict(request: PredictRequest): - """Run PwTF-DVD deepfake detection on a base64-encoded video. - - Pipeline: - 1. Decode video and write to temp file. - 2. Run full PwTF-DVD pipeline (face detection, tracking, - temporal FFT, dual-stream classification). - 3. Aggregate per-clip predictions into a single probability. - - If no faces are detected the service returns probability=0.5 - (undetermined) rather than raising an error. - """ - if not _is_model_loaded(): - _load_models() - - start_time = time.time() - - # ── Decode video ──────────────────────────────────────────────── - with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as tmp: - try: - video_bytes = base64.b64decode(request.video_data) - tmp.write(video_bytes) - tmp_path = tmp.name - except Exception as exc: - raise HTTPException( - status_code=400, - detail=f"Failed to decode video: {exc}", - ) - - try: - # ── Run inference pipeline ────────────────────────────────── - result = _run_inference(tmp_path) - probability = result["probability"] - prediction = 1 if probability >= request.threshold else 0 - class_name = "fake" if prediction == 1 else "real" - - return PredictResponse( - probability=probability, - prediction=prediction, - class_name=class_name, - inference_time=time.time() - start_time, - metadata={ - "frames_sampled": result["num_frames"], - "frames_with_faces": result["frames_with_faces"], - "num_tracks": result["num_tracks"], - "num_clips": result["num_clips"], - "device": str(_device), - }, - ) - - except HTTPException: - raise - except Exception as exc: - logger.exception("Error during PwTF-DVD prediction") - raise HTTPException(status_code=500, detail=str(exc)) - finally: - if os.path.exists(tmp_path): - os.remove(tmp_path) - gc.collect() - - -if __name__ == "__main__": - uvicorn.run(app, host="0.0.0.0", port=MODEL_PORT) diff --git a/video/pwtf-dvd/model_code/LICENSE b/video/pwtf-dvd/model_code/LICENSE deleted file mode 100644 index d6e183fe62fc2fd2e59b33c5ca8011f2d7b3d460..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2025 TAEHOON KIM - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/video/pwtf-dvd/model_code/README.md b/video/pwtf-dvd/model_code/README.md deleted file mode 100644 index a31015e0dbe83425515c8a47825075f33c868bd2..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/README.md +++ /dev/null @@ -1,56 +0,0 @@ -# [ICCV 2025] Beyond Spatial Frequency: Pixel-wise Temporal Frequency-based Deepfake Video Detection -This repository contains the official implementation of our ICCV 2025 paper, -"Beyond Spatial Frequency: Pixel-wise Temporal Frequency-based Deepfake Video Detection." - [arxiv](https://arxiv.org/abs/2507.02398) [page](https://rama0126.github.io/PwTF-DVD/) - - - - - -# Abstract -![그림1](https://github.com/user-attachments/assets/47093264-f235-4197-ac85-76f9c14653e3) - -We introduce a deepfake video detection approach that exploits pixel-wise temporal inconsistencies, which traditional spatial frequency-based detectors often overlook. Traditional detectors represent temporal information merely by stacking spatial frequency spectra across frames, resulting in the failure to detect temporal artifacts in the pixel plane. Our approach performs a 1D Fourier transform on the time axis for each pixel, extracting features highly sensitive to temporal inconsistencies, especially in areas prone to unnatural movements. To precisely locate regions containing the temporal artifacts, we introduce an attention proposal module trained in an end-to-end manner. Additionally, our joint transformer module effectively integrates pixel-wise temporal frequency features with spatio-temporal context features, expanding the range of detectable forgery artifacts. Our framework represents a significant advancement in deepfake video detection, providing robust performance across diverse and challenging detection scenarios. - -## Environment Setting -### System Setting -``` -apt-get update - -apt-get -y install libgl1-mesa-glx && -apt-get -y install libglib2.0-0 - -apt-get install -y libsm6 && -apt-get -y install libxext6 && -apt-get -y install libxrender-dev - -apt-get install -y libx11-6 -``` -### Python Dependencies -``` -pip install opencv-python sympy timm simplejson fvcore -pip install torchmetrics pytorch-losses -``` - -## Updates - -- inference: `./inference/test_on_raw_video.py --video [video_path] --out_dir [output_path] --model_path [model_path]` -- model weights: [Google Drive](https://drive.google.com/file/d/10D74h8NhpZ2Ut3Te_ieTIAZYOTL6mNQd/view?usp=drive_link) - -## Key References for Video Deepfake Detection -The following works have significantly influenced our understanding and design choices for video deepfake detection. - -[FTCN: Exploring Temporal Coherence for More General Video Face Forgery Detection (ICCV 2021)](https://arxiv.org/abs/2108.06693) -- GitHub:[https://github.com/yinglinzheng/FTCN](https://github.com/yinglinzheng/FTCN) -- Paper: [arXiv:2108.06693](https://arxiv.org/abs/2108.06693) - - -[AltFreezing: Alternating Freezing for More General Video Face Forgery Detection (CVPR 2023)](https://openaccess.thecvf.com/content/CVPR2023/papers/Wang_AltFreezing_for_More_General_Video_Face_Forgery_Detection_CVPR_2023_paper.pdf) -- GitHub: [https://github.com/ZhendongWang6/AltFreezing](https://github.com/ZhendongWang6/AltFreezing) -- Paper: [CVPR 2023 Paper](https://openaccess.thecvf.com/content/CVPR2023/papers/Wang_AltFreezing_for_More_General_Video_Face_Forgery_Detection_CVPR_2023_paper.pdf) - - -[StyleFlow: Exploiting Style Latent Flows for Generalizing Deepfake Video Detection (CVPR 2024)](https://arxiv.org/abs/2403.06592) -- GitHub: [https://github.com/jongwook-Choi/StyleFlow](https://github.com/jongwook-Choi/StyleFlow) -- Paper: [arXiv:2403.06592](https://arxiv.org/abs/2403.06592) - diff --git a/video/pwtf-dvd/model_code/figures/CAU.png b/video/pwtf-dvd/model_code/figures/CAU.png deleted file mode 100644 index 3da2ed29b4b7c0473ad3caf1bf91343495ae0c71..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/figures/CAU.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9695210b97e07e2c250e0ce5f5ac79d339e5067a746428b2788539fbc0caa5e0 -size 21321 diff --git a/video/pwtf-dvd/model_code/figures/ICCV_2025.png b/video/pwtf-dvd/model_code/figures/ICCV_2025.png deleted file mode 100644 index 7788d86011a5ab8c0ec174d702d601b5b807a01c..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/figures/ICCV_2025.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:65d0b5c81af682f7dc4214ebb655ce714cd717628d2a5def3f20400d84f08864 -size 62361 diff --git a/video/pwtf-dvd/model_code/figures/NAVERCLOUD.png b/video/pwtf-dvd/model_code/figures/NAVERCLOUD.png deleted file mode 100644 index cbd293b7b123a3633114dd96fc2d1b8a1288c291..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/figures/NAVERCLOUD.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ddd1a535a92d06676d5cda272c11d9261318121b0dd820841246469bbd298616 -size 8474 diff --git a/video/pwtf-dvd/model_code/figures/UNIST.png b/video/pwtf-dvd/model_code/figures/UNIST.png deleted file mode 100644 index 8b31e41ae53771c7b5b1f8b5ff7e0acf9f76adc6..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/figures/UNIST.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:51f5b5282f2598a9e78dab1c6b5fbf74d4b2df0d953cb09c2882e2fdcd940169 -size 2099 diff --git a/video/pwtf-dvd/model_code/figures/baby.mp4 b/video/pwtf-dvd/model_code/figures/baby.mp4 deleted file mode 100644 index e02621721644ce74430906edde450beb5386171e..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/figures/baby.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c09b71b9f358d2d36a7cc63da7b4f9b43ba8881938fd2c118762a267a9b42c10 -size 2051387 diff --git a/video/pwtf-dvd/model_code/figures/figure1.png b/video/pwtf-dvd/model_code/figures/figure1.png deleted file mode 100644 index 8e1c0ec3a7066b13a3707ed0476457f684cf1bc2..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/figures/figure1.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b0db6f355aedb365eb3061d60442b9457e9e8298d6b1a3ee392fc5df78f2fde4 -size 136515 diff --git a/video/pwtf-dvd/model_code/figures/figure2.png b/video/pwtf-dvd/model_code/figures/figure2.png deleted file mode 100644 index 9935cbbe27b9249098010bcfd663bb4765d28b4a..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/figures/figure2.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:699ace36bff80de316ee46fa7b0d97ec7432d2f05ac16e8cbbc5363814dbea62 -size 476915 diff --git a/video/pwtf-dvd/model_code/figures/figure3.png b/video/pwtf-dvd/model_code/figures/figure3.png deleted file mode 100644 index dda0110773289bd604ff2f15bdfa496fdaf3032c..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/figures/figure3.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7d632709aa54706d7f0ae8153cda93a1ef9aa1c342125e4a379d12b6245cfdbc -size 196520 diff --git a/video/pwtf-dvd/model_code/figures/figure5.png b/video/pwtf-dvd/model_code/figures/figure5.png deleted file mode 100644 index 983b4a9a3355da2c04eb1819490247980b72b20c..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/figures/figure5.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:22d7989a5eb3a994ac1d68ec47e46545a4e8244cea8476d4116f886a9f6c401b -size 477401 diff --git a/video/pwtf-dvd/model_code/figures/figureE.png b/video/pwtf-dvd/model_code/figures/figureE.png deleted file mode 100644 index e3cda06037ca957759764b0ccf240888ce8843f9..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/figures/figureE.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:847317ff38a9d397beaee8d01b6c23777e9ac09ebfad785ab395fc8330b3e213 -size 118760 diff --git a/video/pwtf-dvd/model_code/figures/me.mp4 b/video/pwtf-dvd/model_code/figures/me.mp4 deleted file mode 100644 index 7f45d698c2031e13b8df10e91f194e3fefa99262..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/figures/me.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:77186f94d7d9270f07b40d4df623c112f89196c0cdc8182781d5a50482598cff -size 3058109 diff --git a/video/pwtf-dvd/model_code/figures/shining.mp4 b/video/pwtf-dvd/model_code/figures/shining.mp4 deleted file mode 100644 index 983354089d7ad13504fac3d92dfcc2427d006674..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/figures/shining.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6ae38845883f99a7c3faf7ec313a0759497b2259b3196fa3d999bf3a466f9e5b -size 12067105 diff --git a/video/pwtf-dvd/model_code/figures/tiktok.mp4 b/video/pwtf-dvd/model_code/figures/tiktok.mp4 deleted file mode 100644 index fc9fd44b230384cef4a03ae51183f80a81d7a885..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/figures/tiktok.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5824b9e99f2755288d104e39b768166b52d89169aa9159ff1d29a2bfe61627df -size 15746781 diff --git a/video/pwtf-dvd/model_code/index.html b/video/pwtf-dvd/model_code/index.html deleted file mode 100644 index 09c55b7ca9d722fbac96e8a8c3f4708bfbb6d9ff..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/index.html +++ /dev/null @@ -1,515 +0,0 @@ - - - - - - Beyond Spatial Frequency: Pixel-wise Temporal Frequency-based Deepfake Video Detection — ICCV 2025 - - - - - - - - - - - -
-
-

Beyond Spatial Frequency: Pixel‑wise Temporal Frequency‑based Deepfake Video Detection

-
Taehoon Kim, Jongwook Choi, Yonghyun Jeong, Haeun Noh, Jaejun Yoo, Seungryul Baek, Jongwon Choi*
-
Chung‑Ang Univ · NAVER Cloud · UNIST
-
-
- Chung-Ang University - NAVER Cloud - UNIST -
- - -
- ⭐ We got Highlight! -
- -
- - -
-

Interactive Demos

- -
- -
- -
-
-
-
- -
-
-
- - Source: AltFreezing GitHub -
-
-
- - -
-
-
-
- - -
-
-
- - Source: Reddit — GenAI4all -
-
-
- - -
-
- -
-
- - -
-
-
- Source: TikTok -
-
-
- -
- -
- -
- - -
-

Abstract

-

- We introduce a novel method for deepfake video detection that utilizes pixel‑wise temporal frequency spectra. Unlike previous approaches that stack 2D frame‑wise spatial frequency spectra, we extract pixel‑wise temporal frequency by performing a 1D Fourier transform on the time axis per pixel, effectively identifying temporal artifacts. We also propose an Attention Proposal Module (APM) to extract regions of interest for detecting these artifacts. Our method demonstrates outstanding generalizability and robustness in various challenging deepfake video detection scenarios. -

-
- - -
-

Method & Architecture

-
-
-
- Temporal artifacts and pixel‑wise frequency extraction -
- Frequency Extraction: 1D FFT per‑pixel along time captures subtle temporal artifacts. -
-
-
-
-
- Frequency Feature Extractor + Joint Transformer Module -
- Architecture: Frequency Feature Extractor + APM → Joint Transformer for robust detection. -
-
-
-
-
    -
  • Pixel‑wise Temporal Frequency: 1D FFT on the time axis per pixel to capture subtle artifacts.
  • -
  • Attention Proposal Module (APM): Weakly‑supervised focus on temporal‑artifact regions.
  • -
  • Joint Transformer: Fuses global/part‑based frequency signals and spatio‑temporal context.
  • -
-
- - -
-

Experiments & Results

-
-
-
- APM visualization focusing on eyes/mouth regions -
- APM highlights regions (eyes, mouth) where temporal incoherence is likely. -
-
-
-
-
- Video‑level AUC comparison across datasets -
- Consistent SOTA video‑level AUC across datasets demonstrates strong generalization. -
-
-
-
-
    -
  • SOTA performance on FF++, CDF, DFDC, KoDF, etc.
  • -
  • Strong cross‑deepfakes and cross‑synthesis generalization.
  • -
  • APM effectively identifies temporally inconsistent regions.
  • -
-
- - -
-

Limitations & Future Work

-
-
-
Known Limitation
-
    -
  • Heavy compression (H.264/JPEG/WebP) merges neighboring pixels, weakening pixel‑level motion → temporal‑frequency shift.
  • -
  • Low‑frequency components align with raw signals, but high‑frequency components diverge after compression.
  • -
-
Future Work
-

We will investigate temporal‑frequency regularization to mitigate compression‑induced degradation.

-
-
-
- Average pixel‑wise temporal frequency under compression -
- Average temporal‑frequency under H.264/JPEG/WebP compression. -
-
-
-
-
- - -
-

📚 Citation

-
-
-
@InProceedings{Kim_2025_ICCV,
-    author    = {Kim, Taehoon and Choi, Jongwook and Jeong, Yonghyun and Noh, Haeun and Yoo, Jaejun and Baek, Seungryul and Choi, Jongwon},
-    title     = {Beyond Spatial Frequency: Pixel-wise Temporal Frequency-based Deepfake Video Detection},
-    booktitle = {Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV)},
-    month     = {October},
-    year      = {2025},
-    pages     = {11198-11207}
-}
-
-
- - ⬇️ Jump to Demos - - -
-
- - -
-

🙏 Acknowledgement

-
-

This work was partly supported by the IITP grant funded by the Korea government (MSIT): No. RS-2025-02263841: Development of a Real-time Multimodal Framework for Comprehensive Deepfake Detection Incorporating Common Sense Error AnalysisRS-2021-II211341: Artificial Intelligence Graduate School Program (Chung-Ang University) No. RS-2020-II201336: AIGS program (UNIST)

-
-
- -
© 2025 PwTF‑DVD. Design rev • Made with ❤ for ICCV 2025.
- - - - - - diff --git a/video/pwtf-dvd/model_code/inference/config_ftcn.py b/video/pwtf-dvd/model_code/inference/config_ftcn.py deleted file mode 100644 index 0469cec71147fafe83d496e20b08acf3cdf94853..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/config_ftcn.py +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/python -# Borrow from tensorpack,credits goes to yuxin wu - -# the loaded sequnce is -# default config in this file -# -> provided setting file (you can not add new config after this) -# -> manully overrided config -# -> computed config in finalize config (you can change config after this) - -import os -import pprint -import yaml - -__all__ = ["config", "finalize_configs"] - - -class AttrDict: - _freezed = False - """ Avoid accidental creation of new hierarchies. """ - - def __getattr__(self, name): - if self._freezed: - raise AttributeError(name) - ret = AttrDict() - setattr(self, name, ret) - return ret - - def __setattr__(self, name, value): - if self._freezed and name not in self.__dict__: - raise AttributeError("Cannot create new attribute!") - super().__setattr__(name, value) - - def __str__(self): - return pprint.pformat(self.to_dict(), indent=1) - - __repr__ = __str__ - - def to_dict(self): - """Convert to a nested dict. """ - return { - k: v.to_dict() if isinstance(v, AttrDict) else v - for k, v in self.__dict__.items() - if not k.startswith("_") - } - - def update_args(self, args): - """Update from command line args. """ - for cfg in args: - keys, v = cfg.split("=", maxsplit=1) - keylist = keys.split(".") - dic = self - # print(keylist) - if len(keylist) == 1: - assert keylist[0] in dir(dic), "Unknown config key: {}".format( - keylist[0] - ) - for i, k in enumerate(keylist[:-1]): - assert k in dir(dic), "Unknown config key: {}".format(k) - dic = getattr(dic, k) - key = keylist[-1] - assert key in dir(dic), "Unknown config key: {}".format(key) - oldv = getattr(dic, key) - if not isinstance(oldv, str): - v = eval(v) - setattr(dic, key, v) - - def update_with_yaml(self, rel_path): - base_path = os.path.dirname(os.path.abspath(__file__)) - setting_path = os.path.normpath(os.path.join(base_path, "setting", rel_path)) - setting_name = os.path.basename(setting_path).split(".")[0] - - with open(setting_path, "r") as f: - overrided_setting = yaml.load(f,Loader=yaml.FullLoader) - # if 'setting_name' not in overrided_setting: - # raise RuntimeError('you must provide a setting name for non root_setting: {}'.format(rel_path)) - self.update_with_dict(overrided_setting) - setattr(self, "setting_name", setting_name) - - def init_with_yaml(self): - base_path = os.path.dirname(os.path.abspath(__file__)) - setting_path = os.path.normpath(os.path.join(base_path, "root_setting.yaml")) - with open(setting_path, "r") as f: - overrided_setting = yaml.load(f,Loader=yaml.FullLoader) - self.update_with_dict(overrided_setting) - - def update_with_text(self,text): - overrided_setting = yaml.load(text, Loader=yaml.FullLoader) - self.update_with_dict(overrided_setting) - - def update_with_dict(self, dicts): - for k, v in dicts.items(): - if isinstance(v, dict): - getattr(self, k).update_with_dict(v) - else: - setattr(self, k, v) - - def freeze(self): - self._freezed = True - for v in self.__dict__.values(): - if isinstance(v, AttrDict): - v.freeze() - - # avoid silent bugs - def __eq__(self, _): - raise NotImplementedError() - - def __ne__(self, _): - raise NotImplementedError() - - -config = AttrDict() -_C = config # short alias to avoid coding - - -# you can directly write setting here as _C.model_dir='.\checkpoint' or in root_setting.yaml - - -# - - -def finalize_configs(input_cfg=_C, freeze=True, verbose=True): - - # _C.base_path = os.path.dirname(os.path.abspath(__file__)) - input_cfg.base_path = os.path.dirname(__file__) - - # for running in remote server - # for k, v in input_cfg.path.__dict__.items(): - # v = os.path.normpath(os.path.join(input_cfg.base_path, v)) - # setattr(input_cfg.path, k, v) - if freeze: - input_cfg.freeze() - # if verbose: - # logger.info("Config: ------------------------------------------\n" + str(_C)) - - -if __name__ == "__main__": - print("?") - print(os.path.dirname(__file__)) diff --git a/video/pwtf-dvd/model_code/inference/model/attention_network.py b/video/pwtf-dvd/model_code/inference/model/attention_network.py deleted file mode 100644 index 13280c3acbbc7f134274d914d94315d3e12d88d4..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/model/attention_network.py +++ /dev/null @@ -1,193 +0,0 @@ -import torch.nn as nn -import math -import torch -import torch.utils.model_zoo as model_zoo -import torch.nn.functional as F -from torch.autograd import Variable -from model.resnet_backbone import resnet50, oneByoneConvNet -import numpy as np - - -class CONV(nn.Module): - def __init__(self, partials_num=5, ori_dim=64): - super(CONV, self).__init__() - self.partials_num = partials_num - self.ori_dim = ori_dim - self.conv0 = nn.Conv2d(ori_dim, ori_dim, kernel_size=1) - # Create conv layers dynamically - self.convs = nn.ModuleList() - for i in range(partials_num): - self.convs.append(nn.Conv2d(ori_dim, ori_dim, kernel_size=1)) - - def forward(self, x_p, x): - batch_size = x.size(0) - h, w = x.size(2), x.size(3) - - x_sum = self.conv0(x) - - if self.partials_num > 0 and x_p is not None: - x_p = F.interpolate(x_p, size=(h, w), mode='bilinear', align_corners=True) - x_p = x_p.view(batch_size, self.partials_num, self.ori_dim, h, w) - x_p_p = x_p.permute(1, 0, 2, 3, 4) - - for i in range(min(self.partials_num, len(self.convs))): - x_sum += self.convs[i](x_p_p[i]) - - return x_sum -class AttentionCropFunction(torch.autograd.Function): - @staticmethod - def forward(self, images, locs): - h = lambda x: 1. / (1. + torch.exp(-10. * x)) - in_size = images.size()[2] - unit = torch.stack([torch.arange(0, in_size)] * in_size).float() - x = torch.stack([unit.t()] * 16) - y = torch.stack([unit] * 16) - if isinstance(images, torch.cuda.FloatTensor): - x, y = x.cuda(), y.cuda() - in_size = images.size()[2] - ret = [] - for i in range(images.size(0)): - tx, ty, tl = locs[i][0]*224, locs[i][1]*224, 44 - tx = tx if tx > tl else tl - tx = tx if tx < in_size-tl else in_size-tl - ty = ty if ty > tl else tl - ty = ty if ty < in_size-tl else in_size-tl - - w_off = int(tx-tl) if (tx-tl) > 0 else 0 - h_off = int(ty-tl) if (ty-tl) > 0 else 0 - w_end = int(tx+tl) if (tx+tl) < in_size else in_size - h_end = int(ty+tl) if (ty+tl) < in_size else in_size - - mk = (h(x-w_off) - h(x-w_end)) * (h(y-h_off) - h(y-h_end)) - xatt = images[i] * mk - xatt_cropped = xatt[:, w_off:w_end, h_off:h_end] - before_upsample = Variable(xatt_cropped.unsqueeze(0)) - xamp = F.interpolate(before_upsample, size=(88,88), mode='bilinear', align_corners = True) - ret.append(xamp.data.squeeze()) - ret_tensor = torch.stack(ret) - self.save_for_backward(images, ret_tensor) - return ret_tensor - - @staticmethod - def backward(self, grad_output): - pass -class AttentionCropLayer(nn.Module): - """ - Crop function sholud be implemented with the nn.Function. - Detailed description is in 'Attention localization and amplification' part. - Forward function will not changed. backward function will not opearate with autograd, but munually implemented function - """ - def forward(self, images, locs): - return AttentionCropFunction.apply(images, locs) -class APN(nn.Module): - def __init__(self,depth=18, partials_num = 5): - super(APN, self).__init__() - self.localization = LocalizationCNN(depth) - self.partials_num = partials_num - self.region_proposal = nn.Sequential( - nn.Linear(2048 * 7 * 7, 1024), - nn.Tanh(), - nn.Linear(1024, 2*partials_num), - nn.Sigmoid(), - ) - def forward(self, x, x_ft): - x_batch_size = x.size(0) - x_l = self.localization(x,x_ft) - x_l = x_l.view(-1, 2048*7*7) - xs = self.region_proposal(x_l) - xs_t = xs.view(x_batch_size * self.partials_num, 2) - return xs_t - -class LocalizationCNN(nn.Module): - def __init__(self,depth = 18): - super(LocalizationCNN, self).__init__() - self.depth = depth - self.conv1 = nn.Sequential( nn.Conv2d(16, 64, kernel_size=7, stride=2, padding=3, bias=False), - nn.BatchNorm2d(64), - nn.ReLU(inplace=True), - nn.MaxPool2d(kernel_size=3, stride=2, padding=1), - ) - self.conv2 = nn.Sequential( nn.Conv2d(64, 256, kernel_size=3, stride=1, padding=1, bias=False), - nn.BatchNorm2d(256), - nn.ReLU(inplace=True) - ) - self.conv3 = nn.Sequential( nn.Conv2d(256, 512, kernel_size=3, stride=1, padding=1, bias=False), - nn.BatchNorm2d(512), - nn.ReLU(inplace=True), - nn.MaxPool2d(kernel_size=3, stride=2, padding=1)) - self.conv4 = nn.Sequential( nn.Conv2d(512, 1024, kernel_size=3, stride=1, padding=1, bias=False), - nn.BatchNorm2d(1024), - nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=3, stride=2, padding=1)) - self.conv5 = nn.Sequential( nn.Conv2d(1024, 2048, kernel_size=3, stride=1, padding=1, bias=False), - nn.BatchNorm2d(2048), - nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=3, stride=2, padding=1)) - def forward(self, x,x_ft): - x = self.conv1(x) + x_ft[0].detach().float() - x = self.conv2(x) + x_ft[1].detach().float() - x = self.conv3(x) + x_ft[2].detach().float() - x = self.conv4(x) + x_ft[3].detach().float() - x = self.conv5(x) + x_ft[4].detach().float() - return x -h = lambda x: 1. / (1. + torch.exp(-100. * x)) -class APNResNet(nn.Module): - def __init__(self, partials_num = 5, depth= 18): - super(APNResNet, self).__init__() - self.partials_num = partials_num - - self.whole_resnet = resnet50(pretrained=True) - self.oconv0 = oneByoneConvNet(64,32,64) - self.oconv1 = oneByoneConvNet(256,128,256) - self.oconv2 = oneByoneConvNet(512,256,512) - self.oconv3 = oneByoneConvNet(1024,512,1024) - self.oconv4 = oneByoneConvNet(2048,1024,2048) - - self.attn_1 = CONV(partials_num=partials_num, ori_dim=64) - self.attn_2 = CONV(partials_num=partials_num, ori_dim=256) - self.attn_3 = CONV(partials_num=partials_num, ori_dim=512) - self.attn_4 = CONV(partials_num=partials_num, ori_dim=1024) - self.fn = nn.Linear(2048, 1024) - self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) - - self.APN = APN(depth, partials_num) - self.crop_resize = AttentionCropLayer() - - def forward(self, x): - batch_size = x.size(0) - out1_w, out2_w, out3_w, out4_w, out5_w, out5_p_w = self.whole_resnet(x) - - out5_p_w = out5_p_w.view(batch_size, -1) - - - xs_t= self.APN(x.clone(), (out1_w, out2_w, out3_w,out4_w,out5_w)) - images = x - images = images.repeat_interleave(self.partials_num, dim=0) - scaled_x = self.crop_resize(images, xs_t) - scaled_x_b = scaled_x.view(-1, 16, 88, 88) - out1_p_b, out2_p_b, out3_p_b, out4_p_b, out5_p_b, out5_p_p_b = self.whole_resnet(scaled_x_b) - whole_box_num = 5 - out1 = self.attention(out1_w, out1_p_b, 1, whole_box_num) - out2 = self.attention(out2_w, out2_p_b, 2, whole_box_num) - out3 = self.attention(out3_w, out3_p_b, 3, whole_box_num) - out4 = self.attention(out4_w, out4_p_b, 4, whole_box_num) - out5 = self.avgpool(self.oconv4(out5_p_b)).view(batch_size, self.partials_num, -1) - - out1 = self.oconv0(out1) - out2 = self.oconv1(out2) - out3 = self.oconv2(out3) - out4 = self.oconv3(out4) - out6 = self.fn(out5_p_w) - - - - return out1, out2, out3, out4, out5, out6, (xs_t, scaled_x) - - def attention(self, x, x_p, stage, box_num): - if stage == 1: - out = self.attn_1(x_p, x) - if stage == 2: - out = self.attn_2(x_p, x) - if stage == 3: - out = self.attn_3(x_p, x) - if stage == 4: - out = self.attn_4(x_p, x) - return out diff --git a/video/pwtf-dvd/model_code/inference/model/framework.py b/video/pwtf-dvd/model_code/inference/model/framework.py deleted file mode 100644 index 9839957b2d74c38a43074539388861f453c4ab36..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/model/framework.py +++ /dev/null @@ -1,38 +0,0 @@ - -import torch -import torch.nn as nn -from .video_encoder import I3D8x8 -from .attention_network import APNResNet -from .transformers import TransformerHead, SpatialTransformerE - - -# Model for deployment -# Note: modified model structure for easier deployment combined with video encoder FTCN official repo code -def get_model(): - part_num = 5 - model= I3D8x8() - model_ft = APNResNet(partials_num=part_num,depth =50) - params = dict(spatial_size=14, time_size=16, in_channels=1024,num_parts=part_num) - TTE = TransformerHead(**params) - STE = SpatialTransformerE(**params) - MLP = torch.nn.Linear(2048,1) - return Framework(model, model_ft, TTE, STE, MLP) - - -class Framework(nn.Module): - def __init__(self, model, model_ft, TTE, STE, MLP): - super(Framework, self).__init__() - self.model = model - self.model_ft = model_ft - self.TTE = TTE - self.STE = STE - self.MLP = MLP - - def forward(self, video_sample, ft_sample): - out1, out2, out3, out4, out5,out6, (xs, scaled_x) = self.model_ft(ft_sample.float()) - ft_feats = [out1, out2, out3, out4, None] - x,_ = self.model(video_sample,ft_feats) - ft_s , _= self.STE(x,out5,xs) - ft_t, _ = self.TTE(x,out6) - outputs = self.MLP(torch.concat((ft_t, ft_s), dim = 1)) - return outputs diff --git a/video/pwtf-dvd/model_code/inference/model/resnet_backbone.py b/video/pwtf-dvd/model_code/inference/model/resnet_backbone.py deleted file mode 100644 index 5cf21e4bf7d02d292fcdd60a0929a5bd0f5772d8..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/model/resnet_backbone.py +++ /dev/null @@ -1,235 +0,0 @@ -import torch.nn as nn -import math -import torch -import torch.utils.model_zoo as model_zoo -import torch.nn.functional as F -__all__ = ['ResNet', 'resnet18', 'resnet50', ] - - -normalization = nn.BatchNorm2d - -model_urls = { - 'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth', - 'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth', - 'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth', - 'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth', - 'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth', -} -def conv3x3(in_planes, out_planes, stride=1): - """3x3 convolution with padding""" - return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, - padding=1, bias=False) -class BasicBlock(nn.Module): - expansion = 1 - - def __init__(self, inplanes, planes, stride=1, downsample=None): - super(BasicBlock, self).__init__() - self.conv1 = conv3x3(inplanes, planes, stride) - self.bn1 = normalization(planes) - self.relu = nn.ReLU(inplace=False) - self.conv2 = conv3x3(planes, planes) - self.bn2 = normalization(planes) - self.downsample = downsample - self.stride = stride - - def forward(self, x): - residual = x - - out = self.conv1(x) - out = self.bn1(out) - out = self.relu(out) - - out = self.conv2(out) - out = self.bn2(out) - - if self.downsample is not None: - residual = self.downsample(x) - - out = out + residual - out = self.relu(out) - - return out - - def forward_masked(self, x, mask=None): - residual = x - - out = self.conv1(x) - out = self.bn1(out) - out = self.relu(out) - - out = self.conv2(out) - out = self.bn2(out) - - if self.downsample is not None: - residual = self.downsample(x) - - - out = out + residual - if mask is not None: - out = out * mask[None,:,None,None]# + self.bn2.bias[None,:,None,None] * (1 - mask[None,:,None,None]) - - out = self.relu(out) - - return out - -class Bottleneck(nn.Module): - expansion = 4 - - def __init__(self, inplanes, planes, stride=1, downsample=None): - super(Bottleneck, self).__init__() - self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, bias=False) - self.bn1 = normalization(planes) - self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=stride, - padding=1, bias=False) - self.bn2 = normalization(planes) - self.conv3 = nn.Conv2d(planes, planes * 4, kernel_size=1, bias=False) - self.bn3 = normalization(planes * 4) - self.relu = nn.ReLU(inplace=False) - self.downsample = downsample - self.stride = stride - - def forward(self, x): - residual = x - - out = self.conv1(x) - out = self.bn1(out) - out = self.relu(out) - - out = self.conv2(out) - out = self.bn2(out) - out = self.relu(out) - - out = self.conv3(out) - out = self.bn3(out) - - if self.downsample is not None: - residual = self.downsample(x) - - out += residual - out = self.relu(out) - - return out - - -class AbstractResNet(nn.Module): - - def __init__(self, block, layers, num_classes=1000, maxiter=-1): - super(AbstractResNet, self).__init__() - self.inplanes = 64 - self.conv1 = nn.Conv2d(16, 64, kernel_size=7, stride=2, padding=3, - bias=False) - self.bn1 = normalization(64) - self.relu = nn.ReLU(inplace=False) - self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) - self.layer1 = self._make_layer(block, 64, layers[0]) - self.layer2 = self._make_layer(block, 128, layers[1], stride=2) - self.layer3 = self._make_layer(block, 256, layers[2], stride=2) - self.layer4 = self._make_layer(block, 512, layers[3], stride=2) - self.avgpool = nn.AdaptiveAvgPool2d(1) - - - def _make_layer(self, block, planes, blocks, stride=1): - downsample = None - if stride != 1 or self.inplanes != planes * block.expansion: - downsample = nn.Sequential( - nn.Conv2d(self.inplanes, planes * block.expansion, - kernel_size=1, stride=stride, bias=False), - normalization(planes * block.expansion), - ) - - layers = [] - layers.append(block(self.inplanes, planes, stride, downsample)) - self.inplanes = planes * block.expansion - for i in range(1, blocks): - layers.append(block(self.inplanes, planes)) - - return nn.Sequential(*layers) - - def features(self,x): - x__ = self.maxpool(self.relu(self.bn1(self.conv1(x)))) - x__1 = self.layer1(x__) - x__2 = self.layer2(x__1) - x__3 = self.layer3(x__2) - x__4 = self.layer4(x__3) - return x__, x__1, x__2, x__3, x__4 - - - - def load_state_dict(self, state_dict, strict=True): - missing_keys = [] - unexpected_keys = [] - error_msgs = [] - - # copy state_dict so _load_from_state_dict can modify it - metadata = getattr(state_dict, '_metadata', None) - state_dict = state_dict.copy() - if metadata is not None: - state_dict._metadata = metadata - - def load(module, prefix=''): - local_metadata = {} if metadata is None else metadata.get(prefix[:-1], {}) - module._load_from_state_dict( - state_dict, prefix, local_metadata, strict, missing_keys, unexpected_keys, error_msgs) - for name, child in module._modules.items(): - if child is not None: - load(child, prefix + name + '.') - - load(self) - - if strict: - error_msg = '' - if len(unexpected_keys) > 0: - error_msgs.insert( - 0, 'Unexpected key(s) in state_dict: {}. '.format( - ', '.join('"{}"'.format(k) for k in unexpected_keys))) - if len(missing_keys) > 0: - error_msgs.insert( - 0, 'Missing key(s) in state_dict: {}. '.format( - ', '.join('"{}"'.format(k) for k in missing_keys))) - - if len(error_msgs) > 0: - pass - - - -# Removed training-related classes for inference-only code -class oneByoneConvNet(nn.Module): - def __init__(self, in_channels,hidden_channels,out_channels): - super(oneByoneConvNet, self).__init__() - self.conv1 = nn.Conv2d(in_channels=in_channels, out_channels=hidden_channels, kernel_size=1) - - self.conv2 = nn.Conv2d(in_channels=hidden_channels, out_channels=out_channels, kernel_size=1) - - def forward(self, x): - x = self.conv1(x) - x = F.relu(x) - x = self.conv2(x) - return x -class ResNet(AbstractResNet): - - def __init__(self, block, layers, num_classes=2, max_iter=-1, normalized=True, use_bias=False, simsiam=False): - super(ResNet, self).__init__(block, layers, num_classes) - def forward(self, x): - x__, x__1, x__2, x__3, x__4 = self.features(x) - x__4_p = self.avgpool(x__4).view(x__.size(0), -1).squeeze() - return x__, x__1, x__2, x__3,x__4, x__4_p - -def resnet50(pretrained=False, **kwargs): - model = ResNet(Bottleneck, [3, 4, 6, 3], **kwargs) - if pretrained: - weight = model_zoo.load_url(model_urls['resnet50']) - conv1_weight = weight['conv1.weight'] - conv1_weight = conv1_weight.repeat(1, 5, 1, 1) - conv1_weight = torch.concat([conv1_weight, conv1_weight[:,:1,:,:]], dim=1) - model.load_state_dict(weight) - model.conv1.weight = nn.Parameter(conv1_weight) - return model - -class Normalize(nn.Module): - def __init__(self): - super(Normalize, self).__init__() - - def forward(self, x): - return F.normalize(x, dim=-1) - -# Removed get_model function as it's not needed for inference \ No newline at end of file diff --git a/video/pwtf-dvd/model_code/inference/model/transformers.py b/video/pwtf-dvd/model_code/inference/model/transformers.py deleted file mode 100644 index 1cd59044dcc707b980e5cfc4bb78b54c435c794a..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/model/transformers.py +++ /dev/null @@ -1,474 +0,0 @@ - -import torch -from torch import nn, einsum -import torch.nn.functional as F -from einops import rearrange, repeat -# Removed Rearrange import - not used in inference -# Removed unused imports for inference -from math import sqrt -from config_ftcn import config as my_cfg - -# Initialize config -my_cfg.init_with_yaml() -my_cfg.update_with_yaml("ftcn_tt.yaml") -my_cfg.freeze() - -# ============================================================================= -# Basic Transformer Components -# ============================================================================= - -class Residual(nn.Module): - def __init__(self, fn): - super().__init__() - self.fn = fn - def forward(self, x, **kwargs): - return self.fn(x, **kwargs) + x - -class PreNorm(nn.Module): - def __init__(self, dim, fn): - super().__init__() - self.norm = nn.LayerNorm(dim) - self.fn = fn - def forward(self, x, **kwargs): - return self.fn(self.norm(x), **kwargs) - -class FeedForward(nn.Module): - def __init__(self, dim, hidden_dim, dropout = 0.): - super().__init__() - self.net = nn.Sequential( - nn.Linear(dim, hidden_dim), - nn.GELU(), - nn.Dropout(dropout), - nn.Linear(hidden_dim, dim), - nn.Dropout(dropout) - ) - def forward(self, x): - return self.net(x) - -class Attention(nn.Module): - def __init__(self, dim, heads = 8, dim_head = 64, dropout = 0.): - super().__init__() - inner_dim = dim_head * heads - project_out = not (heads == 1 and dim_head == dim) - - self.heads = heads - self.scale = dim_head ** -0.5 - - self.to_qkv = nn.Linear(dim, inner_dim * 3, bias = False) - - self.to_out = nn.Sequential( - nn.Linear(inner_dim, dim), - nn.Dropout(dropout) - ) if project_out else nn.Identity() - - def forward(self, x, mask = None): - b, n, _, h = *x.shape, self.heads - qkv = self.to_qkv(x).chunk(3, dim = -1) - q, k, v = map(lambda t: rearrange(t, 'b n (h d) -> b h n d', h = h), qkv) - - dots = einsum('b h i d, b h j d -> b h i j', q, k) * self.scale - mask_value = -torch.finfo(dots.dtype).max - - if mask is not None: - mask = F.pad(mask.flatten(1), (1, 0), value = True) - assert mask.shape[-1] == dots.shape[-1], 'mask has incorrect dimensions' - mask = rearrange(mask, 'b i -> b () i ()') * rearrange(mask, 'b j -> b () () j') - dots.masked_fill_(~mask, mask_value) - del mask - - attn = dots.softmax(dim=-1) - - out = einsum('b h i j, b h j d -> b h i d', attn, v) - out = rearrange(out, 'b h n d -> b n (h d)') - out = self.to_out(out) - return out - -class Transformer(nn.Module): - def __init__(self, dim, depth, heads, dim_head, mlp_dim, dropout = 0.): - super().__init__() - self.layers = nn.ModuleList([]) - for _ in range(depth): - self.layers.append(nn.ModuleList([ - Residual(PreNorm(dim, Attention(dim, heads = heads, dim_head = dim_head, dropout = dropout))), - Residual(PreNorm(dim, FeedForward(dim, mlp_dim, dropout = dropout))) - ])) - def forward(self, x, mask = None): - for attn, ff in self.layers: - x = attn(x, mask = mask) - x = ff(x) - return x - -# ============================================================================= -# Utility Functions -# ============================================================================= - -def valid_idx(idx, h): - i = idx // h - j = idx % h - if j == 0 or i == h - 1 or j == h - 1: - return False - else: - return True - - -# ============================================================================= -# Patch Pooling Classes (Simplified for Inference) -# ============================================================================= - -class CenterPatchPool(nn.Module): - """Simplified patch pooling for inference - always use center patch""" - def __init__(self): - super().__init__() - - def forward(self, x): - # batch,channel,16,7x7 - b, c, t, h, w = x.shape - x = x.reshape(b, c, t, h * w) - idx = h * w // 2 # Always use center patch for inference - x = x[..., idx] - return x - -class CenterAvgPool(nn.Module): - """Simplified average pooling for inference - use all valid patches""" - def __init__(self): - super().__init__() - - def forward(self, x): - # batch,channel,16,7x7 - b, c, t, h, w = x.shape - x = x.reshape(b, c, t, h * w) - candidates = list(range(h * w)) - candidates = [idx for idx in candidates if valid_idx(idx, h)] - x = x[..., candidates].mean(-1) - return x - -class CenterSelect(nn.Module): - """Simplified selection for inference - use all valid patches""" - def __init__(self): - super().__init__() - - def forward(self, x): - # batch,7x7 - size = x.shape[1] - h = int(sqrt(size)) - candidates = list(range(size)) - candidates = [idx for idx in candidates if valid_idx(idx, h)] - x = x[:, candidates] - return x - -# ============================================================================= -# Vision Transformer Classes -# ============================================================================= - -# Removed ViT and VideoiT classes - not used in inference - -# ============================================================================= -# Specialized Transformer Classes -# ============================================================================= - -# SpatialTransformer class - used by SpatialTransformerE -class SpatialTransformer(nn.Module): - def __init__(self,num_patches, num_classes, dim, depth, heads, mlp_dim, pool = 'cls', dim_head = 64, dropout = 0., emb_dropout = 0.): - super().__init__() - self.dim =dim - self.num_patches=num_patches - self.pos_embedding = nn.Parameter(posemb_sincos_2d(14,14,dim)) - self.cls_token = nn.Parameter(torch.randn(1, 1, dim)) - self.dropout = nn.Dropout(emb_dropout) - self.fre_pos = nn.Parameter(torch.randn(1, 1, dim)) - self.transformer = Transformer(1024, depth, heads, dim_head, mlp_dim, dropout) - self.pool = pool - self.to_latent = nn.Identity() - self.mlp_head = nn.Sequential( - nn.LayerNorm(1024), nn.Linear(1024, 1024) - ) - self.freq_embedding = nn.Sequential(nn.LayerNorm(dim),nn.Linear(dim,dim)) - self.cls_token_pos = nn.Parameter(torch.randn(1, 1, dim)) - self.mlp_head_ste = nn.Linear(dim, 1) - - def posemb_loc(self, locs,batch_size): - if locs is not None: - b,n,_ = locs.shape - - pos224 =self.pos_embedding.view(14,14,-1) - pos_locs = torch.zeros(batch_size,n, self.dim) - if locs is not None: - # locs[locs>=1] = 0.999999 - loc_x = torch.floor(locs[:,:,0]*6) - loc_y = torch.floor(locs[:,:,1]*6) - - loc_x = loc_x.long() - loc_y = loc_y.long() - x_a = locs[:,:,0]*6 - loc_x - y_a = locs[:,:,0]*6 - loc_y - - x1_a = torch.sqrt( torch.pow(1-x_a,2) + torch.pow(1-y_a,2)) - x2_a = torch.sqrt( torch.pow(1-x_a,2) + torch.pow(y_a,2)) - x3_a = torch.sqrt( torch.pow(x_a,2) + torch.pow(1-y_a,2)) - x4_a = torch.sqrt( torch.pow(x_a,2) + torch.pow(y_a,2)) - pos_locs[:, :, :] = pos224[loc_x,loc_y,:]*x1_a.unsqueeze(-1)\ - +pos224[loc_x+1,loc_y,:]*x2_a.unsqueeze(-1)\ - +pos224[loc_x,loc_y+1,:]*x3_a.unsqueeze(-1)\ - +pos224[loc_x+1,loc_y+1,:]*x4_a.unsqueeze(-1) - - return pos_locs - - def forward(self, x,ft_feature,locs): - b, n, _ = x.shape #batch,num_patches,channels # - cls_tokens_pos = repeat(self.cls_token_pos, '() n d -> b n d', b = b) - cls_tokens = repeat(self.cls_token, '() n d -> b n d', b = b) - cls_tokens = cls_tokens+cls_tokens_pos - x += self.pos_embedding - if locs is not None: - posemb_loc = self.posemb_loc(locs,b).clone().detach() - if torch.cuda.is_available() and x.is_cuda: - posemb_loc = posemb_loc.cuda() - posemb_loc += self.fre_pos - - ft_feature = ft_feature+posemb_loc - ft_feature = self.freq_embedding(ft_feature) - x = torch.cat((cls_tokens, x,ft_feature), dim=1) - else : - x = torch.cat((cls_tokens, x), dim=1) - x = self.dropout(x) - x = self.transformer(x, mask=None) - x = x.mean(dim = 1) if self.pool == 'mean' else x[:, 0] - - x = self.to_latent(x) - x = self.mlp_head(x) - return x, self.mlp_head_ste(x.clone()) -import torch -from torch import nn -import torch.nn.functional as F -from einops import repeat - -def posemb_sincos_2d(h, w, dim, temperature: int = 10000, dtype=torch.float32): - assert (dim % 4) == 0, "dim must be multiple of 4" - y, x = torch.meshgrid(torch.arange(h), torch.arange(w), indexing="ij") - omega = torch.arange(dim // 4) / (dim // 4 - 1) - omega = 1.0 / (temperature ** omega) - y = y.flatten()[:, None] * omega[None, :] - x = x.flatten()[:, None] * omega[None, :] - pe = torch.cat((x.sin(), x.cos(), y.sin(), y.cos()), dim=1) - return pe.type(dtype) - -class SpatialTransformer(nn.Module): - def __init__(self, num_patches, num_classes, dim, depth, heads, mlp_dim, - pool='cls', dim_head=64, dropout=0., emb_dropout=0.): - super().__init__() - self.dim = dim - self.num_patches = num_patches - self.register_buffer('pos_embedding', posemb_sincos_2d(14, 14, dim)) - - self.cls_token = nn.Parameter(torch.randn(1, 1, dim)) - self.cls_token_pos = nn.Parameter(torch.randn(1, 1, dim)) - self.fre_pos = nn.Parameter(torch.randn(1, 1, dim)) - self.dropout = nn.Dropout(emb_dropout) - - self.spatial_proj = nn.Linear(dim, dim) - self.freq_embedding = nn.Sequential(nn.LayerNorm(dim), nn.Linear(dim, dim)) - self.transformer = Transformer(dim, depth, heads, dim_head, mlp_dim, dropout) - - self.pool = pool - self.to_latent = nn.Identity() - - # output ES ∈ R^1024 - self.mlp_head = nn.Sequential(nn.LayerNorm(dim), nn.Linear(dim, 1024)) - self.mlp_head_ste = nn.Linear(dim, 1) - - @torch.no_grad() - def posemb_loc(self, locs, batch_size): - if locs is None: - return None - # locs: (B, P, 2) in [0,1] - B, P, _ = locs.shape - device, dtype = locs.device, locs.dtype - - pos_grid = self.pos_embedding.view(14, 14, self.dim).to(device) # (14,14,dim) - already [196, dim] - - S = 13.0 - x_f = (locs[:, :, 0] * S).clamp(0, 13 - 1e-6) - y_f = (locs[:, :, 1] * S).clamp(0, 13 - 1e-6) - - ix = torch.floor(x_f).long().clamp(0, 12) - iy = torch.floor(y_f).long().clamp(0, 12) - ix1 = (ix + 1).clamp(max=13) - iy1 = (iy + 1).clamp(max=13) - - x_a = (x_f - ix).to(dtype) # frac - y_a = (y_f - iy).to(dtype) - - w11 = (1 - x_a) * (1 - y_a) - w12 = x_a * (1 - y_a) - w21 = (1 - x_a) * y_a - w22 = x_a * y_a - - p11 = pos_grid[ix, iy, :] # (B,P,dim) via advanced indexing - p12 = pos_grid[ix1, iy, :] - p21 = pos_grid[ix, iy1, :] - p22 = pos_grid[ix1, iy1, :] - - pos_locs = (p11 * w11.unsqueeze(-1) + - p12 * w12.unsqueeze(-1) + - p21 * w21.unsqueeze(-1) + - p22 * w22.unsqueeze(-1)) # (B,P,dim) - return pos_locs - - def forward(self, x, ft_feature, locs): - # x: (B, N=14*14, dim), ft_feature: (B, P, dim), locs: (B, P, 2) - B, N, _ = x.shape - - # cls token (+ pos) - cls_tokens = repeat(self.cls_token, '() n d -> b n d', b=B) - cls_tokens_pos = repeat(self.cls_token_pos, '() n d -> b n d', b=B) - cls_tokens = cls_tokens + cls_tokens_pos - - # Wsp z_sp + pos_sp - x = self.spatial_proj(x) - x = x + self.pos_embedding.unsqueeze(0).to(x.device) - - # part tokens: Wfreq Z_p + (interp(pos_sp) + pos_freq) - if locs is not None and ft_feature is not None: - pospart = self.posemb_loc(locs, B) # (B,P,dim) - if pospart is not None: - pospart = pospart + self.fre_pos # + posfreq - ft_feature = self.freq_embedding(ft_feature) # Wfreq - if pospart is not None: - ft_feature = ft_feature + pospart - tokens = torch.cat((cls_tokens, x, ft_feature), dim=1) - else: - tokens = torch.cat((cls_tokens, x), dim=1) - - tokens = self.dropout(tokens) - tokens = self.transformer(tokens, mask=None) - out = tokens.mean(dim=1) if self.pool == 'mean' else tokens[:, 0] - - out = self.to_latent(out) - es = self.mlp_head(out) # ES ∈ R^1024 - ste_score = self.mlp_head_ste(out) # optional head - - return es, ste_score - -class TimeTransformer(nn.Module): - def __init__(self,num_patches, num_classes, dim, depth, heads, mlp_dim, pool = 'cls', dim_head = 64, dropout = 0., emb_dropout = 0.): - super().__init__() - assert pool in {'cls', 'mean'}, 'pool type must be either cls (cls token) or mean (mean pooling)' - - self.num_patches=num_patches - self.pos_embedding = nn.Parameter(torch.randn(1, num_patches + 1, dim)) - self.cls_token = nn.Parameter(torch.randn(1, 1, dim)) - self.dropout = nn.Dropout(emb_dropout) - - self.transformer = Transformer(dim, depth, heads, dim_head, mlp_dim, dropout) - self.freq_embedding = nn.Sequential(nn.LayerNorm(dim),nn.Linear(dim,dim)) - self.pool = pool - self.to_latent = nn.Identity() - self.LN = nn.LayerNorm(dim) - - def forward(self, x,ft_t): - b, n, _ = x.shape #batch,num_patches,channels # - cls_tokens = repeat(self.cls_token, '() n d -> b n d', b = b) - - ft_t = self.freq_embedding(ft_t) - x +=ft_t.unsqueeze(1) - x = torch.cat((cls_tokens, x), dim=1) - x += self.pos_embedding[:, :(n + 1)] - - # x = torch.cat((x,ft_t), dim=1) - x = self.dropout(x) - x = self.transformer(x, mask=None) - x = x.mean(dim = 1) if self.pool == 'mean' else x[:, 0] - x = self.to_latent(x) - x = self.LN(x) - - return x, None - -# ============================================================================= -# FTCN-specific Transformer Classes -# ============================================================================= - -class SpatialTransformerE(nn.Module): - def __init__(self, spatial_size=14, time_size = 16, in_channels = 1024, num_parts=5): - super().__init__() - self.num_parts = num_parts - self.in_channels = in_channels - default_params= dict( - dim=self.in_channels, depth=1, heads=16, mlp_dim=2048, dropout=0.1, emb_dropout=0.1, - num_patches = spatial_size ** 2, num_classes = 1 - ) - self.num_patches = spatial_size ** 2 - self.freq_embedding = nn.Linear(2048,1024) - self.freq_embedding.weight.data.normal_(mean=0.0, std=0.02) - self.freq_embedding.bias.data.zero_() - self.pool = nn.AvgPool3d((time_size, 1, 1)) - self.spatial_T = SpatialTransformer( **default_params ) - - def forward(self, x, ft, locs): - batch_size = x.shape[0] - x = self.pool(x) - if self.num_parts > 0: - ft = self.freq_embedding(ft.reshape(batch_size*self.num_parts,2048)) - ft = ft.view(batch_size,self.num_parts,1024) - locs = locs.reshape(-1, self.num_parts, 2) - x = x.view(batch_size,self.num_patches,1024) - x = self.spatial_T(x,ft,locs) - return x - -class TransformerHead(nn.Module): - def __init__(self, spatial_size=7, time_size=16, in_channels=1024, num_parts=5): - super().__init__() - if my_cfg.model.inco.no_time_pool: - time_size = time_size * 2 - patch_type = my_cfg.model.transformer.patch_type # time - if patch_type == "time": - self.pool = nn.AvgPool3d((1, spatial_size, spatial_size)) - self.num_patches = time_size - elif patch_type == "spatial": - self.pool = nn.AvgPool3d((time_size, 1, 1)) - self.num_patches = spatial_size ** 2 - elif patch_type == "random": - self.pool = CenterPatchPool() - self.num_patches = time_size - elif patch_type == "random_avg": - self.pool = CenterAvgPool() - self.num_patches = time_size - elif patch_type == "all": - self.pool = nn.Identity() - self.num_patches = time_size * spatial_size * spatial_size - else: - raise NotImplementedError(patch_type) - - self.dim = my_cfg.model.transformer.dim # False - if self.dim == -1: - self.dim = in_channels # 2048 - my_cfg.model.transformer.dim = self.dim - - self.in_channels = in_channels - - if self.dim != self.in_channels: - self.fc = nn.Linear(self.in_channels, self.dim) - - default_params = dict( - dim=self.dim, depth=6, heads=16, mlp_dim=2048, dropout=0.1, emb_dropout=0.1, - ) - params = my_cfg.model.transformer.to_dict() - for key in default_params: - if key in params: - default_params[key] = params[key] - - self.time_T = TimeTransformer( - num_patches=self.num_patches, num_classes=1, **default_params - ) - - self.sigmoid = nn.Sigmoid() - - def forward(self, x,ft_t): - x = self.pool(x) - x = x.reshape(-1, self.in_channels, self.num_patches) - x = x.permute(0, 2, 1) - if self.dim != self.in_channels: - x = self.fc(x.reshape(-1, self.in_channels)) - x = x.reshape(-1, self.num_patches, self.dim) - - x = self.time_T(x,ft_t) - return x \ No newline at end of file diff --git a/video/pwtf-dvd/model_code/inference/model/video_encoder.py b/video/pwtf-dvd/model_code/inference/model/video_encoder.py deleted file mode 100644 index e512f03f456c6c0351ff82173adaa1a4e1f83fa8..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/model/video_encoder.py +++ /dev/null @@ -1,227 +0,0 @@ -import gc -import math - -# Simplified config for inference -config_text = """ -DATA: - NUM_FRAMES: 8 - SAMPLING_RATE: 8 - TEST_CROP_SIZE: 256 - INPUT_CHANNEL_NUM: [3] -RESNET: - ZERO_INIT_FINAL_BN: True - WIDTH_PER_GROUP: 64 - NUM_GROUPS: 1 - DEPTH: 50 - TRANS_FUNC: bottleneck_transform - STRIDE_1X1: False - NUM_BLOCK_TEMP_KERNEL: [[3], [4], [6], [3]] -NONLOCAL: - LOCATION: [[[]], [[]], [[]], [[]]] - GROUP: [[1], [1], [1], [1]] - INSTANTIATION: softmax -BN: - USE_PRECISE_STATS: True - NUM_BATCHES_PRECISE: 200 -MODEL: - NUM_CLASSES: 1 - ARCH: i3d - MODEL_NAME: ResNet - DROPOUT_RATE: 0.1 - HEAD_ACT: sigmoid -TEST: - ENABLE: True - DATASET: kinetics - BATCH_SIZE: 64 -DATA_LOADER: - NUM_WORKERS: 8 - PIN_MEMORY: True -NUM_GPUS: 8 -NUM_SHARDS: 1 -RNG_SEED: 0 -OUTPUT_DIR: . -""" - -# from .f3net import FAD_Head -from slowfast.models.video_model_builder import ResNet as ResNetOri -from slowfast.config.defaults import get_cfg -import torch -from torch import nn -from config_ftcn import config as my_cfg -from inspect import signature -# Removed TimeTransformer import - not used directly in this file -# Removed random import - not used in inference - -my_cfg.init_with_yaml() -my_cfg.update_with_yaml("ftcn_tt.yaml") -my_cfg.freeze() - - - -class CenterPatchPool(nn.Module): - """Simplified patch pooling for inference - always use center patch""" - def __init__(self): - super().__init__() - - def forward(self, x): - # batch,channel,16,7x7 - b, c, t, h, w = x.shape - x = x.reshape(b, c, t, h * w) - idx = h * w // 2 # Always use center patch for inference - x = x[..., idx] - return x - - -def valid_idx(idx, h): - i = idx // h - j = idx % h - if j == 0 or i == h - 1 or j == h - 1: - return False - else: - return True - - -class CenterAvgPool(nn.Module): - """Simplified average pooling for inference - use all valid patches""" - def __init__(self): - super().__init__() - - def forward(self, x): - # batch,channel,16,7x7 - b, c, t, h, w = x.shape - x = x.reshape(b, c, t, h * w) - candidates = list(range(h * w)) - candidates = [idx for idx in candidates if valid_idx(idx, h)] - x = x[..., candidates].mean(-1) - return x - - - -# Removed duplicate TransformerHead class - using the one from temporal_transformer.py - - -parameters = [parameter for parameter in signature(nn.Conv3d).parameters] - -spatial_count = my_cfg.model.inco.spatial_count -keep_stride_count = my_cfg.model.inco.keep_stride_count - - -def temporal_only_conv(module, name, removed, stride_removed=0): - """ - Recursively put desired batch norm in nn.module module. - - set module = net to start code. - """ - # go through all attributes of module nn.module (e.g. network or layer) and put batch norms if present - for attr_str in dir(module): - sub_module = getattr(module, attr_str) - if type(sub_module) == nn.Conv3d: - target_spatial_size = 1 - predefine_padding = {1: 0, 3: 1, 5: 2, 7: 3} - kernel_size = list(sub_module.kernel_size) - assert kernel_size[1] == kernel_size[2] - stride = sub_module.stride - extra = None - if stride[1] == stride[2] == 2: - stride_removed += 1 - if stride_removed > keep_stride_count: - stride = [1, 1, 1] - extra = nn.MaxPool3d((1, 2, 2)) - - if kernel_size[1] == 1 and extra is None: - continue - padding = list(sub_module.padding) - - kernel_size[1] = kernel_size[2] = target_spatial_size - padding[1] = padding[2] = predefine_padding[target_spatial_size] - if 'device' in parameters: - parameters.remove('device') - if 'dtype' in parameters: - parameters.remove('dtype') - param_dict = {key: getattr(sub_module, key) for key in parameters} - - param_dict.update(kernel_size=kernel_size, padding=padding, stride=stride) - - conv = nn.Conv3d(**param_dict) - - new_module = conv - - removed += 1 - if removed > spatial_count: - setattr(module, attr_str, new_module) - if extra is not None: - if attr_str == "conv": - bn_str = "bn" - else: - bn_str = f"{attr_str}_bn" - bn_module = getattr(module, bn_str) - assert isinstance(bn_module, nn.BatchNorm3d) - new_bn_module = nn.Sequential(bn_module, extra) - setattr(module, bn_str, new_bn_module) - else: - print("keep spatial") - elif type(sub_module) == nn.Dropout: - new_module = nn.Dropout(p=0.5) - setattr(module, attr_str, new_module) - if my_cfg.model.inco.no_time_pool: - if type(sub_module) == nn.MaxPool3d: - kernel_size = list(sub_module.kernel_size) - if kernel_size[0] == 2: - kernel_size[0] = 1 - setattr(module, attr_str, nn.MaxPool3d(kernel_size)) - elif type(sub_module) == nn.AvgPool3d: - kernel_size = list(sub_module.kernel_size) - kernel_size[0] = 2 * kernel_size[0] - setattr(module, attr_str, nn.AvgPool3d(kernel_size)) - - # iterate through immediate child modules. Note, the recursion is done by our code no need to use named_modules() - old_name = name - for name, immediate_child_module in module.named_children(): - removed, stride_removed = temporal_only_conv( - immediate_child_module, old_name + "." + name, removed, stride_removed - ) - return removed, stride_removed - - -class I3D8x8(nn.Module): - def __init__(self) -> None: - super(I3D8x8, self).__init__() - cfg = get_cfg() - cfg.merge_from_str(config_text) - cfg.NUM_GPUS = 1 - cfg.TEST.BATCH_SIZE = 1 - cfg.TRAIN.BATCH_SIZE = 1 - - cfg.DATA.NUM_FRAMES = my_cfg.clip_size - SOLVER = my_cfg.model.inco.SOLVER - if SOLVER is not None: - for key, val in SOLVER.to_dict().items(): - old_val = getattr(cfg.SOLVER, key) - val = type(old_val)(val) - setattr(cfg.SOLVER, key, val) - - if my_cfg.model.inco.i3d_routine: - self.cfg = cfg - self.resnet = ResNetOri(cfg) - temporal_only_conv(self.resnet, "model", 0) - - stop_point = my_cfg.model.transformer.stop_point - - for i in [5, 4, 3]: - if stop_point <= i: - setattr(self.resnet, f"s{i}", nn.Identity()) - if stop_point == 3: - setattr(self.resnet, f"pathway0_pool", nn.Identity()) - gc.collect() - torch.cuda.empty_cache() - - def forward( - self, - images, ft_features=None, - freeze_backbone=False - ): - assert not freeze_backbone - - inputs = [images] - pred = self.resnet(inputs, ft_features) - return pred diff --git a/video/pwtf-dvd/model_code/inference/root_setting.yaml b/video/pwtf-dvd/model_code/inference/root_setting.yaml deleted file mode 100644 index b66140f63b9d87e5a977503d7eaf65fdc5510f42..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/root_setting.yaml +++ /dev/null @@ -1,192 +0,0 @@ -# this is the root setting of all setting and will be loaded in first place -# the loading sequence is root_setting -> specific setting -# -> manully overided setting -> computed setting in finalize_config() -# which means access config before finalize can be dangerous -# always remember to add a space after : - -setting_name: base -test_dataset_type: null -clip_size: 8 -var_clip_size: -1 - -model: - teacher: null - pretrained: null - fc_weight: null - fc_bias: null - patch: - name: null - fc_only: false - feat_type: image - tester: null - tester_path: null - tester_data_mode: null - decodec: - reg_loss_type: l1 - feat_loss_func: l1 - dis_model: basic - gan_type: vanilla - inco: - kernel_size: 1 - pool_ref_type: sum - temp_kernel_size: 3 - spatial_sizes: [] - spatial_count: 0 - no_time_pool: false - keep_stride_count: 0 - i3d_routine: true - SOLVER: - BASE_LR: 0.1 - LR_POLICY: cosine - MAX_EPOCH: 196 - MOMENTUM: 0.9 - WEIGHT_DECAY: 1e-4 - WARMUP_EPOCHS: 34.0 - WARMUP_START_LR: 0.01 - OPTIMIZING_METHOD: sgd - transformer: - patch_type: null #time,spatial,all - dim: -1 - stop_point: 6 - random_select: true - k: 8 - sigmoid_before: false - denoise: - layers: [] - -test_on_train: false - -test: false -debug: false -pre_load_data: false -# for better compatiable with philly and potential running enviroment -# all path under path should be rel_path w.r.t the config.py -# and the abspath will be compute when finalize - -# python -m torch.distributed.launch --nproc_per_node=2 main.py --setting get_all_datas_id_emb_old.yaml main.py -# --config trainer.default.log_step=1 trainer.default.sample_step=20 - -trash_face: false - -strategies: [] -branches: ["continuous_same","continuous_diff","discontinuous"] -epoch: -1 - -reg_weight: 10 -class_weight: 1 -final_weight: 1 -feat_weight: 0 -gan_weight: 0 - -noise_only: false -error_only: false -force_ds_scale: 1.0 - -path: - model_dir: ../checkpoint - pretrain_dir: ../pretrain - log_dir: ../checkpoint - data_dir: ../data - precomputed_dir: ../precomputed - test_data_dir: null - extra_data_dir: ../extra_data - lmdb_dir: null - -patch_input: false -input_noise: false -mask_direct: false -max_to_keep: 50 -base_count: -1 -enable_lmdb_cache: false - -aug_in_train: true -aug_in_test: false -vis_in_train: true - -data_mode: "image" -data_source: "zip" - -aug: - flip_prob: 0 - reverse_prob: 0 - gray_prob: 0 - size_aug_prob: 0 - quantify_prob: 0 - quantify_steps: [16,32] - min_size: 64 - max_size: 256 - jpeg_aug_prob: 0 - dxy_gauss_prob: 0 - dxy_gauss_scale: 0 - min_quality: 60 - max_quality: 100 - gaussain: false - need_img_degrade: true - need_mask_distortion: true - need_color_match: true - feather_range: [0.2,0.2] - adaptive_clip_size: false - clip_sizes: null - cutout: 0 - earse: 0 - types: null - earse_type: null - time_earse_prob: 0 - time_earse_type: null - jitter_prob: 0 - test_types: null - raw_prob: 0 - bi_types: null - bi_count: 1 - face_sources: null - inplace_types: null - no_poisson_prob: 0 - blend: - pseudo_prob: 0.5 - from_real_prob: 1 - skip_prob: 0 - shuffle_prob: 0 - multi_prob: 0 - multi_config: - from_real_prob: 1 - self_prob: 1 - self: - one: 0 - continuity: 1 - other: - one: 0 - all: 0 - continuity: 1 - celeb_prob: 0 - fft: - type: null - fad: - type: null - flag: high - tta: - type: null - param: null - - -batch_size: 64 -test_batch_size: 64 -imsize: 256 -next_frame_rate: 0.5 -trainer: - default: - apex_option: O0 - n_worker: 12 - optim: adam - model_save_step: 1000 - log_step: 25 - sample_step: 1000 - init_lr: 3e-4 - validation_step: 5000 - test_sample_step: 20 - one_test_step: 500 - test_freq: 1 - total_step: 100000 - lr_step: 20000 - freeze_backbone_step: 0 - total_epoch: 200 -fetch_method: prefetch \ No newline at end of file diff --git a/video/pwtf-dvd/model_code/inference/setting/ftcn_tt.yaml b/video/pwtf-dvd/model_code/inference/setting/ftcn_tt.yaml deleted file mode 100644 index a6bb2fbe8b9c92f7d9260ea205ac714c5b3c6b4a..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/setting/ftcn_tt.yaml +++ /dev/null @@ -1,114 +0,0 @@ -# this is the root setting of all setting and will be loaded in first place -# the loading sequence is root_setting -> specific setting -# -> manully overided setting -> computed setting in finalize_config() -# which means access config before finalize can be dangerous -# always remember to add a space after ":" - -setting_name: base -data_mode: image -# for better compatiable with philly and potential running enviroment -# all path under path should be rel_path w.r.t the config.py -# and the abspath will be compute when finalize - -# python -m torch.distributed.launch --nproc_per_node=2 main.py --setting naive_raw.yaml -# --config trainer.default.log_step=1 trainer.default.sample_step=20 -strategies: ["scale_mean","scale_0","scale_1","scale_2","scale_3"] -mask_direct: true - -clip_size: 32 - -reg_weight: 1 -class_weight: 1 -final_weight: 1 -model: - inco: - spatial_count: 0 - SOLVER: - BASE_LR: 0.1 - LR_POLICY: cosine - MAX_EPOCH: 100 - MOMENTUM: 0.9 - WEIGHT_DECAY: 1e-4 - WARMUP_EPOCHS: 10 - WARMUP_START_LR: 0.01 - OPTIMIZING_METHOD: sgd - transformer: - patch_type: time - stop_point: 5 - depth: 1 - -path: - model_dir: ../checkpoint - pretrain_dir: ../pretrain - log_dir: ../checkpoint - data_dir: host:lmdb_dir - precomputed_dir: null - -trainer_type: YL3DIncoPolicyS -dataset_type: YL_3D_INCO_BASE_ZIP_PNG_S -classifier_type: i3d_temporal_var_fix_dropout_tt_cfg - -imsize: 224 -base_count: 12 -aug_in_train: true -test_on_train: true - -next_frame_rate: 0.0 -aug: - min_size: 64 - max_size: 317 - min_quality: 60 - max_quality: 100 - need_img_degrade: false - need_mask_distortion: true - need_color_match: true - max_step: 4 - compression: false - cutout: 0 - earse: 1 - aug_prob: 0 - types: ["C23_NOISE"] - earse_type: ["strong_black"] - -dataset: - real_train: - original_c23: 1 - fake_train: - NeuralTextures_c23: 1 - Face2Face_c23: 1 - FaceSwap_c23: 1 - Deepfakes_c23: 1 - aug_online: - empty: 1 - tests: - NeuralTextures_c23: ["NeuralTextures_c23"] - Face2Face_c23: ["Face2Face_c23"] - FaceSwap_c23: ["FaceSwap_c23"] - Deepfakes_c23: ["Deepfakes_c23"] - -max_to_keep: 100 - -data_source: lmdb - -trainer: - default: - apex_option: O0 - batch_size: 16 - test_batch_size: 8 - model_save_step: 10000 - log_step: 200 - sample_step: 1000 - init_lr: 3e-4 - total_epoch: 1000 - one_test_step: 200 - detach_step: 5000 - validation_step: 10000 - freeze_backbone_step: 0 - total_step: 200000 - lr_step: 100000 - - - -#classifier: -# default: -# pretrained: false \ No newline at end of file diff --git a/video/pwtf-dvd/model_code/inference/slowfast/__init__.py b/video/pwtf-dvd/model_code/inference/slowfast/__init__.py deleted file mode 100644 index b65a8f9dc0cd5092e2dc879f6bb4aba8fafbb092..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -from slowfast.utils.env import setup_environment - -setup_environment() diff --git a/video/pwtf-dvd/model_code/inference/slowfast/config/__init__.py b/video/pwtf-dvd/model_code/inference/slowfast/config/__init__.py deleted file mode 100644 index 8dbe96a785072a24a9bcc4841a1934024f2b06a1..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/config/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. diff --git a/video/pwtf-dvd/model_code/inference/slowfast/config/custom_config.py b/video/pwtf-dvd/model_code/inference/slowfast/config/custom_config.py deleted file mode 100644 index 8131da2951d8cb629f664b39da4675d0ae5adee5..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/config/custom_config.py +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""Add custom configs and default values""" - - -def add_custom_config(_C): - # Add your own customized configs. - pass diff --git a/video/pwtf-dvd/model_code/inference/slowfast/config/defaults.py b/video/pwtf-dvd/model_code/inference/slowfast/config/defaults.py deleted file mode 100644 index 73f0f562c3f95d92382d364c8a8ccbe5b6c27ca3..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/config/defaults.py +++ /dev/null @@ -1,816 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""Configs.""" -import yaml -from fvcore.common.config import CfgNode as CfgNodeOri - -from . import custom_config -def load_yaml_with_base(text: str, allow_unsafe: bool = False): - """ - Just like `yaml.load(open(filename))`, but inherit attributes from its - `_BASE_`. - Args: - text (str): the file name of the current config. Will be used to - find the base config file. - allow_unsafe (bool): whether to allow loading the config file with - `yaml.unsafe_load`. - Returns: - (dict): the loaded yaml - """ - cfg = yaml.load(text, Loader=yaml.FullLoader) - return cfg -class CfgNode(CfgNodeOri): - def merge_from_str(self, text, allow_unsafe=False): - loaded_cfg = load_yaml_with_base(text, allow_unsafe=allow_unsafe) - loaded_cfg = type(self)(loaded_cfg) - self.merge_from_other_cfg(loaded_cfg) - -# ----------------------------------------------------------------------------- -# Config definition -# ----------------------------------------------------------------------------- -_C = CfgNode() - - -# ---------------------------------------------------------------------------- # -# Batch norm options -# ---------------------------------------------------------------------------- # -_C.BN = CfgNode() - -# Precise BN stats. -_C.BN.USE_PRECISE_STATS = False - -# Number of samples use to compute precise bn. -_C.BN.NUM_BATCHES_PRECISE = 200 - -# Weight decay value that applies on BN. -_C.BN.WEIGHT_DECAY = 0.0 - -# Norm type, options include `batchnorm`, `sub_batchnorm`, `sync_batchnorm` -_C.BN.NORM_TYPE = "batchnorm" - -# Parameter for SubBatchNorm, where it splits the batch dimension into -# NUM_SPLITS splits, and run BN on each of them separately independently. -_C.BN.NUM_SPLITS = 1 - -# Parameter for NaiveSyncBatchNorm3d, where the stats across `NUM_SYNC_DEVICES` -# devices will be synchronized. -_C.BN.NUM_SYNC_DEVICES = 1 - - -# ---------------------------------------------------------------------------- # -# Training options. -# ---------------------------------------------------------------------------- # -_C.TRAIN = CfgNode() - -# If True Train the model, else skip training. -_C.TRAIN.ENABLE = True - -# Dataset. -_C.TRAIN.DATASET = "kinetics" - -# Total mini-batch size. -_C.TRAIN.BATCH_SIZE = 64 - -_C.TRAIN.SPLIT = "train_subset2.pth" -# Evaluate model on test data every eval period epochs. -_C.TRAIN.EVAL_PERIOD = 1 - -# Save model checkpoint every checkpoint period epochs. -_C.TRAIN.CHECKPOINT_PERIOD = 1 - -# Save model checkpoint every checkpoint period iters. -_C.TRAIN.CHECKPOINT_PERIOD_BY_ITER = 500 - - -# Resume training from the latest checkpoint in the output directory. -_C.TRAIN.AUTO_RESUME = True - -# Path to the checkpoint to load the initial weight. -_C.TRAIN.CHECKPOINT_FILE_PATH = "" - -# Checkpoint types include `caffe2` or `pytorch`. -_C.TRAIN.CHECKPOINT_TYPE = "pytorch" - -# If True, perform inflation when loading checkpoint. -_C.TRAIN.CHECKPOINT_INFLATE = False - - -# ---------------------------------------------------------------------------- # -# Testing options -# ---------------------------------------------------------------------------- # -_C.TEST = CfgNode() - -# If True test the model, else skip the testing. -_C.TEST.ENABLE = True - -# Dataset for testing. -_C.TEST.DATASET = "kinetics" - -_C.TEST.SPLIT = "test_subset2.pth" -# Total mini-batch size -_C.TEST.BATCH_SIZE = 8 - -# Path to the checkpoint to load the initial weight. -_C.TEST.CHECKPOINT_FILE_PATH = "" - -# Number of clips to sample from a video uniformly for aggregating the -# prediction results. -_C.TEST.NUM_ENSEMBLE_VIEWS = 10 - -# Number of crops to sample from a frame spatially for aggregating the -# prediction results. -_C.TEST.NUM_SPATIAL_CROPS = 3 - -# Checkpoint types include `caffe2` or `pytorch`. -_C.TEST.CHECKPOINT_TYPE = "pytorch" -# Path to saving prediction results file. -_C.TEST.SAVE_RESULTS_PATH = "" -# ----------------------------------------------------------------------------- -# ResNet options -# ----------------------------------------------------------------------------- -_C.RESNET = CfgNode() - -# Transformation function. -_C.RESNET.TRANS_FUNC = "bottleneck_transform" - -# Number of groups. 1 for ResNet, and larger than 1 for ResNeXt). -_C.RESNET.NUM_GROUPS = 1 - -# Width of each group (64 -> ResNet; 4 -> ResNeXt). -_C.RESNET.WIDTH_PER_GROUP = 64 - -# Apply relu in a inplace manner. ########## FIxed by TH for training FT ################# -_C.RESNET.INPLACE_RELU = False # Default True for C2 and torch. - -# Apply stride to 1x1 conv. -_C.RESNET.STRIDE_1X1 = False - -# If true, initialize the gamma of the final BN of each block to zero. -_C.RESNET.ZERO_INIT_FINAL_BN = False - -# Number of weight layers. -_C.RESNET.DEPTH = 50 - - -# label of branchs -_C.RESNET.LABELS = ["continus","discontinus"] - -# If the current block has more than NUM_BLOCK_TEMP_KERNEL blocks, use temporal -# kernel of 1 for the rest of the blocks. -_C.RESNET.NUM_BLOCK_TEMP_KERNEL = [[3], [4], [6], [3]] - -# Size of stride on different res stages. -_C.RESNET.SPATIAL_STRIDES = [[1], [2], [2], [2]] - -# Size of dilation on different res stages. -_C.RESNET.SPATIAL_DILATIONS = [[1], [1], [1], [1]] - - -# ----------------------------------------------------------------------------- -# Nonlocal options -# ----------------------------------------------------------------------------- -_C.NONLOCAL = CfgNode() - -# Index of each stage and block to add nonlocal layers. -_C.NONLOCAL.LOCATION = [[[]], [[]], [[]], [[]]] - -# Number of group for nonlocal for each stage. -_C.NONLOCAL.GROUP = [[1], [1], [1], [1]] - -# Instatiation to use for non-local layer. -_C.NONLOCAL.INSTANTIATION = "dot_product" - - -# Size of pooling layers used in Non-Local. -_C.NONLOCAL.POOL = [ - # Res2 - [[1, 2, 2], [1, 2, 2]], - # Res3 - [[1, 2, 2], [1, 2, 2]], - # Res4 - [[1, 2, 2], [1, 2, 2]], - # Res5 - [[1, 2, 2], [1, 2, 2]], -] - -# ----------------------------------------------------------------------------- -# Model options -# ----------------------------------------------------------------------------- -_C.MODEL = CfgNode() - -# Model architecture. -_C.MODEL.ARCH = "slowfast" - -# Model name -_C.MODEL.MODEL_NAME = "SlowFast" - -# The number of classes to predict for the model. -_C.MODEL.NUM_CLASSES = 400 - -# Loss function. -_C.MODEL.LOSS_FUNC = "cross_entropy" - -_C.MODEL.MASK_WEIGHT = 100 - -_C.MODEL.CLASS_WEIGHT = 1 - -# Model architectures that has one single pathway. -_C.MODEL.SINGLE_PATHWAY_ARCH = ["c2d", "i3d", "slow"] - -# Model architectures that has multiple pathways. -_C.MODEL.MULTI_PATHWAY_ARCH = ["slowfast"] - -# Dropout rate before final projection in the backbone. -_C.MODEL.DROPOUT_RATE = 0.5 - -# The std to initialize the fc layer(s). -_C.MODEL.FC_INIT_STD = 0.01 - -# Activation layer for the output head. -_C.MODEL.HEAD_ACT = "softmax" - - -# ----------------------------------------------------------------------------- -# SlowFast options -# ----------------------------------------------------------------------------- -_C.SLOWFAST = CfgNode() - -# Corresponds to the inverse of the channel reduction ratio, $\beta$ between -# the Slow and Fast pathways. -_C.SLOWFAST.BETA_INV = 8 - -# Corresponds to the frame rate reduction ratio, $\alpha$ between the Slow and -# Fast pathways. -_C.SLOWFAST.ALPHA = 8 - -# Ratio of channel dimensions between the Slow and Fast pathways. -_C.SLOWFAST.FUSION_CONV_CHANNEL_RATIO = 2 - -# Kernel dimension used for fusing information from Fast pathway to Slow -# pathway. -_C.SLOWFAST.FUSION_KERNEL_SZ = 5 - - -# ----------------------------------------------------------------------------- -# Data options -# ----------------------------------------------------------------------------- -_C.DATA = CfgNode() - -# The path to the data directory. -_C.DATA.PATH_TO_DATA_DIR = "" - -_C.DATA.DATASET = "faceforensics" - -_C.DATA.MODE = "" - -_C.DATA.ADAPTIVE = False - -_C.DATA.SCALE = 1.0 -# The separator used between path and label. -_C.DATA.PATH_LABEL_SEPARATOR = " " - -# Video path prefix if any. -_C.DATA.PATH_PREFIX = "" - -# The spatial crop size of the input clip. -_C.DATA.CROP_SIZE = 224 - -# The number of frames of the input clip. -_C.DATA.NUM_FRAMES = 8 - -_C.DATA.NUM_FRAMES_RANGE = [1,2,3,4,5,6,7,8] - -# The video sampling rate of the input clip. -_C.DATA.SAMPLING_RATE = 8 - -# The mean value of the video raw pixels across the R G B channels. -_C.DATA.MEAN = [0.45, 0.45, 0.45] -# List of input frame channel dimensions. - -_C.DATA.INPUT_CHANNEL_NUM = [12, 12] - -# The std value of the video raw pixels across the R G B channels. -_C.DATA.STD = [0.225, 0.225, 0.225] - -# The spatial augmentation jitter scales for training. -_C.DATA.TRAIN_JITTER_SCALES = [256, 320] - -# The spatial crop size for training. -_C.DATA.TRAIN_CROP_SIZE = 224 - -# The spatial crop size for testing. -_C.DATA.TEST_CROP_SIZE = 256 - -# Input videos may has different fps, convert it to the target video fps before -# frame sampling. -_C.DATA.TARGET_FPS = 30 - -# Decoding backend, options include `pyav` or `torchvision` -_C.DATA.DECODING_BACKEND = "pyav" - -# if True, sample uniformly in [1 / max_scale, 1 / min_scale] and take a -# reciprocal to get the scale. If False, take a uniform sample from -# [min_scale, max_scale]. -_C.DATA.INV_UNIFORM_SAMPLE = False - -# If True, perform random horizontal flip on the video frames during training. -_C.DATA.RANDOM_FLIP = True - -# If True, calculdate the map as metric. -_C.DATA.MULTI_LABEL = False - -# Method to perform the ensemble, options include "sum" and "max". -_C.DATA.ENSEMBLE_METHOD = "sum" - -# If True, revert the default input channel (RBG <-> BGR). -_C.DATA.REVERSE_INPUT_CHANNEL = False - - -# ---------------------------------------------------------------------------- # -# Optimizer options -# ---------------------------------------------------------------------------- # -_C.SOLVER = CfgNode() - -# Base learning rate. -_C.SOLVER.BASE_LR = 0.1 - -# Learning rate policy (see utils/lr_policy.py for options and examples). -_C.SOLVER.LR_POLICY = "cosine" - -# Exponential decay factor. -_C.SOLVER.GAMMA = 0.1 - -# Step size for 'exp' and 'cos' policies (in epochs). -_C.SOLVER.STEP_SIZE = 1 - -# Steps for 'steps_' policies (in epochs). -_C.SOLVER.STEPS = [] - -# Learning rates for 'steps_' policies. -_C.SOLVER.LRS = [] - -# Maximal number of epochs. -_C.SOLVER.MAX_EPOCH = 300 - -# Momentum. -_C.SOLVER.MOMENTUM = 0.9 - -# Momentum dampening. -_C.SOLVER.DAMPENING = 0.0 - -# Nesterov momentum. -_C.SOLVER.NESTEROV = True - -# L2 regularization. -_C.SOLVER.WEIGHT_DECAY = 1e-4 - -# Start the warm up from SOLVER.BASE_LR * SOLVER.WARMUP_FACTOR. -_C.SOLVER.WARMUP_FACTOR = 0.1 - -# Gradually warm up the SOLVER.BASE_LR over this number of epochs. -_C.SOLVER.WARMUP_EPOCHS = 0.0 - -# The start learning rate of the warm up. -_C.SOLVER.WARMUP_START_LR = 0.01 - -# Optimization method. -_C.SOLVER.OPTIMIZING_METHOD = "sgd" - -_C.SOLVER.LR_STEP = 50000 - -_C.SOLVER.TOTAL_STEP = 200000 - -_C.SOLVER.FREEZE_STEP = 10000 - - -# ---------------------------------------------------------------------------- # -# Misc options -# ---------------------------------------------------------------------------- # - -# Number of GPUs to use (applies to both training and testing). -_C.NUM_GPUS = 1 - -# Number of machine to use for the job. -_C.NUM_SHARDS = 1 - -# The index of the current machine. -_C.SHARD_ID = 0 - -# Output basedir. -_C.OUTPUT_DIR = "./tmp" - -# train module -_C.TRAIN_MODULE= "train_unet_by_iter" - -# Note that non-determinism may still be present due to non-deterministic -# operator implementations in GPU operator libraries. -_C.RNG_SEED = 1 - -# Log period in iters. -_C.LOG_PERIOD = 10 - -# If True, log the model info. -_C.LOG_MODEL_INFO = True - -# Distributed backend. -_C.DIST_BACKEND = "nccl" - -# ---------------------------------------------------------------------------- # -# Benchmark options -# ---------------------------------------------------------------------------- # -_C.BENCHMARK = CfgNode() - -# Number of epochs for data loading benchmark. -_C.BENCHMARK.NUM_EPOCHS = 5 - -# Log period in iters for data loading benchmark. -_C.BENCHMARK.LOG_PERIOD = 100 - -# If True, shuffle dataloader for epoch during benchmark. -_C.BENCHMARK.SHUFFLE = True - - -# ---------------------------------------------------------------------------- # -# Common train/test data loader options -# ---------------------------------------------------------------------------- # -_C.DATA_LOADER = CfgNode() - -# Number of data loader workers per training process. -_C.DATA_LOADER.NUM_WORKERS = 8 - -# Load data to pinned host memory. -_C.DATA_LOADER.PIN_MEMORY = True - -# Enable multi thread decoding. -_C.DATA_LOADER.ENABLE_MULTI_THREAD_DECODE = False - - -# ---------------------------------------------------------------------------- # -# Detection options. -# ---------------------------------------------------------------------------- # -_C.DETECTION = CfgNode() - -# Whether enable video detection. -_C.DETECTION.ENABLE = False - -# Aligned version of RoI. More details can be found at slowfast/models/head_helper.py -_C.DETECTION.ALIGNED = True - -# Spatial scale factor. -_C.DETECTION.SPATIAL_SCALE_FACTOR = 16 - -# RoI tranformation resolution. -_C.DETECTION.ROI_XFORM_RESOLUTION = 7 - - -# ----------------------------------------------------------------------------- -# AVA Dataset options -# ----------------------------------------------------------------------------- -_C.AVA = CfgNode() - -# Directory path of frames. -_C.AVA.FRAME_DIR = "/mnt/fair-flash3-east/ava_trainval_frames.img/" - -# Directory path for files of frame lists. -_C.AVA.FRAME_LIST_DIR = ( - "/mnt/vol/gfsai-flash3-east/ai-group/users/haoqifan/ava/frame_list/" -) - -# Directory path for annotation files. -_C.AVA.ANNOTATION_DIR = ( - "/mnt/vol/gfsai-flash3-east/ai-group/users/haoqifan/ava/frame_list/" -) - -# Filenames of training samples list files. -_C.AVA.TRAIN_LISTS = ["train.csv"] - -# Filenames of test samples list files. -_C.AVA.TEST_LISTS = ["val.csv"] - -# Filenames of box list files for training. Note that we assume files which -# contains predicted boxes will have a suffix "predicted_boxes" in the -# filename. -_C.AVA.TRAIN_GT_BOX_LISTS = ["ava_train_v2.2.csv"] -_C.AVA.TRAIN_PREDICT_BOX_LISTS = [] - -# Filenames of box list files for test. -_C.AVA.TEST_PREDICT_BOX_LISTS = ["ava_val_predicted_boxes.csv"] - -# This option controls the score threshold for the predicted boxes to use. -_C.AVA.DETECTION_SCORE_THRESH = 0.9 - -# If use BGR as the format of input frames. -_C.AVA.BGR = False - -# Training augmentation parameters -# Whether to use color augmentation method. -_C.AVA.TRAIN_USE_COLOR_AUGMENTATION = False - -# Whether to only use PCA jitter augmentation when using color augmentation -# method (otherwise combine with color jitter method). -_C.AVA.TRAIN_PCA_JITTER_ONLY = True - -# Eigenvalues for PCA jittering. Note PCA is RGB based. -_C.AVA.TRAIN_PCA_EIGVAL = [0.225, 0.224, 0.229] - -# Eigenvectors for PCA jittering. -_C.AVA.TRAIN_PCA_EIGVEC = [ - [-0.5675, 0.7192, 0.4009], - [-0.5808, -0.0045, -0.8140], - [-0.5836, -0.6948, 0.4203], -] - -# Whether to do horizontal flipping during test. -_C.AVA.TEST_FORCE_FLIP = False - -# Whether to use full test set for validation split. -_C.AVA.FULL_TEST_ON_VAL = False - -# The name of the file to the ava label map. -_C.AVA.LABEL_MAP_FILE = "ava_action_list_v2.2_for_activitynet_2019.pbtxt" - -# The name of the file to the ava exclusion. -_C.AVA.EXCLUSION_FILE = "ava_val_excluded_timestamps_v2.2.csv" - -# The name of the file to the ava groundtruth. -_C.AVA.GROUNDTRUTH_FILE = "ava_val_v2.2.csv" - -# Backend to process image, includes `pytorch` and `cv2`. -_C.AVA.IMG_PROC_BACKEND = "cv2" - -# ---------------------------------------------------------------------------- # -# Multigrid training options -# See https://arxiv.org/abs/1912.00998 for details about multigrid training. -# ---------------------------------------------------------------------------- # -_C.MULTIGRID = CfgNode() - -# Multigrid training allows us to train for more epochs with fewer iterations. -# This hyperparameter specifies how many times more epochs to train. -# The default setting in paper trains for 1.5x more epochs than baseline. -_C.MULTIGRID.EPOCH_FACTOR = 1.5 - -# Enable short cycles. -_C.MULTIGRID.SHORT_CYCLE = False -# Short cycle additional spatial dimensions relative to the default crop size. -_C.MULTIGRID.SHORT_CYCLE_FACTORS = [0.5, 0.5 ** 0.5] - -_C.MULTIGRID.LONG_CYCLE = False -# (Temporal, Spatial) dimensions relative to the default shape. -_C.MULTIGRID.LONG_CYCLE_FACTORS = [ - (0.25, 0.5 ** 0.5), - (0.5, 0.5 ** 0.5), - (0.5, 1), - (1, 1), -] - -# While a standard BN computes stats across all examples in a GPU, -# for multigrid training we fix the number of clips to compute BN stats on. -# See https://arxiv.org/abs/1912.00998 for details. -_C.MULTIGRID.BN_BASE_SIZE = 8 - -# Multigrid training epochs are not proportional to actual training time or -# computations, so _C.TRAIN.EVAL_PERIOD leads to too frequent or rare -# evaluation. We use a multigrid-specific rule to determine when to evaluate: -# This hyperparameter defines how many times to evaluate a model per long -# cycle shape. -_C.MULTIGRID.EVAL_FREQ = 3 - -# No need to specify; Set automatically and used as global variables. -_C.MULTIGRID.LONG_CYCLE_SAMPLING_RATE = 0 -_C.MULTIGRID.DEFAULT_B = 0 -_C.MULTIGRID.DEFAULT_T = 0 -_C.MULTIGRID.DEFAULT_S = 0 - -# ----------------------------------------------------------------------------- -# Tensorboard Visualization Options -# ----------------------------------------------------------------------------- -_C.TENSORBOARD = CfgNode() - -# Log to summary writer, this will automatically. -# log loss, lr and metrics during train/eval. -_C.TENSORBOARD.ENABLE = False -# Provide path to prediction results for visualization. -# This is a pickle file of [prediction_tensor, label_tensor] -_C.TENSORBOARD.PREDICTIONS_PATH = "" -# Path to directory for tensorboard logs. -# Default to to cfg.OUTPUT_DIR/runs-{cfg.TRAIN.DATASET}. -_C.TENSORBOARD.LOG_DIR = "" -# Path to a json file providing class_name - id mapping -# in the format {"class_name1": id1, "class_name2": id2, ...}. -# This file must be provided to enable plotting confusion matrix -# by a subset or parent categories. -_C.TENSORBOARD.CLASS_NAMES_PATH = "" - -# Path to a json file for categories -> classes mapping -# in the format {"parent_class": ["child_class1", "child_class2",...], ...}. -_C.TENSORBOARD.CATEGORIES_PATH = "" - -# Config for confusion matrices visualization. -_C.TENSORBOARD.CONFUSION_MATRIX = CfgNode() -# Visualize confusion matrix. -_C.TENSORBOARD.CONFUSION_MATRIX.ENABLE = False -# Figure size of the confusion matrices plotted. -_C.TENSORBOARD.CONFUSION_MATRIX.FIGSIZE = [8, 8] -# Path to a subset of categories to visualize. -# File contains class names separated by newline characters. -_C.TENSORBOARD.CONFUSION_MATRIX.SUBSET_PATH = "" - -# Config for histogram visualization. -_C.TENSORBOARD.HISTOGRAM = CfgNode() -# Visualize histograms. -_C.TENSORBOARD.HISTOGRAM.ENABLE = False -# Path to a subset of classes to plot histograms. -# Class names must be separated by newline characters. -_C.TENSORBOARD.HISTOGRAM.SUBSET_PATH = "" -# Visualize top-k most predicted classes on histograms for each -# chosen true label. -_C.TENSORBOARD.HISTOGRAM.TOPK = 10 -# Figure size of the histograms plotted. -_C.TENSORBOARD.HISTOGRAM.FIGSIZE = [8, 8] - -# Config for layers' weights and activations visualization. -# _C.TENSORBOARD.ENABLE must be True. -_C.TENSORBOARD.MODEL_VIS = CfgNode() - -# If False, skip model visualization. -_C.TENSORBOARD.MODEL_VIS.ENABLE = False - -# If False, skip visualizing model weights. -_C.TENSORBOARD.MODEL_VIS.MODEL_WEIGHTS = False - -# If False, skip visualizing model activations. -_C.TENSORBOARD.MODEL_VIS.ACTIVATIONS = False - -# If False, skip visualizing input videos. -_C.TENSORBOARD.MODEL_VIS.INPUT_VIDEO = False - - -# List of strings containing data about layer names and their indexing to -# visualize weights and activations for. The indexing is meant for -# choosing a subset of activations outputed by a layer for visualization. -# If indexing is not specified, visualize all activations outputed by the layer. -# For each string, layer name and indexing is separated by whitespaces. -# e.g.: [layer1 1,2;1,2, layer2, layer3 150,151;3,4]; this means for each array `arr` -# along the batch dimension in `layer1`, we take arr[[1, 2], [1, 2]] -_C.TENSORBOARD.MODEL_VIS.LAYER_LIST = [] -# Top-k predictions to plot on videos -_C.TENSORBOARD.MODEL_VIS.TOPK_PREDS = 1 -# Colormap to for text boxes and bounding boxes colors -_C.TENSORBOARD.MODEL_VIS.COLORMAP = "Pastel2" -# Config for visualization video inputs with Grad-CAM. -# _C.TENSORBOARD.ENABLE must be True. -_C.TENSORBOARD.MODEL_VIS.GRAD_CAM = CfgNode() -# Whether to run visualization using Grad-CAM technique. -_C.TENSORBOARD.MODEL_VIS.GRAD_CAM.ENABLE = True -# CNN layers to use for Grad-CAM. The number of layers must be equal to -# number of pathway(s). -_C.TENSORBOARD.MODEL_VIS.GRAD_CAM.LAYER_LIST = [] -# If True, visualize Grad-CAM using true labels for each instances. -# If False, use the highest predicted class. -_C.TENSORBOARD.MODEL_VIS.GRAD_CAM.USE_TRUE_LABEL = False -# Colormap to for text boxes and bounding boxes colors -_C.TENSORBOARD.MODEL_VIS.GRAD_CAM.COLORMAP = "viridis" - -# Config for visualization for wrong prediction visualization. -# _C.TENSORBOARD.ENABLE must be True. -_C.TENSORBOARD.WRONG_PRED_VIS = CfgNode() -_C.TENSORBOARD.WRONG_PRED_VIS.ENABLE = False -# Folder tag to origanize model eval videos under. -_C.TENSORBOARD.WRONG_PRED_VIS.TAG = "Incorrectly classified videos." -# Subset of labels to visualize. Only wrong predictions with true labels -# within this subset is visualized. -_C.TENSORBOARD.WRONG_PRED_VIS.SUBSET_PATH = "" - - - -############### -_C.JITTER = CfgNode() - -_C.JITTER.ENABLE = False - -_C.JITTER.CONTINUS_METHODS=["blend_diff_person","blend_downsampled","blend_same_person"] -_C.JITTER.DISCONTINUS_METHODS=["light", "rotate", "skip"] - -_C.JITTER.STRONG_INNER_CLIP_MASK_JITTER= False - -# ---------------------------------------------------------------------------- # -# Demo options -# ---------------------------------------------------------------------------- # -_C.DEMO = CfgNode() - -# Run model in DEMO mode. -_C.DEMO.ENABLE = False - -# Path to a json file providing class_name - id mapping -# in the format {"class_name1": id1, "class_name2": id2, ...}. -_C.DEMO.LABEL_FILE_PATH = "" - -# Specify a camera device as input. This will be prioritized -# over input video if set. -# If -1, use input video instead. -_C.DEMO.WEBCAM = -1 - -# Path to input video for demo. -_C.DEMO.INPUT_VIDEO = "" -# Custom width for reading input video data. -_C.DEMO.DISPLAY_WIDTH = 0 -# Custom height for reading input video data. -_C.DEMO.DISPLAY_HEIGHT = 0 -# Path to Detectron2 object detection model configuration, -# only used for detection tasks. -_C.DEMO.DETECTRON2_CFG = "COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml" -# Path to Detectron2 object detection model pre-trained weights. -_C.DEMO.DETECTRON2_WEIGHTS = "detectron2://COCO-Detection/faster_rcnn_R_50_FPN_3x/137849458/model_final_280758.pkl" -# Threshold for choosing predicted bounding boxes by Detectron2. -_C.DEMO.DETECTRON2_THRESH = 0.9 -# Number of overlapping frames between 2 consecutive clips. -# Increase this number for more frequent action predictions. -# The number of overlapping frames cannot be larger than -# half of the sequence length `cfg.DATA.NUM_FRAMES * cfg.DATA.SAMPLING_RATE` -_C.DEMO.BUFFER_SIZE = 0 -# If specified, the visualized outputs will be written this a video file of -# this path. Otherwise, the visualized outputs will be displayed in a window. -_C.DEMO.OUTPUT_FILE = "" -# Frames per second rate for writing to output video file. -# If not set (-1), use fps rate from input file. -_C.DEMO.OUTPUT_FPS = -1 -# Input format from demo video reader ("RGB" or "BGR"). -_C.DEMO.INPUT_FORMAT = "BGR" -# Draw visualization frames in [keyframe_idx - CLIP_VIS_SIZE, keyframe_idx + CLIP_VIS_SIZE] inclusively. -_C.DEMO.CLIP_VIS_SIZE = 10 -# Number of processes to run video visualizer. -_C.DEMO.NUM_VIS_INSTANCES = 2 - -# Path to pre-computed predicted boxes -_C.DEMO.PREDS_BOXES = "" -# Whether to run in with multi-threaded video reader. -_C.DEMO.THREAD_ENABLE = False -# Take one clip for every `DEMO.NUM_CLIPS_SKIP` + 1 for prediction and visualization. -# This is used for fast demo speed by reducing the prediction/visualiztion frequency. -# If -1, take the most recent read clip for visualization. This mode is only supported -# if `DEMO.THREAD_ENABLE` is set to True. -_C.DEMO.NUM_CLIPS_SKIP = 0 -# Path to ground-truth boxes and labels (optional) -_C.DEMO.GT_BOXES = "" -# The starting second of the video w.r.t bounding boxes file. -_C.DEMO.STARTING_SECOND = 900 -# Frames per second of the input video/folder of images. -_C.DEMO.FPS = 30 -# Visualize with top-k predictions or predictions above certain threshold(s). -# Option: {"thres", "top-k"} -_C.DEMO.VIS_MODE = "thres" -# Threshold for common class names. -_C.DEMO.COMMON_CLASS_THRES = 0.7 -# Theshold for uncommon class names. This will not be -# used if `_C.DEMO.COMMON_CLASS_NAMES` is empty. -_C.DEMO.UNCOMMON_CLASS_THRES = 0.3 -# This is chosen based on distribution of examples in -# each classes in AVA dataset. -_C.DEMO.COMMON_CLASS_NAMES = [ - "watch (a person)", - "talk to (e.g., self, a person, a group)", - "listen to (a person)", - "touch (an object)", - "carry/hold (an object)", - "walk", - "sit", - "lie/sleep", - "bend/bow (at the waist)", -] -# Slow-motion rate for the visualization. The visualized portions of the -# video will be played `_C.DEMO.SLOWMO` times slower than usual speed. -_C.DEMO.SLOWMO = 1 - -# Add custom config with default values. -custom_config.add_custom_config(_C) - - -def _assert_and_infer_cfg(cfg): - # BN assertions. - if cfg.BN.USE_PRECISE_STATS: - assert cfg.BN.NUM_BATCHES_PRECISE >= 0 - # TRAIN assertions. - assert cfg.TRAIN.CHECKPOINT_TYPE in ["pytorch", "caffe2"] - assert cfg.TRAIN.BATCH_SIZE % cfg.NUM_GPUS == 0 - - # TEST assertions. - assert cfg.TEST.CHECKPOINT_TYPE in ["pytorch", "caffe2"] - assert cfg.TEST.BATCH_SIZE % cfg.NUM_GPUS == 0 - assert cfg.TEST.NUM_SPATIAL_CROPS == 3 - - # RESNET assertions. - assert cfg.RESNET.NUM_GROUPS > 0 - assert cfg.RESNET.WIDTH_PER_GROUP > 0 - assert cfg.RESNET.WIDTH_PER_GROUP % cfg.RESNET.NUM_GROUPS == 0 - - # General assertions. - assert cfg.SHARD_ID < cfg.NUM_SHARDS - return cfg - - -def get_cfg(): - """ - Get a copy of the default config. - """ - return _assert_and_infer_cfg(_C.clone()) diff --git a/video/pwtf-dvd/model_code/inference/slowfast/models/__init__.py b/video/pwtf-dvd/model_code/inference/slowfast/models/__init__.py deleted file mode 100644 index f82b3dc1e3af0dbabf4a3a6153e48b977eb1059e..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/models/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -from .build import MODEL_REGISTRY, build_model # noqa -from .custom_video_model_builder import * # noqa -from .video_model_builder import ResNet, SlowFast # noqa \ No newline at end of file diff --git a/video/pwtf-dvd/model_code/inference/slowfast/models/batchnorm_helper.py b/video/pwtf-dvd/model_code/inference/slowfast/models/batchnorm_helper.py deleted file mode 100644 index 4e52d50497d9c0a58e5ace0a2fde94b5418ef563..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/models/batchnorm_helper.py +++ /dev/null @@ -1,218 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""BatchNorm (BN) utility functions and custom batch-size BN implementations""" - -from functools import partial -import torch -import torch.distributed as dist -import torch.nn as nn -from torch.autograd.function import Function - -import slowfast.utils.distributed as du - - -def get_norm(cfg): - """ - Args: - cfg (CfgNode): model building configs, details are in the comments of - the config file. - Returns: - nn.Module: the normalization layer. - """ - if cfg.BN.NORM_TYPE == "batchnorm": - return nn.BatchNorm3d - elif cfg.BN.NORM_TYPE == "sub_batchnorm": - return partial(SubBatchNorm3d, num_splits=cfg.BN.NUM_SPLITS) - elif cfg.BN.NORM_TYPE == "sync_batchnorm": - return partial( - NaiveSyncBatchNorm3d, num_sync_devices=cfg.BN.NUM_SYNC_DEVICES - ) - else: - raise NotImplementedError( - "Norm type {} is not supported".format(cfg.BN.NORM_TYPE) - ) - - -class SubBatchNorm3d(nn.Module): - """ - The standard BN layer computes stats across all examples in a GPU. In some - cases it is desirable to compute stats across only a subset of examples - (e.g., in multigrid training https://arxiv.org/abs/1912.00998). - SubBatchNorm3d splits the batch dimension into N splits, and run BN on - each of them separately (so that the stats are computed on each subset of - examples (1/N of batch) independently. During evaluation, it aggregates - the stats from all splits into one BN. - """ - - def __init__(self, num_splits, **args): - """ - Args: - num_splits (int): number of splits. - args (list): other arguments. - """ - super(SubBatchNorm3d, self).__init__() - self.num_splits = num_splits - num_features = args["num_features"] - # Keep only one set of weight and bias. - if args.get("affine", True): - self.affine = True - args["affine"] = False - self.weight = torch.nn.Parameter(torch.ones(num_features)) - self.bias = torch.nn.Parameter(torch.zeros(num_features)) - else: - self.affine = False - self.bn = nn.BatchNorm3d(**args) - args["num_features"] = num_features * num_splits - self.split_bn = nn.BatchNorm3d(**args) - - def _get_aggregated_mean_std(self, means, stds, n): - """ - Calculate the aggregated mean and stds. - Args: - means (tensor): mean values. - stds (tensor): standard deviations. - n (int): number of sets of means and stds. - """ - mean = means.view(n, -1).sum(0) / n - std = ( - stds.view(n, -1).sum(0) / n - + ((means.view(n, -1) - mean) ** 2).view(n, -1).sum(0) / n - ) - return mean.detach(), std.detach() - - def aggregate_stats(self): - """ - Synchronize running_mean, and running_var. Call this before eval. - """ - if self.split_bn.track_running_stats: - ( - self.bn.running_mean.data, - self.bn.running_var.data, - ) = self._get_aggregated_mean_std( - self.split_bn.running_mean, - self.split_bn.running_var, - self.num_splits, - ) - - def forward(self, x): - if self.training: - n, c, t, h, w = x.shape - x = x.view(n // self.num_splits, c * self.num_splits, t, h, w) - x = self.split_bn(x) - x = x.view(n, c, t, h, w) - else: - x = self.bn(x) - if self.affine: - x = x * self.weight.view((-1, 1, 1, 1)) - x = x + self.bias.view((-1, 1, 1, 1)) - return x - - -class GroupGather(Function): - """ - GroupGather performs all gather on each of the local process/ GPU groups. - """ - - @staticmethod - def forward(ctx, input, num_sync_devices, num_groups): - """ - Perform forwarding, gathering the stats across different process/ GPU - group. - """ - ctx.num_sync_devices = num_sync_devices - ctx.num_groups = num_groups - - input_list = [ - torch.zeros_like(input) for k in range(du.get_local_size()) - ] - dist.all_gather( - input_list, input, async_op=False, group=du._LOCAL_PROCESS_GROUP - ) - - inputs = torch.stack(input_list, dim=0) - if num_groups > 1: - rank = du.get_local_rank() - group_idx = rank // num_sync_devices - inputs = inputs[ - group_idx - * num_sync_devices : (group_idx + 1) - * num_sync_devices - ] - inputs = torch.sum(inputs, dim=0) - return inputs - - @staticmethod - def backward(ctx, grad_output): - """ - Perform backwarding, gathering the gradients across different process/ GPU - group. - """ - grad_output_list = [ - torch.zeros_like(grad_output) for k in range(du.get_local_size()) - ] - dist.all_gather( - grad_output_list, - grad_output, - async_op=False, - group=du._LOCAL_PROCESS_GROUP, - ) - - grads = torch.stack(grad_output_list, dim=0) - if ctx.num_groups > 1: - rank = du.get_local_rank() - group_idx = rank // ctx.num_sync_devices - grads = grads[ - group_idx - * ctx.num_sync_devices : (group_idx + 1) - * ctx.num_sync_devices - ] - grads = torch.sum(grads, dim=0) - return grads, None, None - - -class NaiveSyncBatchNorm3d(nn.BatchNorm3d): - def __init__(self, num_sync_devices, **args): - """ - Naive version of Synchronized 3D BatchNorm. - Args: - num_sync_devices (int): number of device to sync. - args (list): other arguments. - """ - self.num_sync_devices = num_sync_devices - if self.num_sync_devices > 0: - assert du.get_local_size() % self.num_sync_devices == 0, ( - du.get_local_size(), - self.num_sync_devices, - ) - self.num_groups = du.get_local_size() // self.num_sync_devices - else: - self.num_sync_devices = du.get_local_size() - self.num_groups = 1 - super(NaiveSyncBatchNorm3d, self).__init__(**args) - - def forward(self, input): - if du.get_local_size() == 1 or not self.training: - return super().forward(input) - - assert input.shape[0] > 0, "SyncBatchNorm does not support empty inputs" - C = input.shape[1] - mean = torch.mean(input, dim=[0, 2, 3, 4]) - meansqr = torch.mean(input * input, dim=[0, 2, 3, 4]) - - vec = torch.cat([mean, meansqr], dim=0) - vec = GroupGather.apply(vec, self.num_sync_devices, self.num_groups) * ( - 1.0 / self.num_sync_devices - ) - - mean, meansqr = torch.split(vec, C) - var = meansqr - mean * mean - self.running_mean += self.momentum * (mean.detach() - self.running_mean) - self.running_var += self.momentum * (var.detach() - self.running_var) - - invstd = torch.rsqrt(var + self.eps) - scale = self.weight * invstd - bias = self.bias - mean * scale - scale = scale.reshape(1, -1, 1, 1, 1) - bias = bias.reshape(1, -1, 1, 1, 1) - return input * scale + bias diff --git a/video/pwtf-dvd/model_code/inference/slowfast/models/build.py b/video/pwtf-dvd/model_code/inference/slowfast/models/build.py deleted file mode 100644 index 8dd9cca224b3e77bb8c3cd899489358737d4cd35..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/models/build.py +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""Model construction functions.""" - -import torch -from fvcore.common.registry import Registry - -MODEL_REGISTRY = Registry("MODEL") -MODEL_REGISTRY.__doc__ = """ -Registry for video model. - -The registered object will be called with `obj(cfg)`. -The call should return a `torch.nn.Module` object. -""" - - -def build_model(cfg, gpu_id=None): - """ - Builds the video model. - Args: - cfg (configs): configs that contains the hyper-parameters to build the - backbone. Details can be seen in slowfast/config/defaults.py. - gpu_id (Optional[int]): specify the gpu index to build model. - """ - if torch.cuda.is_available(): - assert ( - cfg.NUM_GPUS <= torch.cuda.device_count() - ), "Cannot use more GPU devices than available" - else: - assert ( - cfg.NUM_GPUS == 0 - ), "Cuda is not available. Please set `NUM_GPUS: 0 for running on CPUs." - - # Construct the model - name = cfg.MODEL.MODEL_NAME - model = MODEL_REGISTRY.get(name)(cfg) - - if cfg.NUM_GPUS: - if gpu_id is None: - # Determine the GPU used by the current process - cur_device = torch.cuda.current_device() - else: - cur_device = gpu_id - # Transfer the model to the current GPU device - model = model.cuda(device=cur_device) - # Use multi-process data parallel model in the multi-gpu setting - if cfg.NUM_GPUS > 1: - # Make model replica operate on the current device - model = torch.nn.parallel.DistributedDataParallel( - module=model, device_ids=[cur_device], output_device=cur_device,find_unused_parameters=True - ) - return model diff --git a/video/pwtf-dvd/model_code/inference/slowfast/models/custom_video_model_builder.py b/video/pwtf-dvd/model_code/inference/slowfast/models/custom_video_model_builder.py deleted file mode 100644 index f261f67b95616b8582b10998a290611ee108b2a9..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/models/custom_video_model_builder.py +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - - -"""A More Flexible Video models.""" diff --git a/video/pwtf-dvd/model_code/inference/slowfast/models/head_helper.py b/video/pwtf-dvd/model_code/inference/slowfast/models/head_helper.py deleted file mode 100644 index df04b010430b6000005676d52174243383873d05..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/models/head_helper.py +++ /dev/null @@ -1,95 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""ResNe(X)t Head helper.""" - -import torch -import torch.nn as nn - -class ResNetBasicHead(nn.Module): - """ - ResNe(X)t 3D head. - This layer performs a fully-connected projection during training, when the - input size is 1x1x1. It performs a convolutional projection during testing - when the input size is larger than 1x1x1. If the inputs are from multiple - different pathways, the inputs will be concatenated after pooling. - """ - - def __init__( - self, - dim_in, - num_classes, - pool_size, - dropout_rate=0.0, - act_func="softmax", - ): - """ - The `__init__` method of any subclass should also contain these - arguments. - ResNetBasicHead takes p pathways as input where p in [1, infty]. - - Args: - dim_in (list): the list of channel dimensions of the p inputs to the - ResNetHead. - num_classes (int): the channel dimensions of the p outputs to the - ResNetHead. - pool_size (list): the list of kernel sizes of p spatial temporal - poolings, temporal pool kernel size, spatial pool kernel size, - spatial pool kernel size in order. - dropout_rate (float): dropout rate. If equal to 0.0, perform no - dropout. - act_func (string): activation function to use. 'softmax': applies - softmax on the output. 'sigmoid': applies sigmoid on the output. - """ - super(ResNetBasicHead, self).__init__() - assert ( - len({len(pool_size), len(dim_in)}) == 1 - ), "pathway dimensions are not consistent." - self.num_pathways = len(pool_size) - - for pathway in range(self.num_pathways): - if pool_size[pathway] is None: - avg_pool = nn.AdaptiveAvgPool3d((1, 1, 1)) - else: - avg_pool = nn.AvgPool3d(pool_size[pathway], stride=1) - self.add_module("pathway{}_avgpool".format(pathway), avg_pool) - - if dropout_rate > 0.0: - self.dropout = nn.Dropout(dropout_rate) - # Perform FC in a fully convolutional manner. The FC layer will be - # initialized with a different std comparing to convolutional layers. - self.projection = nn.Linear(sum(dim_in), num_classes, bias=True) - - # Softmax for evaluation and testing. - if act_func == "softmax": - self.act = nn.Softmax(dim=4) - elif act_func == "sigmoid": - self.act = nn.Sigmoid() - else: - raise NotImplementedError( - "{} is not supported as an activation" - "function.".format(act_func) - ) - - def forward(self, inputs): - assert ( - len(inputs) == self.num_pathways - ), "Input tensor does not contain {} pathway".format(self.num_pathways) - pool_out = [] - for pathway in range(self.num_pathways): - m = getattr(self, "pathway{}_avgpool".format(pathway)) - pool_out.append(m(inputs[pathway])) - x = torch.cat(pool_out, 1) - # (N, C, T, H, W) -> (N, T, H, W, C). - x = x.permute((0, 2, 3, 4, 1)) - # Perform dropout. - if hasattr(self, "dropout"): - x = self.dropout(x) - x = self.projection(x) - - # Performs fully convlutional inference. - # if not self.training: - # x = x.mean([1, 2, 3]) - x = self.act(x) - x = x.view(x.shape[0], -1) - return x diff --git a/video/pwtf-dvd/model_code/inference/slowfast/models/losses.py b/video/pwtf-dvd/model_code/inference/slowfast/models/losses.py deleted file mode 100644 index 7dda4eb19b2cf76275ba1778dc5f8730058a6c31..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/models/losses.py +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""Loss functions.""" - -import torch.nn as nn - -_LOSSES = { - "cross_entropy": nn.CrossEntropyLoss, - "bce": nn.BCELoss, - "bce_logit": nn.BCEWithLogitsLoss, -} - - -def get_loss_func(loss_name): - """ - Retrieve the loss given the loss name. - Args (int): - loss_name: the name of the loss to use. - """ - if loss_name not in _LOSSES.keys(): - raise NotImplementedError("Loss {} is not supported".format(loss_name)) - return _LOSSES[loss_name] diff --git a/video/pwtf-dvd/model_code/inference/slowfast/models/nonlocal_helper.py b/video/pwtf-dvd/model_code/inference/slowfast/models/nonlocal_helper.py deleted file mode 100644 index 6e68d05817256a66d0b6ecf0f96292446cf41270..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/models/nonlocal_helper.py +++ /dev/null @@ -1,148 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""Non-local helper""" - -import torch -import torch.nn as nn - - -class Nonlocal(nn.Module): - """ - Builds Non-local Neural Networks as a generic family of building - blocks for capturing long-range dependencies. Non-local Network - computes the response at a position as a weighted sum of the - features at all positions. This building block can be plugged into - many computer vision architectures. - More details in the paper: https://arxiv.org/pdf/1711.07971.pdf - """ - - def __init__( - self, - dim, - dim_inner, - pool_size=None, - instantiation="softmax", - zero_init_final_conv=False, - zero_init_final_norm=True, - norm_eps=1e-5, - norm_momentum=0.1, - norm_module=nn.BatchNorm3d, - ): - """ - Args: - dim (int): number of dimension for the input. - dim_inner (int): number of dimension inside of the Non-local block. - pool_size (list): the kernel size of spatial temporal pooling, - temporal pool kernel size, spatial pool kernel size, spatial - pool kernel size in order. By default pool_size is None, - then there would be no pooling used. - instantiation (string): supports two different instantiation method: - "dot_product": normalizing correlation matrix with L2. - "softmax": normalizing correlation matrix with Softmax. - zero_init_final_conv (bool): If true, zero initializing the final - convolution of the Non-local block. - zero_init_final_norm (bool): - If true, zero initializing the final batch norm of the Non-local - block. - norm_module (nn.Module): nn.Module for the normalization layer. The - default is nn.BatchNorm3d. - """ - super(Nonlocal, self).__init__() - self.dim = dim - self.dim_inner = dim_inner - self.pool_size = pool_size - self.instantiation = instantiation - self.use_pool = ( - False - if pool_size is None - else any((size > 1 for size in pool_size)) - ) - self.norm_eps = norm_eps - self.norm_momentum = norm_momentum - self._construct_nonlocal( - zero_init_final_conv, zero_init_final_norm, norm_module - ) - - def _construct_nonlocal( - self, zero_init_final_conv, zero_init_final_norm, norm_module - ): - # Three convolution heads: theta, phi, and g. - self.conv_theta = nn.Conv3d( - self.dim, self.dim_inner, kernel_size=1, stride=1, padding=0 - ) - self.conv_phi = nn.Conv3d( - self.dim, self.dim_inner, kernel_size=1, stride=1, padding=0 - ) - self.conv_g = nn.Conv3d( - self.dim, self.dim_inner, kernel_size=1, stride=1, padding=0 - ) - - # Final convolution output. - self.conv_out = nn.Conv3d( - self.dim_inner, self.dim, kernel_size=1, stride=1, padding=0 - ) - # Zero initializing the final convolution output. - self.conv_out.zero_init = zero_init_final_conv - - # TODO: change the name to `norm` - self.bn = norm_module( - num_features=self.dim, - eps=self.norm_eps, - momentum=self.norm_momentum, - ) - # Zero initializing the final bn. - self.bn.transform_final_bn = zero_init_final_norm - - # Optional to add the spatial-temporal pooling. - if self.use_pool: - self.pool = nn.MaxPool3d( - kernel_size=self.pool_size, - stride=self.pool_size, - padding=[0, 0, 0], - ) - - def forward(self, x): - x_identity = x - N, C, T, H, W = x.size() - - theta = self.conv_theta(x) - - # Perform temporal-spatial pooling to reduce the computation. - if self.use_pool: - x = self.pool(x) - - phi = self.conv_phi(x) - g = self.conv_g(x) - - theta = theta.view(N, self.dim_inner, -1) - phi = phi.view(N, self.dim_inner, -1) - g = g.view(N, self.dim_inner, -1) - - # (N, C, TxHxW) * (N, C, TxHxW) => (N, TxHxW, TxHxW). - theta_phi = torch.einsum("nct,ncp->ntp", (theta, phi)) - # For original Non-local paper, there are two main ways to normalize - # the affinity tensor: - # 1) Softmax normalization (norm on exp). - # 2) dot_product normalization. - if self.instantiation == "softmax": - # Normalizing the affinity tensor theta_phi before softmax. - theta_phi = theta_phi * (self.dim_inner ** -0.5) - theta_phi = nn.functional.softmax(theta_phi, dim=2) - elif self.instantiation == "dot_product": - spatial_temporal_dim = theta_phi.shape[2] - theta_phi = theta_phi / spatial_temporal_dim - else: - raise NotImplementedError( - "Unknown norm type {}".format(self.instantiation) - ) - - # (N, TxHxW, TxHxW) * (N, C, TxHxW) => (N, C, TxHxW). - theta_phi_g = torch.einsum("ntg,ncg->nct", (theta_phi, g)) - - # (N, C, TxHxW) => (N, C, T, H, W). - theta_phi_g = theta_phi_g.view(N, self.dim_inner, T, H, W) - - p = self.conv_out(theta_phi_g) - p = self.bn(p) - return x_identity + p diff --git a/video/pwtf-dvd/model_code/inference/slowfast/models/optimizer.py b/video/pwtf-dvd/model_code/inference/slowfast/models/optimizer.py deleted file mode 100644 index 130f2cebf994741bc45a6519f07c5f0740c106ac..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/models/optimizer.py +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""Optimizer.""" - -import torch - -import slowfast.utils.lr_policy as lr_policy - - -def construct_optimizer(model, cfg): - """ - Construct a stochastic gradient descent or ADAM optimizer with momentum. - Details can be found in: - Herbert Robbins, and Sutton Monro. "A stochastic approximation method." - and - Diederik P.Kingma, and Jimmy Ba. - "Adam: A Method for Stochastic Optimization." - - Args: - model (model): model to perform stochastic gradient descent - optimization or ADAM optimization. - cfg (config): configs of hyper-parameters of SGD or ADAM, includes base - learning rate, momentum, weight_decay, dampening, and etc. - """ - # Batchnorm parameters. - bn_params = [] - # Non-batchnorm parameters. - non_bn_parameters = [] - for name, p in model.named_parameters(): - if "bn" in name: - bn_params.append(p) - else: - non_bn_parameters.append(p) - # Apply different weight decay to Batchnorm and non-batchnorm parameters. - # In Caffe2 classification codebase the weight decay for batchnorm is 0.0. - # Having a different weight decay on batchnorm might cause a performance - # drop. - optim_params = [ - {"params": bn_params, "weight_decay": cfg.BN.WEIGHT_DECAY}, - {"params": non_bn_parameters, "weight_decay": cfg.SOLVER.WEIGHT_DECAY}, - ] - # Check all parameters will be passed into optimizer. - assert len(list(model.parameters())) == len(non_bn_parameters) + len( - bn_params - ), "parameter size does not match: {} + {} != {}".format( - len(non_bn_parameters), len(bn_params), len(list(model.parameters())) - ) - - if cfg.SOLVER.OPTIMIZING_METHOD == "sgd": - return torch.optim.SGD( - optim_params, - lr=cfg.SOLVER.BASE_LR, - momentum=cfg.SOLVER.MOMENTUM, - weight_decay=cfg.SOLVER.WEIGHT_DECAY, - dampening=cfg.SOLVER.DAMPENING, - nesterov=cfg.SOLVER.NESTEROV, - ) - elif cfg.SOLVER.OPTIMIZING_METHOD == "adam": - return torch.optim.Adam( - optim_params, - lr=cfg.SOLVER.BASE_LR, - betas=(0.9, 0.999), - weight_decay=cfg.SOLVER.WEIGHT_DECAY, - ) - else: - raise NotImplementedError( - "Does not support {} optimizer".format(cfg.SOLVER.OPTIMIZING_METHOD) - ) - - -def get_epoch_lr(cur_epoch, cfg): - """ - Retrieves the lr for the given epoch (as specified by the lr policy). - Args: - cfg (config): configs of hyper-parameters of ADAM, includes base - learning rate, betas, and weight decays. - cur_epoch (float): the number of epoch of the current training stage. - """ - return lr_policy.get_lr_at_epoch(cfg, cur_epoch) - -def get_iter_lr(cur_iter, cfg): - """ - Retrieves the lr for the given iter (as specified by the lr policy). - Args: - cfg (config): configs of hyper-parameters of ADAM, includes base - learning rate, betas, and weight decays. - cur_epoch (float): the number of epoch of the current training stage. - """ - lr=lr_policy.get_lr_at_iter(cfg, cur_iter) - - return lr - - -def set_lr(optimizer, new_lr): - """ - Sets the optimizer lr to the specified value. - Args: - optimizer (optim): the optimizer using to optimize the current network. - new_lr (float): the new learning rate to set. - """ - for param_group in optimizer.param_groups: - param_group["lr"] = new_lr diff --git a/video/pwtf-dvd/model_code/inference/slowfast/models/resnet_helper.py b/video/pwtf-dvd/model_code/inference/slowfast/models/resnet_helper.py deleted file mode 100644 index 3e10df460ce94d2c816ab546188412989a4ed628..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/models/resnet_helper.py +++ /dev/null @@ -1,649 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""Video models.""" - -import torch.nn as nn - -from slowfast.models.nonlocal_helper import Nonlocal - - -def get_trans_func(name): - """ - Retrieves the transformation module by name. - """ - trans_funcs = { - "bottleneck_transform": BottleneckTransform, - "basic_transform": BasicTransform, - "temporal_transform":TemporalTransform - } - assert ( - name in trans_funcs.keys() - ), "Transformation function '{}' not supported".format(name) - return trans_funcs[name] - - -class BasicTransform(nn.Module): - """ - Basic transformation: Tx3x3, 1x3x3, where T is the size of temporal kernel. - """ - - def __init__( - self, - dim_in, - dim_out, - temp_kernel_size, - stride, - dim_inner=None, - num_groups=1, - stride_1x1=None, - inplace_relu=True, - eps=1e-5, - bn_mmt=0.1, - norm_module=nn.BatchNorm3d, - ): - """ - Args: - dim_in (int): the channel dimensions of the input. - dim_out (int): the channel dimension of the output. - temp_kernel_size (int): the temporal kernel sizes of the first - convolution in the basic block. - stride (int): the stride of the bottleneck. - dim_inner (None): the inner dimension would not be used in - BasicTransform. - num_groups (int): number of groups for the convolution. Number of - group is always 1 for BasicTransform. - stride_1x1 (None): stride_1x1 will not be used in BasicTransform. - inplace_relu (bool): if True, calculate the relu on the original - input without allocating new memory. - eps (float): epsilon for batch norm. - bn_mmt (float): momentum for batch norm. Noted that BN momentum in - PyTorch = 1 - BN momentum in Caffe2. - norm_module (nn.Module): nn.Module for the normalization layer. The - default is nn.BatchNorm3d. - """ - super(BasicTransform, self).__init__() - self.temp_kernel_size = temp_kernel_size - self._inplace_relu = inplace_relu - self._eps = eps - self._bn_mmt = bn_mmt - self._construct(dim_in, dim_out, stride, norm_module) - - def _construct(self, dim_in, dim_out, stride, norm_module): - # Tx3x3, BN, ReLU. - self.a = nn.Conv3d( - dim_in, - dim_out, - kernel_size=[self.temp_kernel_size, 3, 3], - stride=[1, stride, stride], - padding=[int(self.temp_kernel_size // 2), 1, 1], - bias=False, - ) - self.a_bn = norm_module( - num_features=dim_out, eps=self._eps, momentum=self._bn_mmt - ) - self.a_relu = nn.ReLU(inplace=self._inplace_relu) - # 1x3x3, BN. - self.b = nn.Conv3d( - dim_out, - dim_out, - kernel_size=[1, 3, 3], - stride=[1, 1, 1], - padding=[0, 1, 1], - bias=False, - ) - self.b_bn = norm_module( - num_features=dim_out, eps=self._eps, momentum=self._bn_mmt - ) - - self.b_bn.transform_final_bn = True - - def forward(self, x): - x = self.a(x) - x = self.a_bn(x) - x = self.a_relu(x) - - x = self.b(x) - x = self.b_bn(x) - return x - -class TemporalTransform(nn.Module): - """ - Basic transformation: Tx3x3, 1x3x3, where T is the size of temporal kernel. - """ - - def __init__( - self, - dim_in, - dim_out, - temp_kernel_size, - stride, - dim_inner=None, - num_groups=1, - stride_1x1=None, - inplace_relu=True, - eps=1e-5, - bn_mmt=0.1, - norm_module=nn.BatchNorm3d, - dilation=1 - ): - """ - Args: - dim_in (int): the channel dimensions of the input. - dim_out (int): the channel dimension of the output. - temp_kernel_size (int): the temporal kernel sizes of the first - convolution in the basic block. - stride (int): the stride of the bottleneck. - dim_inner (None): the inner dimension would not be used in - BasicTransform. - num_groups (int): number of groups for the convolution. Number of - group is always 1 for BasicTransform. - stride_1x1 (None): stride_1x1 will not be used in BasicTransform. - inplace_relu (bool): if True, calculate the relu on the original - input without allocating new memory. - eps (float): epsilon for batch norm. - bn_mmt (float): momentum for batch norm. Noted that BN momentum in - PyTorch = 1 - BN momentum in Caffe2. - norm_module (nn.Module): nn.Module for the normalization layer. The - default is nn.BatchNorm3d. - """ - super(TemporalTransform, self).__init__() - self.temp_kernel_size = temp_kernel_size - self._inplace_relu = inplace_relu - self._eps = eps - self._bn_mmt = bn_mmt - self._construct(dim_in, dim_out, stride, norm_module) - - def _construct(self, dim_in, dim_out, stride, norm_module): - # Tx3x3, BN, ReLU. - self.a = nn.Conv3d( - dim_in, - dim_out, - kernel_size=[self.temp_kernel_size, 3, 3], - stride=[1, stride, stride], - padding=[int(self.temp_kernel_size // 2), 1, 1], - bias=False, - ) - self.a_bn = norm_module( - num_features=dim_out, eps=self._eps, momentum=self._bn_mmt - ) - self.a_relu = nn.ReLU(inplace=self._inplace_relu) - # 1x3x3, BN. - self.b = nn.Conv3d( - dim_out, - dim_out, - kernel_size=[1, 3, 3], - stride=[1, 1, 1], - padding=[0, 1, 1], - bias=False, - ) - self.b_bn = norm_module( - num_features=dim_out, eps=self._eps, momentum=self._bn_mmt - ) - - self.b_bn.transform_final_bn = True - - def forward(self, x): - x = self.a(x) - x = self.a_bn(x) - x = self.a_relu(x) - - x = self.b(x) - x = self.b_bn(x) - return x - - -class BottleneckTransform(nn.Module): - """ - Bottleneck transformation: Tx1x1, 1x3x3, 1x1x1, where T is the size of - temporal kernel. - """ - - def __init__( - self, - dim_in, - dim_out, - temp_kernel_size, - stride, - dim_inner, - num_groups, - stride_1x1=False, - inplace_relu=True, - eps=1e-5, - bn_mmt=0.1, - dilation=1, - norm_module=nn.BatchNorm3d, - ): - """ - Args: - dim_in (int): the channel dimensions of the input. - dim_out (int): the channel dimension of the output. - temp_kernel_size (int): the temporal kernel sizes of the first - convolution in the bottleneck. - stride (int): the stride of the bottleneck. - dim_inner (int): the inner dimension of the block. - num_groups (int): number of groups for the convolution. num_groups=1 - is for standard ResNet like networks, and num_groups>1 is for - ResNeXt like networks. - stride_1x1 (bool): if True, apply stride to 1x1 conv, otherwise - apply stride to the 3x3 conv. - inplace_relu (bool): if True, calculate the relu on the original - input without allocating new memory. - eps (float): epsilon for batch norm. - bn_mmt (float): momentum for batch norm. Noted that BN momentum in - PyTorch = 1 - BN momentum in Caffe2. - dilation (int): size of dilation. - norm_module (nn.Module): nn.Module for the normalization layer. The - default is nn.BatchNorm3d. - """ - super(BottleneckTransform, self).__init__() - self.temp_kernel_size = temp_kernel_size - self._inplace_relu = inplace_relu - self._eps = eps - self._bn_mmt = bn_mmt - self._stride_1x1 = stride_1x1 - self._construct( - dim_in, - dim_out, - stride, - dim_inner, - num_groups, - dilation, - norm_module, - ) - - def _construct( - self, - dim_in, - dim_out, - stride, - dim_inner, - num_groups, - dilation, - norm_module, - ): - (str1x1, str3x3) = (stride, 1) if self._stride_1x1 else (1, stride) - - # Tx1x1, BN, ReLU. - self.a = nn.Conv3d( - dim_in, - dim_inner, - kernel_size=[self.temp_kernel_size, 1, 1], - stride=[1, str1x1, str1x1], - padding=[int(self.temp_kernel_size // 2), 0, 0], - bias=False, - ) - self.a_bn = norm_module( - num_features=dim_inner, eps=self._eps, momentum=self._bn_mmt - ) - self.a_relu = nn.ReLU(inplace=self._inplace_relu) - - # 1x3x3, BN, ReLU. - self.b = nn.Conv3d( - dim_inner, - dim_inner, - [1, 3, 3], - stride=[1, str3x3, str3x3], - padding=[0, dilation, dilation], - groups=num_groups, - bias=False, - dilation=[1, dilation, dilation], - ) - self.b_bn = norm_module( - num_features=dim_inner, eps=self._eps, momentum=self._bn_mmt - ) - self.b_relu = nn.ReLU(inplace=self._inplace_relu) - - # 1x1x1, BN. - self.c = nn.Conv3d( - dim_inner, - dim_out, - kernel_size=[1, 1, 1], - stride=[1, 1, 1], - padding=[0, 0, 0], - bias=False, - ) - self.c_bn = norm_module( - num_features=dim_out, eps=self._eps, momentum=self._bn_mmt - ) - self.c_bn.transform_final_bn = True - - def forward(self, x): - # Explicitly forward every layer. - # Branch2a. - x = self.a(x) - x = self.a_bn(x) - x = self.a_relu(x) - - # Branch2b. - x = self.b(x) - x = self.b_bn(x) - x = self.b_relu(x) - - # Branch2c - x = self.c(x) - x = self.c_bn(x) - return x - - -class ResBlock(nn.Module): - """ - Residual block. - """ - - def __init__( - self, - dim_in, - dim_out, - temp_kernel_size, - stride, - trans_func, - dim_inner, - num_groups=1, - stride_1x1=False, - inplace_relu=True, # default :: False - # ################### Fixed by TH for training FT############################### - eps=1e-5, - bn_mmt=0.1, - dilation=1, - norm_module=nn.BatchNorm3d, - ): - """ - ResBlock class constructs redisual blocks. More details can be found in: - Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. - "Deep residual learning for image recognition." - https://arxiv.org/abs/1512.03385 - Args: - dim_in (int): the channel dimensions of the input. - dim_out (int): the channel dimension of the output. - temp_kernel_size (int): the temporal kernel sizes of the middle - convolution in the bottleneck. - stride (int): the stride of the bottleneck. - trans_func (string): transform function to be used to construct the - bottleneck. - dim_inner (int): the inner dimension of the block. - num_groups (int): number of groups for the convolution. num_groups=1 - is for standard ResNet like networks, and num_groups>1 is for - ResNeXt like networks. - stride_1x1 (bool): if True, apply stride to 1x1 conv, otherwise - apply stride to the 3x3 conv. - inplace_relu (bool): calculate the relu on the original input - without allocating new memory. - eps (float): epsilon for batch norm. - bn_mmt (float): momentum for batch norm. Noted that BN momentum in - PyTorch = 1 - BN momentum in Caffe2. - dilation (int): size of dilation. - norm_module (nn.Module): nn.Module for the normalization layer. The - default is nn.BatchNorm3d. - """ - super(ResBlock, self).__init__() - self._inplace_relu = inplace_relu - self._eps = eps - self._bn_mmt = bn_mmt - self._construct( - dim_in, - dim_out, - temp_kernel_size, - stride, - trans_func, - dim_inner, - num_groups, - stride_1x1, - inplace_relu, - dilation, - norm_module, - ) - - def _construct( - self, - dim_in, - dim_out, - temp_kernel_size, - stride, - trans_func, - dim_inner, - num_groups, - stride_1x1, - inplace_relu, - dilation, - norm_module, - ): - # Use skip connection with projection if dim or res change. - if (dim_in != dim_out) or (stride != 1): - self.branch1 = nn.Conv3d( - dim_in, - dim_out, - kernel_size=1, - stride=[1, stride, stride], - padding=0, - bias=False, - dilation=1, - ) - self.branch1_bn = norm_module( - num_features=dim_out, eps=self._eps, momentum=self._bn_mmt - ) - self.branch2 = trans_func( - dim_in, - dim_out, - temp_kernel_size, - stride, - dim_inner, - num_groups, - stride_1x1=stride_1x1, - inplace_relu=inplace_relu, - dilation=dilation, - norm_module=norm_module, - ) - self.relu = nn.ReLU(self._inplace_relu) - - def forward(self, x): - if hasattr(self, "branch1"): - x = self.branch1_bn(self.branch1(x)) + self.branch2(x) - else: - x = x + self.branch2(x) - - x = self.relu(x) - return x - - -class ResStage(nn.Module): - """ - Stage of 3D ResNet. It expects to have one or more tensors as input for - single pathway (C2D, I3D, Slow), and multi-pathway (SlowFast) cases. - More details can be found here: - - Christoph Feichtenhofer, Haoqi Fan, Jitendra Malik, and Kaiming He. - "SlowFast networks for video recognition." - https://arxiv.org/pdf/1812.03982.pdf - """ - - def __init__( - self, - dim_in, - dim_out, - stride, - temp_kernel_sizes, - num_blocks, - dim_inner, - num_groups, - num_block_temp_kernel, - nonlocal_inds, - nonlocal_group, - nonlocal_pool, - dilation, - instantiation="softmax", - trans_func_name="bottleneck_transform", - stride_1x1=False, - inplace_relu=True, ## Fixed by TH - norm_module=nn.BatchNorm3d, - ): - """ - The `__init__` method of any subclass should also contain these arguments. - ResStage builds p streams, where p can be greater or equal to one. - Args: - dim_in (list): list of p the channel dimensions of the input. - Different channel dimensions control the input dimension of - different pathways. - dim_out (list): list of p the channel dimensions of the output. - Different channel dimensions control the input dimension of - different pathways. - temp_kernel_sizes (list): list of the p temporal kernel sizes of the - convolution in the bottleneck. Different temp_kernel_sizes - control different pathway. - stride (list): list of the p strides of the bottleneck. Different - stride control different pathway. - num_blocks (list): list of p numbers of blocks for each of the - pathway. - dim_inner (list): list of the p inner channel dimensions of the - input. Different channel dimensions control the input dimension - of different pathways. - num_groups (list): list of number of p groups for the convolution. - num_groups=1 is for standard ResNet like networks, and - num_groups>1 is for ResNeXt like networks. - num_block_temp_kernel (list): extent the temp_kernel_sizes to - num_block_temp_kernel blocks, then fill temporal kernel size - of 1 for the rest of the layers. - nonlocal_inds (list): If the tuple is empty, no nonlocal layer will - be added. If the tuple is not empty, add nonlocal layers after - the index-th block. - dilation (list): size of dilation for each pathway. - nonlocal_group (list): list of number of p nonlocal groups. Each - number controls how to fold temporal dimension to batch - dimension before applying nonlocal transformation. - https://github.com/facebookresearch/video-nonlocal-net. - instantiation (string): different instantiation for nonlocal layer. - Supports two different instantiation method: - "dot_product": normalizing correlation matrix with L2. - "softmax": normalizing correlation matrix with Softmax. - trans_func_name (string): name of the the transformation function apply - on the network. - norm_module (nn.Module): nn.Module for the normalization layer. The - default is nn.BatchNorm3d. - """ - super(ResStage, self).__init__() - assert all( - ( - num_block_temp_kernel[i] <= num_blocks[i] - for i in range(len(temp_kernel_sizes)) - ) - ) - self.num_blocks = num_blocks - self.nonlocal_group = nonlocal_group - self.temp_kernel_sizes = [ - (temp_kernel_sizes[i] * num_blocks[i])[: num_block_temp_kernel[i]] - + [1] * (num_blocks[i] - num_block_temp_kernel[i]) - for i in range(len(temp_kernel_sizes)) - ] - assert ( - len( - { - len(dim_in), - len(dim_out), - len(temp_kernel_sizes), - len(stride), - len(num_blocks), - len(dim_inner), - len(num_groups), - len(num_block_temp_kernel), - len(nonlocal_inds), - len(nonlocal_group), - } - ) - == 1 - ) - self.num_pathways = len(self.num_blocks) - self._construct( - dim_in, - dim_out, - stride, - dim_inner, - num_groups, - trans_func_name, - stride_1x1, - inplace_relu, - nonlocal_inds, - nonlocal_pool, - instantiation, - dilation, - norm_module, - ) - - def _construct( - self, - dim_in, - dim_out, - stride, - dim_inner, - num_groups, - trans_func_name, - stride_1x1, - inplace_relu, - nonlocal_inds, - nonlocal_pool, - instantiation, - dilation, - norm_module, - ): - for pathway in range(self.num_pathways): - for i in range(self.num_blocks[pathway]): - # Retrieve the transformation function. - trans_func = get_trans_func(trans_func_name) - # Construct the block. - res_block = ResBlock( - dim_in[pathway] if i == 0 else dim_out[pathway], - dim_out[pathway], - self.temp_kernel_sizes[pathway][i], - stride[pathway] if i == 0 else 1, - trans_func, - dim_inner[pathway], - num_groups[pathway], - stride_1x1=stride_1x1, - inplace_relu=inplace_relu, - dilation=dilation[pathway], - norm_module=norm_module, - ) - self.add_module("pathway{}_res{}".format(pathway, i), res_block) - if i in nonlocal_inds[pathway]: - nln = Nonlocal( - dim_out[pathway], - dim_out[pathway] // 2, - nonlocal_pool[pathway], - instantiation=instantiation, - norm_module=norm_module, - ) - self.add_module( - "pathway{}_nonlocal{}".format(pathway, i), nln - ) - - def forward(self, inputs): - output = [] - for pathway in range(self.num_pathways): - x = inputs[pathway] - for i in range(self.num_blocks[pathway]): - m = getattr(self, "pathway{}_res{}".format(pathway, i)) - x = m(x) - if hasattr(self, "pathway{}_nonlocal{}".format(pathway, i)): - nln = getattr( - self, "pathway{}_nonlocal{}".format(pathway, i) - ) - b, c, t, h, w = x.shape - if self.nonlocal_group[pathway] > 1: - # Fold temporal dimension into batch dimension. - x = x.permute(0, 2, 1, 3, 4) - x = x.reshape( - b * self.nonlocal_group[pathway], - t // self.nonlocal_group[pathway], - c, - h, - w, - ) - x = x.permute(0, 2, 1, 3, 4) - x = nln(x) - if self.nonlocal_group[pathway] > 1: - # Fold back to temporal dimension. - x = x.permute(0, 2, 1, 3, 4) - x = x.reshape(b, t, c, h, w) - x = x.permute(0, 2, 1, 3, 4) - output.append(x) - - return output diff --git a/video/pwtf-dvd/model_code/inference/slowfast/models/stem_helper.py b/video/pwtf-dvd/model_code/inference/slowfast/models/stem_helper.py deleted file mode 100644 index 481977b15a13edf54bfdb17fd3627b6657d56262..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/models/stem_helper.py +++ /dev/null @@ -1,178 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""ResNe(X)t 3D stem helper.""" - -import torch.nn as nn - - -class VideoModelStem(nn.Module): - """ - Video 3D stem module. Provides stem operations of Conv, BN, ReLU, MaxPool - on input data tensor for one or multiple pathways. - """ - - def __init__( - self, - dim_in, - dim_out, - kernel, - stride, - padding, - inplace_relu=True, - eps=1e-5, - bn_mmt=0.1, - norm_module=nn.BatchNorm3d, - ): - """ - The `__init__` method of any subclass should also contain these - arguments. List size of 1 for single pathway models (C2D, I3D, Slow - and etc), list size of 2 for two pathway models (SlowFast). - - Args: - dim_in (list): the list of channel dimensions of the inputs. - dim_out (list): the output dimension of the convolution in the stem - layer. - kernel (list): the kernels' size of the convolutions in the stem - layers. Temporal kernel size, height kernel size, width kernel - size in order. - stride (list): the stride sizes of the convolutions in the stem - layer. Temporal kernel stride, height kernel size, width kernel - size in order. - padding (list): the paddings' sizes of the convolutions in the stem - layer. Temporal padding size, height padding size, width padding - size in order. - inplace_relu (bool): calculate the relu on the original input - without allocating new memory. - eps (float): epsilon for batch norm. - bn_mmt (float): momentum for batch norm. Noted that BN momentum in - PyTorch = 1 - BN momentum in Caffe2. - norm_module (nn.Module): nn.Module for the normalization layer. The - default is nn.BatchNorm3d. - """ - super(VideoModelStem, self).__init__() - - assert ( - len( - { - len(dim_in), - len(dim_out), - len(kernel), - len(stride), - len(padding), - } - ) - == 1 - ), "Input pathway dimensions are not consistent." - self.num_pathways = len(dim_in) - self.kernel = kernel - self.stride = stride - self.padding = padding - self.inplace_relu = inplace_relu - self.eps = eps - self.bn_mmt = bn_mmt - # Construct the stem layer. - self._construct_stem(dim_in, dim_out, norm_module) - - def _construct_stem(self, dim_in, dim_out, norm_module): - for pathway in range(len(dim_in)): - stem = ResNetBasicStem( - dim_in[pathway], - dim_out[pathway], - self.kernel[pathway], - self.stride[pathway], - self.padding[pathway], - self.inplace_relu, - self.eps, - self.bn_mmt, - norm_module, - ) - self.add_module("pathway{}_stem".format(pathway), stem) - - def forward(self, x): - assert ( - len(x) == self.num_pathways - ), "Input tensor does not contain {} pathway".format(self.num_pathways) - for pathway in range(len(x)): - m = getattr(self, "pathway{}_stem".format(pathway)) - x[pathway] = m(x[pathway]) - return x - - -class ResNetBasicStem(nn.Module): - """ - ResNe(X)t 3D stem module. - Performs spatiotemporal Convolution, BN, and Relu following by a - spatiotemporal pooling. - """ - - def __init__( - self, - dim_in, - dim_out, - kernel, - stride, - padding, - inplace_relu=True, - eps=1e-5, - bn_mmt=0.1, - norm_module=nn.BatchNorm3d, - ): - """ - The `__init__` method of any subclass should also contain these arguments. - - Args: - dim_in (int): the channel dimension of the input. Normally 3 is used - for rgb input, and 2 or 3 is used for optical flow input. - dim_out (int): the output dimension of the convolution in the stem - layer. - kernel (list): the kernel size of the convolution in the stem layer. - temporal kernel size, height kernel size, width kernel size in - order. - stride (list): the stride size of the convolution in the stem layer. - temporal kernel stride, height kernel size, width kernel size in - order. - padding (int): the padding size of the convolution in the stem - layer, temporal padding size, height padding size, width - padding size in order. - inplace_relu (bool): calculate the relu on the original input - without allocating new memory. - eps (float): epsilon for batch norm. - bn_mmt (float): momentum for batch norm. Noted that BN momentum in - PyTorch = 1 - BN momentum in Caffe2. - norm_module (nn.Module): nn.Module for the normalization layer. The - default is nn.BatchNorm3d. - """ - super(ResNetBasicStem, self).__init__() - self.kernel = kernel - self.stride = stride - self.padding = padding - self.inplace_relu = inplace_relu - self.eps = eps - self.bn_mmt = bn_mmt - # Construct the stem layer. - self._construct_stem(dim_in, dim_out, norm_module) - - def _construct_stem(self, dim_in, dim_out, norm_module): - self.conv = nn.Conv3d( - dim_in, - dim_out, - self.kernel, - stride=self.stride, - padding=self.padding, - bias=False, - ) - self.bn = norm_module( - num_features=dim_out, eps=self.eps, momentum=self.bn_mmt - ) - self.relu = nn.ReLU(self.inplace_relu) - self.pool_layer = nn.MaxPool3d( - kernel_size=[1, 3, 3], stride=[1, 2, 2], padding=[0, 1, 1] - ) - - def forward(self, x): - x = self.conv(x) - x = self.bn(x) - x = self.relu(x) - x = self.pool_layer(x) - return x diff --git a/video/pwtf-dvd/model_code/inference/slowfast/models/unet_helper.py b/video/pwtf-dvd/model_code/inference/slowfast/models/unet_helper.py deleted file mode 100644 index 36b7202cd1936a433b193017f6c363e5dd317b4f..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/models/unet_helper.py +++ /dev/null @@ -1,157 +0,0 @@ -InPlaceABN = None -from torch import nn -import torch.nn.functional as F - - -class Conv3dReLU(nn.Sequential): - def __init__( - self, - in_channels, - out_channels, - kernel_size, - padding=0, - stride=1, - use_batchnorm=True, - ): - - if use_batchnorm == "inplace" and InPlaceABN is None: - raise RuntimeError( - "In order to use `use_batchnorm='inplace'` inplace_abn package must be installed. " - + "To install see: https://github.com/mapillary/inplace_abn" - ) - - conv = nn.Conv3d( - in_channels, - out_channels, - kernel_size, - stride=stride, - padding=padding, - bias=not (use_batchnorm), - ) - relu = nn.ReLU(inplace=True) - - if use_batchnorm == "inplace": - bn = InPlaceABN(out_channels, activation="leaky_relu", activation_param=0.0) - relu = nn.Identity() - - elif use_batchnorm and use_batchnorm != "inplace": - bn = nn.BatchNorm3d(out_channels) - - else: - bn = nn.Identity() - - super(Conv3dReLU, self).__init__(conv, bn, relu) - - -class DecoderBlock(nn.Module): - def __init__( - self, in_channels, skip_channels, out_channels, use_batchnorm=True, - ): - super().__init__() - self.conv1 = Conv3dReLU( - in_channels + skip_channels, - out_channels, - kernel_size=3, - padding=1, - use_batchnorm=use_batchnorm, - ) - - self.conv2 = Conv3dReLU( - out_channels, - out_channels, - kernel_size=3, - padding=1, - use_batchnorm=use_batchnorm, - ) - - def forward(self, x): - x = self.conv1(x) - x = self.conv2(x) - return x - - -class LightDecoderBlock(nn.Module): - def __init__( - self, in_channels, skip_channels, out_channels, use_batchnorm=True, - ): - super().__init__() - self.conv1 = Conv3dReLU( - in_channels + skip_channels, - out_channels, - kernel_size=3, - padding=1, - use_batchnorm=use_batchnorm, - ) - - def forward(self, x): - x = self.conv1(x) - return x - - -def freeze_net(model: nn.Module, freeze_prefixs): - flag = False - for name, param in model.named_parameters(): - items = name.split(".") - if items[0] == "module": - prefix = items[1] - else: - prefix = items[0] - if prefix in freeze_prefixs: - if param.requires_grad is True: - param.requires_grad = False - flag = True - # print("freeze",name) - - assert flag - - -def unfreeze_net(model: nn.Module): - for name, param in model.named_parameters(): - param.requires_grad = True - - -from .resnet_helper import ResBlock, get_trans_func - - -class ResDecoderBlock(nn.Module): - def __init__( - self, in_channels, skip_channels, out_channels, use_batchnorm=True, - ): - super().__init__() - trans_func = get_trans_func("bottleneck_transform") - self.conv1 = ResBlock( - in_channels + skip_channels, - out_channels, - 3, - 1, - trans_func, - out_channels//2, - num_groups=1, - stride_1x1=False, - inplace_relu=True, - eps=1e-5, - bn_mmt=0.1, - dilation=1, - norm_module=nn.BatchNorm3d, - ) - - self.conv2 = ResBlock( - out_channels, - out_channels, - 3, - 1, - trans_func, - out_channels//2, - num_groups=1, - stride_1x1=False, - inplace_relu=True, - eps=1e-5, - bn_mmt=0.1, - dilation=1, - norm_module=nn.BatchNorm3d, - ) - - def forward(self, x): - x = self.conv1(x) - x = self.conv2(x) - return x diff --git a/video/pwtf-dvd/model_code/inference/slowfast/models/video_model_builder.py b/video/pwtf-dvd/model_code/inference/slowfast/models/video_model_builder.py deleted file mode 100644 index 9a60fc57ccb7c2a322c2a43bc738650b97d7a958..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/models/video_model_builder.py +++ /dev/null @@ -1,2772 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""Video models.""" - -import torch -import torch.nn as nn -import copy - -import slowfast.utils.weight_init_helper as init_helper -from slowfast.models.batchnorm_helper import get_norm - -from . import head_helper, resnet_helper, stem_helper -from .build import MODEL_REGISTRY - -# Number of blocks for different stages given the model depth. -_MODEL_STAGE_DEPTH = {18:(2,2,2,2),50: (3, 4, 6, 3), 101: (3, 4, 23, 3)} - -# Basis of temporal kernel sizes for each of the stage. -_TEMPORAL_KERNEL_BASIS = { - "c2d": [ - [[1]], # conv1 temporal kernel. - [[1]], # res2 temporal kernel. - [[1]], # res3 temporal kernel. - [[1]], # res4 temporal kernel. - [[1]], # res5 temporal kernel. - ], - "c2d_nopool": [ - [[1]], # conv1 temporal kernel. - [[1]], # res2 temporal kernel. - [[1]], # res3 temporal kernel. - [[1]], # res4 temporal kernel. - [[1]], # res5 temporal kernel. - ], - "i3d": [ - [[5]], # conv1 temporal kernel. - [[3]], # res2 temporal kernel. - [[3, 1]], # res3 temporal kernel. - [[3, 1]], # res4 temporal kernel. - [[1, 3]], # res5 temporal kernel. - ], - "r3d_18": [ - [[3]], # conv1 temporal kernel. - [[3]], # res2 temporal kernel. - [[3, 1]], # res3 temporal kernel. - [[3, 1]], # res4 temporal kernel. - [[1, 3]], # res5 temporal kernel. - ], - "i3d_nopool": [ - [[5]], # conv1 temporal kernel. - [[3]], # res2 temporal kernel. - [[3, 1]], # res3 temporal kernel. - [[3, 1]], # res4 temporal kernel. - [[1, 3]], # res5 temporal kernel. - ], - "slow": [ - [[1]], # conv1 temporal kernel. - [[1]], # res2 temporal kernel. - [[1]], # res3 temporal kernel. - [[3]], # res4 temporal kernel. - [[3]], # res5 temporal kernel. - ], - "slowfast": [ - [[1], [5]], # conv1 temporal kernel for slow and fast pathway. - [[1], [3]], # res2 temporal kernel for slow and fast pathway. - [[1], [3]], # res3 temporal kernel for slow and fast pathway. - [[3], [3]], # res4 temporal kernel for slow and fast pathway. - [[3], [3]], # res5 temporal kernel for slow and fast pathway. - ], -} - -_POOL1 = { - "c2d": [[2, 1, 1]], - "c2d_nopool": [[1, 1, 1]], - "i3d": [[2, 1, 1]], - "r3d_18": [[2, 1, 1]], - "i3d_nopool": [[1, 1, 1]], - "slow": [[1, 1, 1]], - "slowfast": [[1, 1, 1], [1, 1, 1]], -} - - - - -class FuseFastToSlow(nn.Module): - """ - Fuses the information from the Fast pathway to the Slow pathway. Given the - tensors from Slow pathway and Fast pathway, fuse information from Fast to - Slow, then return the fused tensors from Slow and Fast pathway in order. - """ - - def __init__( - self, - dim_in, - fusion_conv_channel_ratio, - fusion_kernel, - alpha, - eps=1e-5, - bn_mmt=0.1, - inplace_relu=True, - norm_module=nn.BatchNorm3d, - ): - """ - Args: - dim_in (int): the channel dimension of the input. - fusion_conv_channel_ratio (int): channel ratio for the convolution - used to fuse from Fast pathway to Slow pathway. - fusion_kernel (int): kernel size of the convolution used to fuse - from Fast pathway to Slow pathway. - alpha (int): the frame rate ratio between the Fast and Slow pathway. - eps (float): epsilon for batch norm. - bn_mmt (float): momentum for batch norm. Noted that BN momentum in - PyTorch = 1 - BN momentum in Caffe2. - inplace_relu (bool): if True, calculate the relu on the original - input without allocating new memory. - norm_module (nn.Module): nn.Module for the normalization layer. The - default is nn.BatchNorm3d. - """ - super(FuseFastToSlow, self).__init__() - self.conv_f2s = nn.Conv3d( - dim_in, - dim_in * fusion_conv_channel_ratio, - kernel_size=[fusion_kernel, 1, 1], - stride=[alpha, 1, 1], - padding=[fusion_kernel // 2, 0, 0], - bias=False, - ) - self.bn = norm_module( - num_features=dim_in * fusion_conv_channel_ratio, - eps=eps, - momentum=bn_mmt, - ) - self.relu = nn.ReLU(inplace_relu) - - def forward(self, x): - x_s = x[0] - x_f = x[1] - fuse = self.conv_f2s(x_f) - fuse = self.bn(fuse) - fuse = self.relu(fuse) - x_s_fuse = torch.cat([x_s, fuse], 1) - return [x_s_fuse, x_f] - - - -@MODEL_REGISTRY.register() -class SlowFast(nn.Module): - """ - SlowFast model builder for SlowFast network. - - Christoph Feichtenhofer, Haoqi Fan, Jitendra Malik, and Kaiming He. - "SlowFast networks for video recognition." - https://arxiv.org/pdf/1812.03982.pdf - """ - - def __init__(self, cfg): - """ - The `__init__` method of any subclass should also contain these - arguments. - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - super(SlowFast, self).__init__() - self.norm_module = get_norm(cfg) - self.enable_detection = cfg.DETECTION.ENABLE - self.num_pathways = 2 - self._construct_network(cfg) - init_helper.init_weights( - self, cfg.MODEL.FC_INIT_STD, cfg.RESNET.ZERO_INIT_FINAL_BN - ) - - def _construct_network(self, cfg): - """ - Builds a SlowFast model. The first pathway is the Slow pathway and the - second pathway is the Fast pathway. - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - assert cfg.MODEL.ARCH in _POOL1.keys() - pool_size = _POOL1[cfg.MODEL.ARCH] - assert len({len(pool_size), self.num_pathways}) == 1 - assert cfg.RESNET.DEPTH in _MODEL_STAGE_DEPTH.keys() - - (d2, d3, d4, d5) = _MODEL_STAGE_DEPTH[cfg.RESNET.DEPTH] - - num_groups = cfg.RESNET.NUM_GROUPS - width_per_group = cfg.RESNET.WIDTH_PER_GROUP - dim_inner = num_groups * width_per_group - out_dim_ratio = ( - cfg.SLOWFAST.BETA_INV // cfg.SLOWFAST.FUSION_CONV_CHANNEL_RATIO - ) - - temp_kernel = _TEMPORAL_KERNEL_BASIS[cfg.MODEL.ARCH] - - self.s1 = stem_helper.VideoModelStem( - dim_in=cfg.DATA.INPUT_CHANNEL_NUM, - dim_out=[width_per_group, width_per_group // cfg.SLOWFAST.BETA_INV], - kernel=[temp_kernel[0][0] + [7, 7], temp_kernel[0][1] + [7, 7]], - stride=[[1, 2, 2]] * 2, - padding=[ - [temp_kernel[0][0][0] // 2, 3, 3], - [temp_kernel[0][1][0] // 2, 3, 3], - ], - norm_module=self.norm_module, - ) - self.s1_fuse = FuseFastToSlow( - width_per_group // cfg.SLOWFAST.BETA_INV, - cfg.SLOWFAST.FUSION_CONV_CHANNEL_RATIO, - cfg.SLOWFAST.FUSION_KERNEL_SZ, - cfg.SLOWFAST.ALPHA, - norm_module=self.norm_module, - ) - - self.s2 = resnet_helper.ResStage( - dim_in=[ - width_per_group + width_per_group // out_dim_ratio, - width_per_group // cfg.SLOWFAST.BETA_INV, - ], - dim_out=[ - width_per_group * 4, - width_per_group * 4 // cfg.SLOWFAST.BETA_INV, - ], - dim_inner=[dim_inner, dim_inner // cfg.SLOWFAST.BETA_INV], - temp_kernel_sizes=temp_kernel[1], - stride=cfg.RESNET.SPATIAL_STRIDES[0], - num_blocks=[d2] * 2, - num_groups=[num_groups] * 2, - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[0], - nonlocal_inds=cfg.NONLOCAL.LOCATION[0], - nonlocal_group=cfg.NONLOCAL.GROUP[0], - nonlocal_pool=cfg.NONLOCAL.POOL[0], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - dilation=cfg.RESNET.SPATIAL_DILATIONS[0], - norm_module=self.norm_module, - ) - self.s2_fuse = FuseFastToSlow( - width_per_group * 4 // cfg.SLOWFAST.BETA_INV, - cfg.SLOWFAST.FUSION_CONV_CHANNEL_RATIO, - cfg.SLOWFAST.FUSION_KERNEL_SZ, - cfg.SLOWFAST.ALPHA, - norm_module=self.norm_module, - ) - - for pathway in range(self.num_pathways): - pool = nn.MaxPool3d( - kernel_size=pool_size[pathway], - stride=pool_size[pathway], - padding=[0, 0, 0], - ) - self.add_module("pathway{}_pool".format(pathway), pool) - - self.s3 = resnet_helper.ResStage( - dim_in=[ - width_per_group * 4 + width_per_group * 4 // out_dim_ratio, - width_per_group * 4 // cfg.SLOWFAST.BETA_INV, - ], - dim_out=[ - width_per_group * 8, - width_per_group * 8 // cfg.SLOWFAST.BETA_INV, - ], - dim_inner=[dim_inner * 2, dim_inner * 2 // cfg.SLOWFAST.BETA_INV], - temp_kernel_sizes=temp_kernel[2], - stride=cfg.RESNET.SPATIAL_STRIDES[1], - num_blocks=[d3] * 2, - num_groups=[num_groups] * 2, - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[1], - nonlocal_inds=cfg.NONLOCAL.LOCATION[1], - nonlocal_group=cfg.NONLOCAL.GROUP[1], - nonlocal_pool=cfg.NONLOCAL.POOL[1], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - dilation=cfg.RESNET.SPATIAL_DILATIONS[1], - norm_module=self.norm_module, - ) - self.s3_fuse = FuseFastToSlow( - width_per_group * 8 // cfg.SLOWFAST.BETA_INV, - cfg.SLOWFAST.FUSION_CONV_CHANNEL_RATIO, - cfg.SLOWFAST.FUSION_KERNEL_SZ, - cfg.SLOWFAST.ALPHA, - norm_module=self.norm_module, - ) - - self.s4 = resnet_helper.ResStage( - dim_in=[ - width_per_group * 8 + width_per_group * 8 // out_dim_ratio, - width_per_group * 8 // cfg.SLOWFAST.BETA_INV, - ], - dim_out=[ - width_per_group * 16, - width_per_group * 16 // cfg.SLOWFAST.BETA_INV, - ], - dim_inner=[dim_inner * 4, dim_inner * 4 // cfg.SLOWFAST.BETA_INV], - temp_kernel_sizes=temp_kernel[3], - stride=cfg.RESNET.SPATIAL_STRIDES[2], - num_blocks=[d4] * 2, - num_groups=[num_groups] * 2, - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[2], - nonlocal_inds=cfg.NONLOCAL.LOCATION[2], - nonlocal_group=cfg.NONLOCAL.GROUP[2], - nonlocal_pool=cfg.NONLOCAL.POOL[2], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - dilation=cfg.RESNET.SPATIAL_DILATIONS[2], - norm_module=self.norm_module, - ) - self.s4_fuse = FuseFastToSlow( - width_per_group * 16 // cfg.SLOWFAST.BETA_INV, - cfg.SLOWFAST.FUSION_CONV_CHANNEL_RATIO, - cfg.SLOWFAST.FUSION_KERNEL_SZ, - cfg.SLOWFAST.ALPHA, - norm_module=self.norm_module, - ) - - self.s5 = resnet_helper.ResStage( - dim_in=[ - width_per_group * 16 + width_per_group * 16 // out_dim_ratio, - width_per_group * 16 // cfg.SLOWFAST.BETA_INV, - ], - dim_out=[ - width_per_group * 32, - width_per_group * 32 // cfg.SLOWFAST.BETA_INV, - ], - dim_inner=[dim_inner * 8, dim_inner * 8 // cfg.SLOWFAST.BETA_INV], - temp_kernel_sizes=temp_kernel[4], - stride=cfg.RESNET.SPATIAL_STRIDES[3], - num_blocks=[d5] * 2, - num_groups=[num_groups] * 2, - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[3], - nonlocal_inds=cfg.NONLOCAL.LOCATION[3], - nonlocal_group=cfg.NONLOCAL.GROUP[3], - nonlocal_pool=cfg.NONLOCAL.POOL[3], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - dilation=cfg.RESNET.SPATIAL_DILATIONS[3], - norm_module=self.norm_module, - ) - - if cfg.DETECTION.ENABLE: - raise NotImplementedError - else: - self.head = head_helper.ResNetBasicHead( - dim_in=[ - width_per_group * 32, - width_per_group * 32 // cfg.SLOWFAST.BETA_INV, - ], - num_classes=cfg.MODEL.NUM_CLASSES, - pool_size=[None, None] - if cfg.MULTIGRID.SHORT_CYCLE - else [ - [ - cfg.DATA.NUM_FRAMES - // cfg.SLOWFAST.ALPHA - // pool_size[0][0], - cfg.DATA.CROP_SIZE // 32 // pool_size[0][1], - cfg.DATA.CROP_SIZE // 32 // pool_size[0][2], - ], - [ - cfg.DATA.NUM_FRAMES // pool_size[1][0], - cfg.DATA.CROP_SIZE // 32 // pool_size[1][1], - cfg.DATA.CROP_SIZE // 32 // pool_size[1][2], - ], - ], # None for AdaptiveAvgPool3d((1, 1, 1)) - dropout_rate=cfg.MODEL.DROPOUT_RATE, - act_func=cfg.MODEL.HEAD_ACT, - ) - - def forward(self, x, bboxes=None): - x = self.s1(x) - x = self.s1_fuse(x) - x = self.s2(x) - x = self.s2_fuse(x) - for pathway in range(self.num_pathways): - pool = getattr(self, "pathway{}_pool".format(pathway)) - x[pathway] = pool(x[pathway]) - x = self.s3(x) - x = self.s3_fuse(x) - x = self.s4(x) - x = self.s4_fuse(x) - x = self.s5(x) - if self.enable_detection: - x = self.head(x, bboxes) - else: - x = self.head(x) - return x - -############################# -### ftcn using this Model ### -############################# -@MODEL_REGISTRY.register() -class ResNet(nn.Module): - """ - ResNet model builder. It builds a ResNet like network backbone without - lateral connection (C2D, I3D, Slow). - - Christoph Feichtenhofer, Haoqi Fan, Jitendra Malik, and Kaiming He. - "SlowFast networks for video recognition." - https://arxiv.org/pdf/1812.03982.pdf - - Xiaolong Wang, Ross Girshick, Abhinav Gupta, and Kaiming He. - "Non-local neural networks." - https://arxiv.org/pdf/1711.07971.pdf - """ - - def __init__(self, cfg): - """ - The `__init__` method of any subclass should also contain these - arguments. - - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - super(ResNet, self).__init__() - self.norm_module = get_norm(cfg) - self.enable_detection = cfg.DETECTION.ENABLE - self.num_pathways = 1 - self._construct_network(cfg) - init_helper.init_weights( - self, cfg.MODEL.FC_INIT_STD, cfg.RESNET.ZERO_INIT_FINAL_BN - ) - - def _construct_network(self, cfg): - """ - Builds a single pathway ResNet model. - - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - assert cfg.MODEL.ARCH in _POOL1.keys() - pool_size = _POOL1[cfg.MODEL.ARCH] - assert len({len(pool_size), self.num_pathways}) == 1 - assert cfg.RESNET.DEPTH in _MODEL_STAGE_DEPTH.keys() - - (d2, d3, d4, d5) = _MODEL_STAGE_DEPTH[cfg.RESNET.DEPTH] - - num_groups = cfg.RESNET.NUM_GROUPS - width_per_group = cfg.RESNET.WIDTH_PER_GROUP - dim_inner = num_groups * width_per_group - - temp_kernel = _TEMPORAL_KERNEL_BASIS[cfg.MODEL.ARCH] - - # fix: inplace_relu=True - self.s1 = stem_helper.VideoModelStem( - dim_in=cfg.DATA.INPUT_CHANNEL_NUM, - dim_out=[width_per_group], - kernel=[temp_kernel[0][0] + [7, 7]], - stride=[[1, 2, 2]], - padding=[[temp_kernel[0][0][0] // 2, 3, 3]], - norm_module=self.norm_module, - ) - - self.s2 = resnet_helper.ResStage( - dim_in=[width_per_group], - dim_out=[width_per_group * 4], - dim_inner=[dim_inner], - temp_kernel_sizes=temp_kernel[1], - stride=cfg.RESNET.SPATIAL_STRIDES[0], - num_blocks=[d2], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[0], - nonlocal_inds=cfg.NONLOCAL.LOCATION[0], - nonlocal_group=cfg.NONLOCAL.GROUP[0], - nonlocal_pool=cfg.NONLOCAL.POOL[0], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - # inplace_relu=cfg.RESNET.INPLACE_RELU, - inplace_relu=False, # default :: True - dilation=cfg.RESNET.SPATIAL_DILATIONS[0], - norm_module=self.norm_module, - ) - - for pathway in range(self.num_pathways): - pool = nn.MaxPool3d( - kernel_size=pool_size[pathway], - stride=pool_size[pathway], - padding=[0, 0, 0], - ) - self.add_module("pathway{}_pool".format(pathway), pool) - - self.s3 = resnet_helper.ResStage( - dim_in=[width_per_group * 4], - dim_out=[width_per_group * 8], - dim_inner=[dim_inner * 2], - temp_kernel_sizes=temp_kernel[2], - stride=cfg.RESNET.SPATIAL_STRIDES[1], - num_blocks=[d3], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[1], - nonlocal_inds=cfg.NONLOCAL.LOCATION[1], - nonlocal_group=cfg.NONLOCAL.GROUP[1], - nonlocal_pool=cfg.NONLOCAL.POOL[1], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - # inplace_relu=cfg.RESNET.INPLACE_RELU, - inplace_relu=False, # default :: True - dilation=cfg.RESNET.SPATIAL_DILATIONS[1], - norm_module=self.norm_module, - ) - - self.s4 = resnet_helper.ResStage( - dim_in=[width_per_group * 8], - dim_out=[width_per_group * 16], - dim_inner=[dim_inner * 4], - temp_kernel_sizes=temp_kernel[3], - stride=cfg.RESNET.SPATIAL_STRIDES[2], - num_blocks=[d4], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[2], - nonlocal_inds=cfg.NONLOCAL.LOCATION[2], - nonlocal_group=cfg.NONLOCAL.GROUP[2], - nonlocal_pool=cfg.NONLOCAL.POOL[2], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - # inplace_relu=cfg.RESNET.INPLACE_RELU, - inplace_relu=False, # default :: True ########### Fixed by TH ############ default :: True - dilation=cfg.RESNET.SPATIAL_DILATIONS[2], - norm_module=self.norm_module, - ) - - self.s5 = resnet_helper.ResStage( - dim_in=[width_per_group * 16], - dim_out=[width_per_group * 32], - dim_inner=[dim_inner * 8], - temp_kernel_sizes=temp_kernel[4], - stride=cfg.RESNET.SPATIAL_STRIDES[3], - num_blocks=[d5], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[3], - nonlocal_inds=cfg.NONLOCAL.LOCATION[3], - nonlocal_group=cfg.NONLOCAL.GROUP[3], - nonlocal_pool=cfg.NONLOCAL.POOL[3], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - # inplace_relu=cfg.RESNET.INPLACE_RELU, - inplace_relu=False, # default :: True - dilation=cfg.RESNET.SPATIAL_DILATIONS[3], - norm_module=self.norm_module, - ) - ############################# 0918 Head X ############################################### - # if self.enable_detection: - # raise NotImplementedError - # else: - # self.head = head_helper.ResNetBasicHead( - # dim_in=[width_per_group * 32], - # num_classes=cfg.MODEL.NUM_CLASSES, - # pool_size=[None, None] - # if cfg.MULTIGRID.SHORT_CYCLE - # else [ - # [ - # cfg.DATA.NUM_FRAMES // pool_size[0][0], - # cfg.DATA.CROP_SIZE // 32 // pool_size[0][1], - # cfg.DATA.CROP_SIZE // 32 // pool_size[0][2], - # ] - # ], # None for AdaptiveAvgPool3d((1, 1, 1)) - # dropout_rate=cfg.MODEL.DROPOUT_RATE, - # act_func=cfg.MODEL.HEAD_ACT, - # ) - # x:[images, ]([16, 3, 32, 224, 224]) - # ft_feats [out1, out2, out3, out4, out5] - def forward(self, x,ft_feats, bboxes=None): - ### FTCN ### - ################# Fourier Transform ################# - # x shape s1 torch.Size([16, 64, 32, 56, 56]) - # x shape s2 torch.Size([16, 256, 32, 56, 56]) - # x shape s3 torch.Size([16, 512, 16, 28, 28]) - # x shape s4 torch.Size([16, 1024, 16, 14, 14]) - # x shape s5 torch.Size([16, 2048, 16, 7, 7]) - ####################################################### - # FTfeature : (torch.Size([16, 64, 56, 56]), - # torch.Size([16, 256, 56, 56]), - # torch.Size([16, 512, 28, 28]), - # torch.Size([16, 1024, 14, 14]), - # torch.Size([16, 2048])) - ############## ######################################### - - x = self.s1(x) - x[0] = x[0].clone() + ft_feats[0].unsqueeze(2).clone() - x = self.s2(x) - x[0] = x[0].clone() + ft_feats[1].unsqueeze(2).clone() - for pathway in range(self.num_pathways): - pool = getattr(self, "pathway{}_pool".format(pathway)) - x[pathway] = pool(x[pathway]) - x = self.s3(x) - x[0] = x[0].clone() + ft_feats[2].unsqueeze(2).clone() - x = self.s4(x) - x[0] = x[0].clone() + ft_feats[3].unsqueeze(2).clone() - x = self.s5(x) - ############################# 0918 Head X ############################################### - ### FTCN ### - # x shape input transformer torch.Size([16, 1024, 16, 14, 14]) - # x shape input transformer torch.Size([16, 2048, 16, 7, 7]) - # if self.enable_detection: - # x = self.head(x, bboxes) - # else: - # ### FTCN ### - # x = self.head(x,ft_feats[4].clone()) - - ########### - # x shape output transformer torch.Size([1]) - return x[0] , ft_feats[4] -################################################################ -@MODEL_REGISTRY.register() -class ResNetVar(nn.Module): - """ - ResNet model builder. It builds a ResNet like network backbone without - lateral connection (C2D, I3D, Slow). - - Christoph Feichtenhofer, Haoqi Fan, Jitendra Malik, and Kaiming He. - "SlowFast networks for video recognition." - https://arxiv.org/pdf/1812.03982.pdf - - Xiaolong Wang, Ross Girshick, Abhinav Gupta, and Kaiming He. - "Non-local neural networks." - https://arxiv.org/pdf/1711.07971.pdf - """ - - def __init__(self, cfg): - """ - The `__init__` method of any subclass should also contain these - arguments. - - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - super(ResNetVar, self).__init__() - self.norm_module = get_norm(cfg) - self.enable_detection = cfg.DETECTION.ENABLE - self.num_pathways = 1 - self._construct_network(cfg) - init_helper.init_weights( - self, cfg.MODEL.FC_INIT_STD, cfg.RESNET.ZERO_INIT_FINAL_BN - ) - - def _construct_network(self, cfg): - """ - Builds a single pathway ResNet model. - - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - assert cfg.MODEL.ARCH in _POOL1.keys() - pool_size = _POOL1[cfg.MODEL.ARCH] - assert len({len(pool_size), self.num_pathways}) == 1 - assert cfg.RESNET.DEPTH in _MODEL_STAGE_DEPTH.keys() - - (d2, d3, d4, d5) = _MODEL_STAGE_DEPTH[cfg.RESNET.DEPTH] - - num_groups = cfg.RESNET.NUM_GROUPS - width_per_group = cfg.RESNET.WIDTH_PER_GROUP - dim_inner = num_groups * width_per_group - - temp_kernel = _TEMPORAL_KERNEL_BASIS[cfg.MODEL.ARCH] - - self.s1 = stem_helper.VideoModelStem( - dim_in=cfg.DATA.INPUT_CHANNEL_NUM, - dim_out=[width_per_group], - kernel=[temp_kernel[0][0] + [7, 7]], - stride=[[1, 2, 2]], - padding=[[temp_kernel[0][0][0] // 2, 3, 3]], - norm_module=self.norm_module, - ) - - self.s2 = resnet_helper.ResStage( - dim_in=[width_per_group], - dim_out=[width_per_group * 4], - dim_inner=[dim_inner], - temp_kernel_sizes=temp_kernel[1], - stride=cfg.RESNET.SPATIAL_STRIDES[0], - num_blocks=[d2], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[0], - nonlocal_inds=cfg.NONLOCAL.LOCATION[0], - nonlocal_group=cfg.NONLOCAL.GROUP[0], - nonlocal_pool=cfg.NONLOCAL.POOL[0], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[0], - norm_module=self.norm_module, - ) - - for pathway in range(self.num_pathways): - pool = nn.MaxPool3d( - kernel_size=pool_size[pathway], - stride=pool_size[pathway], - padding=[0, 0, 0], - ) - self.add_module("pathway{}_pool".format(pathway), pool) - - self.s3 = resnet_helper.ResStage( - dim_in=[width_per_group * 4], - dim_out=[width_per_group * 8], - dim_inner=[dim_inner * 2], - temp_kernel_sizes=temp_kernel[2], - stride=cfg.RESNET.SPATIAL_STRIDES[1], - num_blocks=[d3], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[1], - nonlocal_inds=cfg.NONLOCAL.LOCATION[1], - nonlocal_group=cfg.NONLOCAL.GROUP[1], - nonlocal_pool=cfg.NONLOCAL.POOL[1], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[1], - norm_module=self.norm_module, - ) - - self.s4 = resnet_helper.ResStage( - dim_in=[width_per_group * 8], - dim_out=[width_per_group * 16], - dim_inner=[dim_inner * 4], - temp_kernel_sizes=temp_kernel[3], - stride=cfg.RESNET.SPATIAL_STRIDES[2], - num_blocks=[d4], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[2], - nonlocal_inds=cfg.NONLOCAL.LOCATION[2], - nonlocal_group=cfg.NONLOCAL.GROUP[2], - nonlocal_pool=cfg.NONLOCAL.POOL[2], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[2], - norm_module=self.norm_module, - ) - - self.s5 = resnet_helper.ResStage( - dim_in=[width_per_group * 16], - dim_out=[width_per_group * 32], - dim_inner=[dim_inner * 8], - temp_kernel_sizes=temp_kernel[4], - stride=cfg.RESNET.SPATIAL_STRIDES[3], - num_blocks=[d5], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[3], - nonlocal_inds=cfg.NONLOCAL.LOCATION[3], - nonlocal_group=cfg.NONLOCAL.GROUP[3], - nonlocal_pool=cfg.NONLOCAL.POOL[3], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[3], - norm_module=self.norm_module, - ) - - if self.enable_detection: - raise NotImplementedError - else: - self.head = head_helper.ResNetBasicHead( - dim_in=[width_per_group * 32], - num_classes=cfg.MODEL.NUM_CLASSES, - pool_size=[None], - dropout_rate=cfg.MODEL.DROPOUT_RATE, - act_func=cfg.MODEL.HEAD_ACT, - ) - - def forward(self, x, bboxes=None): - x = self.s1(x) - x = self.s2(x) - for pathway in range(self.num_pathways): - pool = getattr(self, "pathway{}_pool".format(pathway)) - x[pathway] = pool(x[pathway]) - x = self.s3(x) - x = self.s4(x) - x = self.s5(x) - if self.enable_detection: - x = self.head(x, bboxes) - else: - x = self.head(x) - return x - -@MODEL_REGISTRY.register() -class ResNetBase(nn.Module): - """ - ResNet model builder. It builds a ResNet like network backbone without - lateral connection (C2D, I3D, Slow). - - Christoph Feichtenhofer, Haoqi Fan, Jitendra Malik, and Kaiming He. - "SlowFast networks for video recognition." - https://arxiv.org/pdf/1812.03982.pdf - - Xiaolong Wang, Ross Girshick, Abhinav Gupta, and Kaiming He. - "Non-local neural networks." - https://arxiv.org/pdf/1711.07971.pdf - """ - - def __init__(self, cfg): - """ - The `__init__` method of any subclass should also contain these - arguments. - - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - super(ResNetBase, self).__init__() - self.norm_module = get_norm(cfg) - self.enable_detection = cfg.DETECTION.ENABLE - self.num_pathways = 1 - self._construct_network(cfg) - init_helper.init_weights( - self, cfg.MODEL.FC_INIT_STD, cfg.RESNET.ZERO_INIT_FINAL_BN - ) - - def _construct_network(self, cfg): - """ - Builds a single pathway ResNet model. - - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - assert cfg.MODEL.ARCH in _POOL1.keys() - pool_size = _POOL1[cfg.MODEL.ARCH] - assert len({len(pool_size), self.num_pathways}) == 1 - assert cfg.RESNET.DEPTH in _MODEL_STAGE_DEPTH.keys() - - (d2, d3, d4, d5) = _MODEL_STAGE_DEPTH[cfg.RESNET.DEPTH] - - num_groups = cfg.RESNET.NUM_GROUPS - width_per_group = cfg.RESNET.WIDTH_PER_GROUP - dim_inner = num_groups * width_per_group - - temp_kernel = _TEMPORAL_KERNEL_BASIS[cfg.MODEL.ARCH] - - self.s1 = stem_helper.VideoModelStem( - dim_in=cfg.DATA.INPUT_CHANNEL_NUM, - dim_out=[width_per_group], - kernel=[temp_kernel[0][0] + [7, 7]], - stride=[[1, 2, 2]], - padding=[[temp_kernel[0][0][0] // 2, 3, 3]], - norm_module=self.norm_module, - ) - - self.s2 = resnet_helper.ResStage( - dim_in=[width_per_group], - dim_out=[width_per_group * 4], - dim_inner=[dim_inner], - temp_kernel_sizes=temp_kernel[1], - stride=cfg.RESNET.SPATIAL_STRIDES[0], - num_blocks=[d2], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[0], - nonlocal_inds=cfg.NONLOCAL.LOCATION[0], - nonlocal_group=cfg.NONLOCAL.GROUP[0], - nonlocal_pool=cfg.NONLOCAL.POOL[0], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[0], - norm_module=self.norm_module, - ) - - for pathway in range(self.num_pathways): - pool = nn.MaxPool3d( - kernel_size=pool_size[pathway], - stride=pool_size[pathway], - padding=[0, 0, 0], - ) - self.add_module("pathway{}_pool".format(pathway), pool) - - self.s3 = resnet_helper.ResStage( - dim_in=[width_per_group * 4], - dim_out=[width_per_group * 8], - dim_inner=[dim_inner * 2], - temp_kernel_sizes=temp_kernel[2], - stride=cfg.RESNET.SPATIAL_STRIDES[1], - num_blocks=[d3], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[1], - nonlocal_inds=cfg.NONLOCAL.LOCATION[1], - nonlocal_group=cfg.NONLOCAL.GROUP[1], - nonlocal_pool=cfg.NONLOCAL.POOL[1], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[1], - norm_module=self.norm_module, - ) - - self.s4 = resnet_helper.ResStage( - dim_in=[width_per_group * 8], - dim_out=[width_per_group * 16], - dim_inner=[dim_inner * 4], - temp_kernel_sizes=temp_kernel[3], - stride=cfg.RESNET.SPATIAL_STRIDES[2], - num_blocks=[d4], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[2], - nonlocal_inds=cfg.NONLOCAL.LOCATION[2], - nonlocal_group=cfg.NONLOCAL.GROUP[2], - nonlocal_pool=cfg.NONLOCAL.POOL[2], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[2], - norm_module=self.norm_module, - ) - - self.s5 = resnet_helper.ResStage( - dim_in=[width_per_group * 16], - dim_out=[width_per_group * 32], - dim_inner=[dim_inner * 8], - temp_kernel_sizes=temp_kernel[4], - stride=cfg.RESNET.SPATIAL_STRIDES[3], - num_blocks=[d5], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[3], - nonlocal_inds=cfg.NONLOCAL.LOCATION[3], - nonlocal_group=cfg.NONLOCAL.GROUP[3], - nonlocal_pool=cfg.NONLOCAL.POOL[3], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[3], - norm_module=self.norm_module, - ) - - if self.enable_detection: - raise NotImplementedError - else: - self.head = head_helper.ResNetBasicHead( - dim_in=[width_per_group * 32], - num_classes=cfg.MODEL.NUM_CLASSES, - pool_size=[None, None] - if cfg.MULTIGRID.SHORT_CYCLE - else [ - None - ], # None for AdaptiveAvgPool3d((1, 1, 1)) - dropout_rate=cfg.MODEL.DROPOUT_RATE, - act_func=cfg.MODEL.HEAD_ACT, - ) - - def forward(self, x, bboxes=None): - x = self.s1(x) - x = self.s2(x) - for pathway in range(self.num_pathways): - pool = getattr(self, "pathway{}_pool".format(pathway)) - x[pathway] = pool(x[pathway]) - x = self.s3(x) - x = self.s4(x) - x = self.s5(x) - if self.enable_detection: - x = self.head(x, bboxes) - else: - x = self.head(x) - return x - - -@MODEL_REGISTRY.register() -class ResNetFreeze(nn.Module): - """ - ResNet model builder. It builds a ResNet like network backbone without - lateral connection (C2D, I3D, Slow). - - Christoph Feichtenhofer, Haoqi Fan, Jitendra Malik, and Kaiming He. - "SlowFast networks for video recognition." - https://arxiv.org/pdf/1812.03982.pdf - - Xiaolong Wang, Ross Girshick, Abhinav Gupta, and Kaiming He. - "Non-local neural networks." - https://arxiv.org/pdf/1711.07971.pdf - """ - - def __init__(self, cfg): - """ - The `__init__` method of any subclass should also contain these - arguments. - - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - super(ResNetFreeze, self).__init__() - self.norm_module = get_norm(cfg) - self.enable_detection = cfg.DETECTION.ENABLE - self.num_pathways = 1 - self._construct_network(cfg) - init_helper.init_weights( - self, cfg.MODEL.FC_INIT_STD, cfg.RESNET.ZERO_INIT_FINAL_BN - ) - - def _construct_network(self, cfg): - """ - Builds a single pathway ResNet model. - - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - assert cfg.MODEL.ARCH in _POOL1.keys() - pool_size = _POOL1[cfg.MODEL.ARCH] - assert len({len(pool_size), self.num_pathways}) == 1 - assert cfg.RESNET.DEPTH in _MODEL_STAGE_DEPTH.keys() - - (d2, d3, d4, d5) = _MODEL_STAGE_DEPTH[cfg.RESNET.DEPTH] - - num_groups = cfg.RESNET.NUM_GROUPS - width_per_group = cfg.RESNET.WIDTH_PER_GROUP - dim_inner = num_groups * width_per_group - - temp_kernel = _TEMPORAL_KERNEL_BASIS[cfg.MODEL.ARCH] - - self.s1 = stem_helper.VideoModelStem( - dim_in=cfg.DATA.INPUT_CHANNEL_NUM, - dim_out=[width_per_group], - kernel=[temp_kernel[0][0] + [7, 7]], - stride=[[1, 2, 2]], - padding=[[temp_kernel[0][0][0] // 2, 3, 3]], - norm_module=self.norm_module, - ) - - self.s2 = resnet_helper.ResStage( - dim_in=[width_per_group], - dim_out=[width_per_group * 4], - dim_inner=[dim_inner], - temp_kernel_sizes=temp_kernel[1], - stride=cfg.RESNET.SPATIAL_STRIDES[0], - num_blocks=[d2], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[0], - nonlocal_inds=cfg.NONLOCAL.LOCATION[0], - nonlocal_group=cfg.NONLOCAL.GROUP[0], - nonlocal_pool=cfg.NONLOCAL.POOL[0], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[0], - norm_module=self.norm_module, - ) - - for pathway in range(self.num_pathways): - pool = nn.MaxPool3d( - kernel_size=pool_size[pathway], - stride=pool_size[pathway], - padding=[0, 0, 0], - ) - self.add_module("pathway{}_pool".format(pathway), pool) - - self.s3 = resnet_helper.ResStage( - dim_in=[width_per_group * 4], - dim_out=[width_per_group * 8], - dim_inner=[dim_inner * 2], - temp_kernel_sizes=temp_kernel[2], - stride=cfg.RESNET.SPATIAL_STRIDES[1], - num_blocks=[d3], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[1], - nonlocal_inds=cfg.NONLOCAL.LOCATION[1], - nonlocal_group=cfg.NONLOCAL.GROUP[1], - nonlocal_pool=cfg.NONLOCAL.POOL[1], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[1], - norm_module=self.norm_module, - ) - - self.s4 = resnet_helper.ResStage( - dim_in=[width_per_group * 8], - dim_out=[width_per_group * 16], - dim_inner=[dim_inner * 4], - temp_kernel_sizes=temp_kernel[3], - stride=cfg.RESNET.SPATIAL_STRIDES[2], - num_blocks=[d4], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[2], - nonlocal_inds=cfg.NONLOCAL.LOCATION[2], - nonlocal_group=cfg.NONLOCAL.GROUP[2], - nonlocal_pool=cfg.NONLOCAL.POOL[2], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[2], - norm_module=self.norm_module, - ) - - self.s5 = resnet_helper.ResStage( - dim_in=[width_per_group * 16], - dim_out=[width_per_group * 32], - dim_inner=[dim_inner * 8], - temp_kernel_sizes=temp_kernel[4], - stride=cfg.RESNET.SPATIAL_STRIDES[3], - num_blocks=[d5], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[3], - nonlocal_inds=cfg.NONLOCAL.LOCATION[3], - nonlocal_group=cfg.NONLOCAL.GROUP[3], - nonlocal_pool=cfg.NONLOCAL.POOL[3], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[3], - norm_module=self.norm_module, - ) - - if self.enable_detection: - raise NotImplementedError - else: - self.head = head_helper.ResNetBasicHead( - dim_in=[width_per_group * 32], - num_classes=cfg.MODEL.NUM_CLASSES, - pool_size=[None,None] - if cfg.MULTIGRID.SHORT_CYCLE - else [ - None - ], # None for AdaptiveAvgPool3d((1, 1, 1)) - dropout_rate=cfg.MODEL.DROPOUT_RATE, - act_func=cfg.MODEL.HEAD_ACT, - ) - - def forward(self, x, freeze_backbone=False): - assert isinstance(freeze_backbone,bool) - x = self.s1(x) - x = self.s2(x) - # for pathway in range(self.num_pathways): - # pool = getattr(self, "pathway{}_pool".format(pathway)) - # x[pathway] = pool(x[pathway]) - x = self.s3(x) - x = self.s4(x) - x = self.s5(x) - if freeze_backbone: - x=[item.detach() for item in x] - - x = self.head(x) - return x - - - -import torch.nn.functional as F -from .unet_helper import DecoderBlock,LightDecoderBlock,ResDecoderBlock - - -@MODEL_REGISTRY.register() -class ResUNet(nn.Module): - """ - ResNet model builder. It builds a ResNet like network backbone without - lateral connection (C2D, I3D, Slow). - - Christoph Feichtenhofer, Haoqi Fan, Jitendra Malik, and Kaiming He. - "SlowFast networks for video recognition." - https://arxiv.org/pdf/1812.03982.pdf - - Xiaolong Wang, Ross Girshick, Abhinav Gupta, and Kaiming He. - "Non-local neural networks." - https://arxiv.org/pdf/1711.07971.pdf - """ - - def __init__(self, cfg): - """ - The `__init__` method of any subclass should also contain these - arguments. - - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - super(ResUNet, self).__init__() - self.norm_module = get_norm(cfg) - self.enable_detection = cfg.DETECTION.ENABLE - self.enable_jitter = cfg.JITTER.ENABLE - self.num_pathways = 1 - assert cfg.DATA.TRAIN_CROP_SIZE == cfg.DATA.TEST_CROP_SIZE - self.image_size = cfg.DATA.TRAIN_CROP_SIZE - self.clip_size = cfg.DATA.NUM_FRAMES - self._construct_network(cfg) - init_helper.init_weights( - self, cfg.MODEL.FC_INIT_STD, cfg.RESNET.ZERO_INIT_FINAL_BN - ) - - def _construct_network(self, cfg): - """ - Builds a single pathway ResNet model. - - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - assert cfg.MODEL.ARCH in _POOL1.keys() - pool_size = _POOL1[cfg.MODEL.ARCH] - self.cfg = cfg - assert len({len(pool_size), self.num_pathways}) == 1 - assert cfg.RESNET.DEPTH in _MODEL_STAGE_DEPTH.keys() - - (d2, d3, d4, d5) = _MODEL_STAGE_DEPTH[cfg.RESNET.DEPTH] - - num_groups = cfg.RESNET.NUM_GROUPS - width_per_group = cfg.RESNET.WIDTH_PER_GROUP - dim_inner = num_groups * width_per_group - - temp_kernel = _TEMPORAL_KERNEL_BASIS[cfg.MODEL.ARCH] - - self.s1 = stem_helper.VideoModelStem( - dim_in=cfg.DATA.INPUT_CHANNEL_NUM, - dim_out=[width_per_group], - kernel=[temp_kernel[0][0] + [7, 7]], - stride=[[1, 2, 2]], - padding=[[temp_kernel[0][0][0] // 2, 3, 3]], - norm_module=self.norm_module, - ) - - self.s2 = resnet_helper.ResStage( - dim_in=[width_per_group], - dim_out=[width_per_group * 4], - dim_inner=[dim_inner], - temp_kernel_sizes=temp_kernel[1], - stride=cfg.RESNET.SPATIAL_STRIDES[0], - num_blocks=[d2], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[0], - nonlocal_inds=cfg.NONLOCAL.LOCATION[0], - nonlocal_group=cfg.NONLOCAL.GROUP[0], - nonlocal_pool=cfg.NONLOCAL.POOL[0], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[0], - norm_module=self.norm_module, - ) - - for pathway in range(self.num_pathways): - pool = nn.MaxPool3d( - kernel_size=pool_size[pathway], - stride=pool_size[pathway], - padding=[0, 0, 0], - ) - self.add_module("pathway{}_pool".format(pathway), pool) - - self.s3 = resnet_helper.ResStage( - dim_in=[width_per_group * 4], - dim_out=[width_per_group * 8], - dim_inner=[dim_inner * 2], - temp_kernel_sizes=temp_kernel[2], - stride=cfg.RESNET.SPATIAL_STRIDES[1], - num_blocks=[d3], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[1], - nonlocal_inds=cfg.NONLOCAL.LOCATION[1], - nonlocal_group=cfg.NONLOCAL.GROUP[1], - nonlocal_pool=cfg.NONLOCAL.POOL[1], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[1], - norm_module=self.norm_module, - ) - - self.s4 = resnet_helper.ResStage( - dim_in=[width_per_group * 8], - dim_out=[width_per_group * 16], - dim_inner=[dim_inner * 4], - temp_kernel_sizes=temp_kernel[3], - stride=cfg.RESNET.SPATIAL_STRIDES[2], - num_blocks=[d4], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[2], - nonlocal_inds=cfg.NONLOCAL.LOCATION[2], - nonlocal_group=cfg.NONLOCAL.GROUP[2], - nonlocal_pool=cfg.NONLOCAL.POOL[2], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[2], - norm_module=self.norm_module, - ) - - # self.s5 = resnet_helper.ResStage( - # dim_in=[width_per_group * 16], - # dim_out=[width_per_group * 32], - # dim_inner=[dim_inner * 8], - # temp_kernel_sizes=temp_kernel[4], - # stride=cfg.RESNET.SPATIAL_STRIDES[3], - # num_blocks=[d5], - # num_groups=[num_groups], - # num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[3], - # nonlocal_inds=cfg.NONLOCAL.LOCATION[3], - # nonlocal_group=cfg.NONLOCAL.GROUP[3], - # nonlocal_pool=cfg.NONLOCAL.POOL[3], - # instantiation=cfg.NONLOCAL.INSTANTIATION, - # trans_func_name=cfg.RESNET.TRANS_FUNC, - # stride_1x1=cfg.RESNET.STRIDE_1X1, - # inplace_relu=cfg.RESNET.INPLACE_RELU, - # dilation=cfg.RESNET.SPATIAL_DILATIONS[3], - # norm_module=self.norm_module, - # ) - self.labels=["rotate","light"] - self.dual_define("t4",self.labels,DecoderBlock(width_per_group * 16,width_per_group * 8,width_per_group * 8)) - self.dual_define("t3",self.labels,DecoderBlock(width_per_group * 8,width_per_group * 4, 256)) - self.dual_define("conv1x1",self.labels,nn.Sequential( - nn.Conv3d(width_per_group*4+width_per_group, 1, kernel_size=(1, 1, 1), stride=1, padding=0), nn.Sigmoid() - )) - - self.linear = nn.Sequential(nn.Linear(1, 1), nn.Sigmoid()) - - def forward_plus(self, x, y, net): - return [net(x)[0] + y[0]] - - - def dual_define(self,name,labels,net): - for label in labels: - self.add_module(f"{name}_{label}",copy.deepcopy(net)) - - - - def upsample(self, x, dims=["space"]): - ori_size = x[0].shape[2:5] - t, h, w = ori_size - if "space" in dims: - h = 2 * h - w = 2 * w - if "time" in dims: - t = 2 * t - size = (t, h, w) - return [F.interpolate(x[0], size)] - - def concat(self,x,y): - return [torch.cat([x[0],y[0]],1)] - - - - # @torchsnooper.snoop() - def forward(self, x, bboxes=None): - x1 = self.s1(x) # 1,64,8,56,56 - x2 = self.s2(x1) # 1,256,8,56,56 - x3 = self.s3(x2) # 1,512,8,28, 28 - x = self.s4(x3) # 1,1024,8,14,14 - x = self.upsample(x) # 1,1024, 8, 28, 28 - x = self.concat(x3,x)# 1,1024+512, 8, 28, 28 - x=[self.forward_branch(x,x1,x2,label) for label in self.labels] - x=torch.cat(x,1) - out = x.mean([3, 4]).view(-1, 1)*100 - out = self.linear(out) - out = out.view(x.size(0), -1) - return x,out - - - - def forward_branch(self,x,x1,x2,label): - t4=getattr(self,f"t4_{label}") - x = t4(x[0])# 1,512, 8, 28, 28 - x = self.upsample([x]) # 1,512, 8, 56, 56 - x = self.concat(x2,x)# 1,256+512, 8, 56, 56 - t3= getattr(self,f"t3_{label}") - x = t3(x[0]) # 1,256, 8, 56, 56 - x = self.concat(x1,[x]) # 1,320, 8, 56, 56 - conv1x1=getattr(self,f"conv1x1_{label}") - x = conv1x1(x[0]) # 1,2,8,56,56 - return x - - - -@MODEL_REGISTRY.register() -class ResUNetLight(nn.Module): - """ - ResNet model builder. It builds a ResNet like network backbone without - lateral connection (C2D, I3D, Slow). - - Christoph Feichtenhofer, Haoqi Fan, Jitendra Malik, and Kaiming He. - "SlowFast networks for video recognition." - https://arxiv.org/pdf/1812.03982.pdf - - Xiaolong Wang, Ross Girshick, Abhinav Gupta, and Kaiming He. - "Non-local neural networks." - https://arxiv.org/pdf/1711.07971.pdf - """ - - def __init__(self, cfg): - """ - The `__init__` method of any subclass should also contain these - arguments. - - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - super(ResUNetLight, self).__init__() - self.norm_module = get_norm(cfg) - self.enable_detection = cfg.DETECTION.ENABLE - self.enable_jitter = cfg.JITTER.ENABLE - self.num_pathways = 1 - assert cfg.DATA.TRAIN_CROP_SIZE == cfg.DATA.TEST_CROP_SIZE - self.image_size = cfg.DATA.TRAIN_CROP_SIZE - self.clip_size = cfg.DATA.NUM_FRAMES - self._construct_network(cfg) - init_helper.init_weights( - self, cfg.MODEL.FC_INIT_STD, cfg.RESNET.ZERO_INIT_FINAL_BN - ) - - def _construct_network(self, cfg): - """ - Builds a single pathway ResNet model. - - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - assert cfg.MODEL.ARCH in _POOL1.keys() - pool_size = _POOL1[cfg.MODEL.ARCH] - self.cfg = cfg - assert len({len(pool_size), self.num_pathways}) == 1 - assert cfg.RESNET.DEPTH in _MODEL_STAGE_DEPTH.keys() - - (d2, d3, d4, d5) = _MODEL_STAGE_DEPTH[cfg.RESNET.DEPTH] - - num_groups = cfg.RESNET.NUM_GROUPS - width_per_group = cfg.RESNET.WIDTH_PER_GROUP - dim_inner = num_groups * width_per_group - - temp_kernel = _TEMPORAL_KERNEL_BASIS[cfg.MODEL.ARCH] - - self.s1 = stem_helper.VideoModelStem( - dim_in=cfg.DATA.INPUT_CHANNEL_NUM, - dim_out=[width_per_group], - kernel=[temp_kernel[0][0] + [7, 7]], - stride=[[1, 2, 2]], - padding=[[temp_kernel[0][0][0] // 2, 3, 3]], - norm_module=self.norm_module, - ) - - self.s2 = resnet_helper.ResStage( - dim_in=[width_per_group], - dim_out=[width_per_group * 4], - dim_inner=[dim_inner], - temp_kernel_sizes=temp_kernel[1], - stride=cfg.RESNET.SPATIAL_STRIDES[0], - num_blocks=[d2], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[0], - nonlocal_inds=cfg.NONLOCAL.LOCATION[0], - nonlocal_group=cfg.NONLOCAL.GROUP[0], - nonlocal_pool=cfg.NONLOCAL.POOL[0], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[0], - norm_module=self.norm_module, - ) - - for pathway in range(self.num_pathways): - pool = nn.MaxPool3d( - kernel_size=pool_size[pathway], - stride=pool_size[pathway], - padding=[0, 0, 0], - ) - self.add_module("pathway{}_pool".format(pathway), pool) - - self.s3 = resnet_helper.ResStage( - dim_in=[width_per_group * 4], - dim_out=[width_per_group * 8], - dim_inner=[dim_inner * 2], - temp_kernel_sizes=temp_kernel[2], - stride=cfg.RESNET.SPATIAL_STRIDES[1], - num_blocks=[d3], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[1], - nonlocal_inds=cfg.NONLOCAL.LOCATION[1], - nonlocal_group=cfg.NONLOCAL.GROUP[1], - nonlocal_pool=cfg.NONLOCAL.POOL[1], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[1], - norm_module=self.norm_module, - ) - - self.s4 = resnet_helper.ResStage( - dim_in=[width_per_group * 8], - dim_out=[width_per_group * 16], - dim_inner=[dim_inner * 4], - temp_kernel_sizes=temp_kernel[3], - stride=cfg.RESNET.SPATIAL_STRIDES[2], - num_blocks=[d4], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[2], - nonlocal_inds=cfg.NONLOCAL.LOCATION[2], - nonlocal_group=cfg.NONLOCAL.GROUP[2], - nonlocal_pool=cfg.NONLOCAL.POOL[2], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[2], - norm_module=self.norm_module, - ) - - # self.s5 = resnet_helper.ResStage( - # dim_in=[width_per_group * 16], - # dim_out=[width_per_group * 32], - # dim_inner=[dim_inner * 8], - # temp_kernel_sizes=temp_kernel[4], - # stride=cfg.RESNET.SPATIAL_STRIDES[3], - # num_blocks=[d5], - # num_groups=[num_groups], - # num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[3], - # nonlocal_inds=cfg.NONLOCAL.LOCATION[3], - # nonlocal_group=cfg.NONLOCAL.GROUP[3], - # nonlocal_pool=cfg.NONLOCAL.POOL[3], - # instantiation=cfg.NONLOCAL.INSTANTIATION, - # trans_func_name=cfg.RESNET.TRANS_FUNC, - # stride_1x1=cfg.RESNET.STRIDE_1X1, - # inplace_relu=cfg.RESNET.INPLACE_RELU, - # dilation=cfg.RESNET.SPATIAL_DILATIONS[3], - # norm_module=self.norm_module, - # ) - self.labels=["rotate","light"] - self.dual_define("t4",self.labels,LightDecoderBlock(width_per_group * 16,width_per_group * 8,width_per_group * 4)) - self.dual_define("t3",self.labels,LightDecoderBlock(width_per_group * 4,width_per_group * 4, 128)) - self.dual_define("conv1x1",self.labels,nn.Sequential( - nn.Conv3d(128+width_per_group, 1, kernel_size=(1, 1, 1), stride=1, padding=0), nn.Sigmoid() - )) - - self.linear = nn.Sequential(nn.Linear(1, 1), nn.Sigmoid()) - - def forward_plus(self, x, y, net): - return [net(x)[0] + y[0]] - - - def dual_define(self,name,labels,net): - for label in labels: - self.add_module(f"{name}_{label}",copy.deepcopy(net)) - - - - def upsample(self, x, dims=["space"]): - ori_size = x[0].shape[2:5] - t, h, w = ori_size - if "space" in dims: - h = 2 * h - w = 2 * w - if "time" in dims: - t = 2 * t - size = (t, h, w) - return [F.interpolate(x[0], size)] - - def concat(self,x,y): - return [torch.cat([x[0],y[0]],1)] - - def get_detach_var(self,x): - return [t.detach() for t in x] - - # @torchsnooper.snoop() - def forward(self, x, freeze_backbone=False): - x1 = self.s1(x) # 1,64,8,56,56 - x2 = self.s2(x1) # 1,256,8,56,56 - x3 = self.s3(x2) # 1,512,8,28, 28 - x = self.s4(x3) # 1,1024,8,14,14 - assert isinstance(freeze_backbone,bool) - if freeze_backbone: - x=self.get_detach_var(x) - x1=self.get_detach_var(x1) - x2=self.get_detach_var(x2) - x3=self.get_detach_var(x3) - - x = self.upsample(x) # 1,1024, 8, 28, 28 - x = self.concat(x3,x)# 1,1024+512, 8, 28, 28 - x=[self.forward_branch(x,x1,x2,label) for label in self.labels] - x=torch.cat(x,1) - out = x.mean([3, 4]).view(-1, 1)*100 # 1,2,8,56,56 - out = self.linear(out) - out = out.view(x.size(0), -1) - return x,out - - - - def forward_branch(self,x,x1,x2,label): - t4=getattr(self,f"t4_{label}") - x = t4(x[0])# 1,256, 8, 28, 28 - x = self.upsample([x]) # 1,256, 8, 56, 56 - x = self.concat(x2,x)# 1,256+256, 8, 56, 56 - t3= getattr(self,f"t3_{label}") - x = t3(x[0]) # 1,128, 8, 56, 56 - x = self.concat(x1,[x]) # 1,192, 8, 56, 56 - conv1x1=getattr(self,f"conv1x1_{label}") - x = conv1x1(x[0]) # 1,2,8,56,56 - return x - - - -@MODEL_REGISTRY.register() -class ResUNetLightFix(nn.Module): - """ - ResNet model builder. It builds a ResNet like network backbone without - lateral connection (C2D, I3D, Slow). - - Christoph Feichtenhofer, Haoqi Fan, Jitendra Malik, and Kaiming He. - "SlowFast networks for video recognition." - https://arxiv.org/pdf/1812.03982.pdf - - Xiaolong Wang, Ross Girshick, Abhinav Gupta, and Kaiming He. - "Non-local neural networks." - https://arxiv.org/pdf/1711.07971.pdf - """ - - def __init__(self, cfg): - """ - The `__init__` method of any subclass should also contain these - arguments. - - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - super(ResUNetLightFix, self).__init__() - self.norm_module = get_norm(cfg) - self.enable_detection = cfg.DETECTION.ENABLE - self.enable_jitter = cfg.JITTER.ENABLE - self.num_pathways = 1 - assert cfg.DATA.TRAIN_CROP_SIZE == cfg.DATA.TEST_CROP_SIZE - self.image_size = cfg.DATA.TRAIN_CROP_SIZE - self.clip_size = cfg.DATA.NUM_FRAMES - self._construct_network(cfg) - init_helper.init_weights( - self, cfg.MODEL.FC_INIT_STD, cfg.RESNET.ZERO_INIT_FINAL_BN - ) - - def _construct_network(self, cfg): - """ - Builds a single pathway ResNet model. - - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - assert cfg.MODEL.ARCH in _POOL1.keys() - pool_size = _POOL1[cfg.MODEL.ARCH] - self.cfg = cfg - assert len({len(pool_size), self.num_pathways}) == 1 - assert cfg.RESNET.DEPTH in _MODEL_STAGE_DEPTH.keys() - - (d2, d3, d4, d5) = _MODEL_STAGE_DEPTH[cfg.RESNET.DEPTH] - - num_groups = cfg.RESNET.NUM_GROUPS - width_per_group = cfg.RESNET.WIDTH_PER_GROUP - dim_inner = num_groups * width_per_group - - temp_kernel = _TEMPORAL_KERNEL_BASIS[cfg.MODEL.ARCH] - - self.s1 = stem_helper.VideoModelStem( - dim_in=cfg.DATA.INPUT_CHANNEL_NUM, - dim_out=[width_per_group], - kernel=[temp_kernel[0][0] + [7, 7]], - stride=[[1, 2, 2]], - padding=[[temp_kernel[0][0][0] // 2, 3, 3]], - norm_module=self.norm_module, - ) - - self.s2 = resnet_helper.ResStage( - dim_in=[width_per_group], - dim_out=[width_per_group * 4], - dim_inner=[dim_inner], - temp_kernel_sizes=temp_kernel[1], - stride=cfg.RESNET.SPATIAL_STRIDES[0], - num_blocks=[d2], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[0], - nonlocal_inds=cfg.NONLOCAL.LOCATION[0], - nonlocal_group=cfg.NONLOCAL.GROUP[0], - nonlocal_pool=cfg.NONLOCAL.POOL[0], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[0], - norm_module=self.norm_module, - ) - - for pathway in range(self.num_pathways): - pool = nn.MaxPool3d( - kernel_size=pool_size[pathway], - stride=pool_size[pathway], - padding=[0, 0, 0], - ) - self.add_module("pathway{}_pool".format(pathway), pool) - - self.s3 = resnet_helper.ResStage( - dim_in=[width_per_group * 4], - dim_out=[width_per_group * 8], - dim_inner=[dim_inner * 2], - temp_kernel_sizes=temp_kernel[2], - stride=cfg.RESNET.SPATIAL_STRIDES[1], - num_blocks=[d3], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[1], - nonlocal_inds=cfg.NONLOCAL.LOCATION[1], - nonlocal_group=cfg.NONLOCAL.GROUP[1], - nonlocal_pool=cfg.NONLOCAL.POOL[1], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[1], - norm_module=self.norm_module, - ) - - self.s4 = resnet_helper.ResStage( - dim_in=[width_per_group * 8], - dim_out=[width_per_group * 16], - dim_inner=[dim_inner * 4], - temp_kernel_sizes=temp_kernel[3], - stride=cfg.RESNET.SPATIAL_STRIDES[2], - num_blocks=[d4], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[2], - nonlocal_inds=cfg.NONLOCAL.LOCATION[2], - nonlocal_group=cfg.NONLOCAL.GROUP[2], - nonlocal_pool=cfg.NONLOCAL.POOL[2], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[2], - norm_module=self.norm_module, - ) - - # self.s5 = resnet_helper.ResStage( - # dim_in=[width_per_group * 16], - # dim_out=[width_per_group * 32], - # dim_inner=[dim_inner * 8], - # temp_kernel_sizes=temp_kernel[4], - # stride=cfg.RESNET.SPATIAL_STRIDES[3], - # num_blocks=[d5], - # num_groups=[num_groups], - # num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[3], - # nonlocal_inds=cfg.NONLOCAL.LOCATION[3], - # nonlocal_group=cfg.NONLOCAL.GROUP[3], - # nonlocal_pool=cfg.NONLOCAL.POOL[3], - # instantiation=cfg.NONLOCAL.INSTANTIATION, - # trans_func_name=cfg.RESNET.TRANS_FUNC, - # stride_1x1=cfg.RESNET.STRIDE_1X1, - # inplace_relu=cfg.RESNET.INPLACE_RELU, - # dilation=cfg.RESNET.SPATIAL_DILATIONS[3], - # norm_module=self.norm_module, - # ) - self.labels=["rotate","light","skip"] - self.dual_define("t4",self.labels,LightDecoderBlock(width_per_group * 16,width_per_group * 8,width_per_group * 4)) - self.dual_define("t3",self.labels,LightDecoderBlock(width_per_group * 4,width_per_group * 4, 128)) - self.dual_define("conv1x1",self.labels,nn.Sequential( - nn.Conv3d(128+width_per_group, 64, kernel_size=(1, 1, 1), stride=1, padding=0), - nn.BatchNorm3d(64), - nn.ReLU(), - nn.Conv3d(64, 1, kernel_size=(1, 1, 1), stride=1, padding=0), - )) - - self.linear = nn.Sequential(nn.Linear(1, 1)) - - def forward_plus(self, x, y, net): - return [net(x)[0] + y[0]] - - - def dual_define(self,name,labels,net): - for label in labels: - self.add_module(f"{name}_{label}",copy.deepcopy(net)) - - - - def upsample(self, x, dims=["space"]): - ori_size = x[0].shape[2:5] - t, h, w = ori_size - if "space" in dims: - h = 2 * h - w = 2 * w - if "time" in dims: - t = 2 * t - size = (t, h, w) - return [F.interpolate(x[0], size)] - - def concat(self,x,y): - return [torch.cat([x[0],y[0]],1)] - - def get_detach_var(self,x): - return [t.detach() for t in x] - - # @torchsnooper.snoop() - def forward(self, x, freeze_backbone=False): - x1 = self.s1(x) # 1,64,8,56,56 - x2 = self.s2(x1) # 1,256,8,56,56 - x3 = self.s3(x2) # 1,512,8,28, 28 - x = self.s4(x3) # 1,1024,8,14,14 - assert isinstance(freeze_backbone,bool) - if freeze_backbone: - x=self.get_detach_var(x) - x1=self.get_detach_var(x1) - x2=self.get_detach_var(x2) - x3=self.get_detach_var(x3) - - x = self.upsample(x) # 1,1024, 8, 28, 28 - x = self.concat(x3,x)# 1,1024+512, 8, 28, 28 - x=[self.forward_branch(x,x1,x2,label) for label in self.labels] - x=torch.cat(x,1) - x=torch.sigmoid(x) - out = x.mean([3, 4]).view(-1, 1)*100 # 1,2,8,56,56 - out = self.linear(out) - out = out.view(x.size(0), -1) - out = torch.sigmoid(out) - return x,out - - - - def forward_branch(self,x,x1,x2,label): - t4=getattr(self,f"t4_{label}") - x = t4(x[0])# 1,256, 8, 28, 28 - x = self.upsample([x]) # 1,256, 8, 56, 56 - x = self.concat(x2,x)# 1,256+256, 8, 56, 56 - t3= getattr(self,f"t3_{label}") - x = t3(x[0]) # 1,128, 8, 56, 56 - x = self.concat(x1,[x]) # 1,192, 8, 56, 56 - conv1x1=getattr(self,f"conv1x1_{label}") - x = conv1x1(x[0]) # 1,2,8,56,56 - return x - - - -@MODEL_REGISTRY.register() -class ResUNetContinus(nn.Module): - """ - ResNet model builder. It builds a ResNet like network backbone without - lateral connection (C2D, I3D, Slow). - - Christoph Feichtenhofer, Haoqi Fan, Jitendra Malik, and Kaiming He. - "SlowFast networks for video recognition." - https://arxiv.org/pdf/1812.03982.pdf - - Xiaolong Wang, Ross Girshick, Abhinav Gupta, and Kaiming He. - "Non-local neural networks." - https://arxiv.org/pdf/1711.07971.pdf - """ - - def __init__(self, cfg): - """ - The `__init__` method of any subclass should also contain these - arguments. - - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - super(ResUNetContinus, self).__init__() - self.norm_module = get_norm(cfg) - self.enable_detection = cfg.DETECTION.ENABLE - self.enable_jitter = cfg.JITTER.ENABLE - self.num_pathways = 1 - assert cfg.DATA.TRAIN_CROP_SIZE == cfg.DATA.TEST_CROP_SIZE - self.image_size = cfg.DATA.TRAIN_CROP_SIZE - self.clip_size = cfg.DATA.NUM_FRAMES - self._construct_network(cfg) - init_helper.init_weights( - self, cfg.MODEL.FC_INIT_STD, cfg.RESNET.ZERO_INIT_FINAL_BN - ) - - def _construct_network(self, cfg): - """ - Builds a single pathway ResNet model. - - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - assert cfg.MODEL.ARCH in _POOL1.keys() - pool_size = _POOL1[cfg.MODEL.ARCH] - self.cfg = cfg - assert len({len(pool_size), self.num_pathways}) == 1 - assert cfg.RESNET.DEPTH in _MODEL_STAGE_DEPTH.keys() - - (d2, d3, d4, d5) = _MODEL_STAGE_DEPTH[cfg.RESNET.DEPTH] - - num_groups = cfg.RESNET.NUM_GROUPS - width_per_group = cfg.RESNET.WIDTH_PER_GROUP - dim_inner = num_groups * width_per_group - - temp_kernel = _TEMPORAL_KERNEL_BASIS[cfg.MODEL.ARCH] - - self.s1 = stem_helper.VideoModelStem( - dim_in=cfg.DATA.INPUT_CHANNEL_NUM, - dim_out=[width_per_group], - kernel=[temp_kernel[0][0] + [7, 7]], - stride=[[1, 2, 2]], - padding=[[temp_kernel[0][0][0] // 2, 3, 3]], - norm_module=self.norm_module, - ) - - self.s2 = resnet_helper.ResStage( - dim_in=[width_per_group], - dim_out=[width_per_group * 4], - dim_inner=[dim_inner], - temp_kernel_sizes=temp_kernel[1], - stride=cfg.RESNET.SPATIAL_STRIDES[0], - num_blocks=[d2], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[0], - nonlocal_inds=cfg.NONLOCAL.LOCATION[0], - nonlocal_group=cfg.NONLOCAL.GROUP[0], - nonlocal_pool=cfg.NONLOCAL.POOL[0], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[0], - norm_module=self.norm_module, - ) - - for pathway in range(self.num_pathways): - pool = nn.MaxPool3d( - kernel_size=pool_size[pathway], - stride=pool_size[pathway], - padding=[0, 0, 0], - ) - self.add_module("pathway{}_pool".format(pathway), pool) - - self.s3 = resnet_helper.ResStage( - dim_in=[width_per_group * 4], - dim_out=[width_per_group * 8], - dim_inner=[dim_inner * 2], - temp_kernel_sizes=temp_kernel[2], - stride=cfg.RESNET.SPATIAL_STRIDES[1], - num_blocks=[d3], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[1], - nonlocal_inds=cfg.NONLOCAL.LOCATION[1], - nonlocal_group=cfg.NONLOCAL.GROUP[1], - nonlocal_pool=cfg.NONLOCAL.POOL[1], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[1], - norm_module=self.norm_module, - ) - - self.s4 = resnet_helper.ResStage( - dim_in=[width_per_group * 8], - dim_out=[width_per_group * 16], - dim_inner=[dim_inner * 4], - temp_kernel_sizes=temp_kernel[3], - stride=cfg.RESNET.SPATIAL_STRIDES[2], - num_blocks=[d4], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[2], - nonlocal_inds=cfg.NONLOCAL.LOCATION[2], - nonlocal_group=cfg.NONLOCAL.GROUP[2], - nonlocal_pool=cfg.NONLOCAL.POOL[2], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[2], - norm_module=self.norm_module, - ) - - # self.s5 = resnet_helper.ResStage( - # dim_in=[width_per_group * 16], - # dim_out=[width_per_group * 32], - # dim_inner=[dim_inner * 8], - # temp_kernel_sizes=temp_kernel[4], - # stride=cfg.RESNET.SPATIAL_STRIDES[3], - # num_blocks=[d5], - # num_groups=[num_groups], - # num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[3], - # nonlocal_inds=cfg.NONLOCAL.LOCATION[3], - # nonlocal_group=cfg.NONLOCAL.GROUP[3], - # nonlocal_pool=cfg.NONLOCAL.POOL[3], - # instantiation=cfg.NONLOCAL.INSTANTIATION, - # trans_func_name=cfg.RESNET.TRANS_FUNC, - # stride_1x1=cfg.RESNET.STRIDE_1X1, - # inplace_relu=cfg.RESNET.INPLACE_RELU, - # dilation=cfg.RESNET.SPATIAL_DILATIONS[3], - # norm_module=self.norm_module, - # ) - self.labels=["all"] - self.dual_define("t4",self.labels,LightDecoderBlock(width_per_group * 16,width_per_group * 8,width_per_group * 4)) - self.dual_define("t3",self.labels,LightDecoderBlock(width_per_group * 4,width_per_group * 4, 128)) - self.dual_define("conv1x1",self.labels,nn.Sequential( - nn.Conv3d(128+width_per_group, 64, kernel_size=(1, 1, 1), stride=1, padding=0), - nn.BatchNorm3d(64), - nn.ReLU(), - nn.Conv3d(64, 1, kernel_size=(1, 1, 1), stride=1, padding=0), - )) - - self.linear = nn.Sequential(nn.Linear(1, 1)) - - def forward_plus(self, x, y, net): - return [net(x)[0] + y[0]] - - - def dual_define(self,name,labels,net): - for label in labels: - self.add_module(f"{name}_{label}",copy.deepcopy(net)) - - - - def upsample(self, x, dims=["space"]): - ori_size = x[0].shape[2:5] - t, h, w = ori_size - if "space" in dims: - h = 2 * h - w = 2 * w - if "time" in dims: - t = 2 * t - size = (t, h, w) - return [F.interpolate(x[0], size)] - - def concat(self,x,y): - return [torch.cat([x[0],y[0]],1)] - - def get_detach_var(self,x): - return [t.detach() for t in x] - - # @torchsnooper.snoop() - def forward(self, x, freeze_backbone=False): - x1 = self.s1(x) # 1,64,8,56,56 - x2 = self.s2(x1) # 1,256,8,56,56 - x3 = self.s3(x2) # 1,512,8,28, 28 - x = self.s4(x3) # 1,1024,8,14,14 - assert isinstance(freeze_backbone,bool) - if freeze_backbone: - x=self.get_detach_var(x) - x1=self.get_detach_var(x1) - x2=self.get_detach_var(x2) - x3=self.get_detach_var(x3) - - x = self.upsample(x) # 1,1024, 8, 28, 28 - x = self.concat(x3,x)# 1,1024+512, 8, 28, 28 - x=[self.forward_branch(x,x1,x2,label) for label in self.labels] - x=torch.cat(x,1) - x=torch.sigmoid(x) - out = x.mean([3, 4]).view(-1, 1)*100 # 1,2,8,56,56 - out = self.linear(out) - out = out.view(x.size(0), -1) - out = torch.sigmoid(out) - return x,out - - - def forward_branch(self,x,x1,x2,label): - t4= getattr(self,f"t4_{label}") - x = t4(x[0])# 1,256, 8, 28, 28 - x = self.upsample([x]) # 1,256, 8, 56, 56 - x = self.concat(x2,x)# 1,256+256, 8, 56, 56 - t3= getattr(self,f"t3_{label}") - x = t3(x[0]) # 1,128, 8, 56, 56 - x = self.concat(x1,[x]) # 1,192, 8, 56, 56 - conv1x1=getattr(self,f"conv1x1_{label}") - x = conv1x1(x[0]) # 1,2,8,56,56 - return x - - - - -@MODEL_REGISTRY.register() -class ResUNetCommon(nn.Module): - """ - ResNet model builder. It builds a ResNet like network backbone without - lateral connection (C2D, I3D, Slow). - - Christoph Feichtenhofer, Haoqi Fan, Jitendra Malik, and Kaiming He. - "SlowFast networks for video recognition." - https://arxiv.org/pdf/1812.03982.pdf - - Xiaolong Wang, Ross Girshick, Abhinav Gupta, and Kaiming He. - "Non-local neural networks." - https://arxiv.org/pdf/1711.07971.pdf - """ - - def __init__(self, cfg): - """ - The `__init__` method of any subclass should also contain these - arguments. - - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - super(ResUNetCommon, self).__init__() - self.norm_module = get_norm(cfg) - self.enable_detection = cfg.DETECTION.ENABLE - self.enable_jitter = cfg.JITTER.ENABLE - self.num_pathways = 1 - assert cfg.DATA.TRAIN_CROP_SIZE == cfg.DATA.TEST_CROP_SIZE - self.image_size = cfg.DATA.TRAIN_CROP_SIZE - self.clip_size = cfg.DATA.NUM_FRAMES - self._construct_network(cfg) - init_helper.init_weights( - self, cfg.MODEL.FC_INIT_STD, cfg.RESNET.ZERO_INIT_FINAL_BN - ) - - def _construct_network(self, cfg): - """ - Builds a single pathway ResNet model. - - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - assert cfg.MODEL.ARCH in _POOL1.keys() - pool_size = _POOL1[cfg.MODEL.ARCH] - self.cfg = cfg - assert len({len(pool_size), self.num_pathways}) == 1 - assert cfg.RESNET.DEPTH in _MODEL_STAGE_DEPTH.keys() - - (d2, d3, d4, d5) = _MODEL_STAGE_DEPTH[cfg.RESNET.DEPTH] - - num_groups = cfg.RESNET.NUM_GROUPS - width_per_group = cfg.RESNET.WIDTH_PER_GROUP - dim_inner = num_groups * width_per_group - - temp_kernel = _TEMPORAL_KERNEL_BASIS[cfg.MODEL.ARCH] - - self.s1 = stem_helper.VideoModelStem( - dim_in=cfg.DATA.INPUT_CHANNEL_NUM, - dim_out=[width_per_group], - kernel=[temp_kernel[0][0] + [7, 7]], - stride=[[1, 2, 2]], - padding=[[temp_kernel[0][0][0] // 2, 3, 3]], - norm_module=self.norm_module, - ) - - self.s2 = resnet_helper.ResStage( - dim_in=[width_per_group], - dim_out=[width_per_group * 4], - dim_inner=[dim_inner], - temp_kernel_sizes=temp_kernel[1], - stride=cfg.RESNET.SPATIAL_STRIDES[0], - num_blocks=[d2], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[0], - nonlocal_inds=cfg.NONLOCAL.LOCATION[0], - nonlocal_group=cfg.NONLOCAL.GROUP[0], - nonlocal_pool=cfg.NONLOCAL.POOL[0], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[0], - norm_module=self.norm_module, - ) - - for pathway in range(self.num_pathways): - pool = nn.MaxPool3d( - kernel_size=pool_size[pathway], - stride=pool_size[pathway], - padding=[0, 0, 0], - ) - self.add_module("pathway{}_pool".format(pathway), pool) - - self.s3 = resnet_helper.ResStage( - dim_in=[width_per_group * 4], - dim_out=[width_per_group * 8], - dim_inner=[dim_inner * 2], - temp_kernel_sizes=temp_kernel[2], - stride=cfg.RESNET.SPATIAL_STRIDES[1], - num_blocks=[d3], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[1], - nonlocal_inds=cfg.NONLOCAL.LOCATION[1], - nonlocal_group=cfg.NONLOCAL.GROUP[1], - nonlocal_pool=cfg.NONLOCAL.POOL[1], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[1], - norm_module=self.norm_module, - ) - - self.s4 = resnet_helper.ResStage( - dim_in=[width_per_group * 8], - dim_out=[width_per_group * 16], - dim_inner=[dim_inner * 4], - temp_kernel_sizes=temp_kernel[3], - stride=cfg.RESNET.SPATIAL_STRIDES[2], - num_blocks=[d4], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[2], - nonlocal_inds=cfg.NONLOCAL.LOCATION[2], - nonlocal_group=cfg.NONLOCAL.GROUP[2], - nonlocal_pool=cfg.NONLOCAL.POOL[2], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[2], - norm_module=self.norm_module, - ) - - # self.s5 = resnet_helper.ResStage( - # dim_in=[width_per_group * 16], - # dim_out=[width_per_group * 32], - # dim_inner=[dim_inner * 8], - # temp_kernel_sizes=temp_kernel[4], - # stride=cfg.RESNET.SPATIAL_STRIDES[3], - # num_blocks=[d5], - # num_groups=[num_groups], - # num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[3], - # nonlocal_inds=cfg.NONLOCAL.LOCATION[3], - # nonlocal_group=cfg.NONLOCAL.GROUP[3], - # nonlocal_pool=cfg.NONLOCAL.POOL[3], - # instantiation=cfg.NONLOCAL.INSTANTIATION, - # trans_func_name=cfg.RESNET.TRANS_FUNC, - # stride_1x1=cfg.RESNET.STRIDE_1X1, - # inplace_relu=cfg.RESNET.INPLACE_RELU, - # dilation=cfg.RESNET.SPATIAL_DILATIONS[3], - # norm_module=self.norm_module, - # ) - self.labels=cfg.RESNET.LABELS - self.dual_define("t4",self.labels,LightDecoderBlock(width_per_group * 16,width_per_group * 8,width_per_group * 4)) - self.dual_define("t3",self.labels,LightDecoderBlock(width_per_group * 4,width_per_group * 4, 128)) - self.dual_define("conv1x1",self.labels,nn.Sequential( - nn.Conv3d(128+width_per_group, 64, kernel_size=(1, 1, 1), stride=1, padding=0), - nn.BatchNorm3d(64), - nn.ReLU(), - nn.Conv3d(64, 1, kernel_size=(1, 1, 1), stride=1, padding=0), - )) - - self.linear = nn.Linear(1, 2) - - def forward_plus(self, x, y, net): - return [net(x)[0] + y[0]] - - - def dual_define(self,name,labels,net): - for label in labels: - self.add_module(f"{name}_{label}",copy.deepcopy(net)) - - - def upsample(self, x, dims=["space"]): - ori_size = x[0].shape[2:5] - t, h, w = ori_size - if "space" in dims: - h = 2 * h - w = 2 * w - if "time" in dims: - t = 2 * t - size = (t, h, w) - return [F.interpolate(x[0], size)] - - def concat(self,x,y): - return [torch.cat([x[0],y[0]],1)] - - def get_detach_var(self,x): - return [t.detach() for t in x] - - # @torchsnooper.snoop() - def forward(self, x, freeze_backbone=False): - x = self.get_detach_var(x) - x1 = self.s1(x) # 1,64,8,56,56 - x2 = self.s2(x1) # 1,256,8,56,56 - x3 = self.s3(x2) # 1,512,8,28, 28 - feat= self.s4(x3) # 1,1024,8,14,14 - assert isinstance(freeze_backbone,bool) - if freeze_backbone: - feat=self.get_detach_var(feat) - x1=self.get_detach_var(x1) - x2=self.get_detach_var(x2) - x3=self.get_detach_var(x3) - - feat = self.upsample(feat) # 1,1024, 8, 28, 28 - feat = self.concat(x3,feat)# 1,1024+512, 8, 28, 28 - reg_out=[self.forward_branch(feat,x1,x2,label) for label in self.labels] - reg_out=torch.cat(reg_out,1) - reg_out=torch.sigmoid(reg_out) - class_out = reg_out.mean([3, 4]).view(-1, 1)*100 # 1,2,8,56,56 - class_out = self.linear(class_out) - class_out = class_out.view(reg_out.size(0),len(self.labels),-1) - class_out = class_out - return reg_out,class_out - - - def forward_branch(self,feat,x1,x2,label): - t4= getattr(self,f"t4_{label}") - feat = t4(feat[0])# 1,256, 8, 28, 28 - feat = self.upsample([feat]) # 1,256, 8, 56, 56 - feat = self.concat(x2,feat)# 1,256+256, 8, 56, 56 - t3= getattr(self,f"t3_{label}") - feat = t3(feat[0]) # 1,128, 8, 56, 56 - feat = self.concat(x1,[feat]) # 1,192, 8, 56, 56 - conv1x1=getattr(self,f"conv1x1_{label}") - feat = conv1x1(feat[0]) # 1,2,8,56,56 - return feat - - - - -@MODEL_REGISTRY.register() -class ResUNetCommon2(nn.Module): - """ - ResNet model builder. It builds a ResNet like network backbone without - lateral connection (C2D, I3D, Slow). - - Christoph Feichtenhofer, Haoqi Fan, Jitendra Malik, and Kaiming He. - "SlowFast networks for video recognition." - https://arxiv.org/pdf/1812.03982.pdf - - Xiaolong Wang, Ross Girshick, Abhinav Gupta, and Kaiming He. - "Non-local neural networks." - https://arxiv.org/pdf/1711.07971.pdf - """ - - def __init__(self, cfg): - """ - The `__init__` method of any subclass should also contain these - arguments. - - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - super(ResUNetCommon2, self).__init__() - self.norm_module = get_norm(cfg) - self.enable_detection = cfg.DETECTION.ENABLE - self.enable_jitter = cfg.JITTER.ENABLE - self.num_pathways = 1 - assert cfg.DATA.TRAIN_CROP_SIZE == cfg.DATA.TEST_CROP_SIZE - self.image_size = cfg.DATA.TRAIN_CROP_SIZE - self.clip_size = cfg.DATA.NUM_FRAMES - self._construct_network(cfg) - init_helper.init_weights( - self, cfg.MODEL.FC_INIT_STD, cfg.RESNET.ZERO_INIT_FINAL_BN - ) - - def _construct_network(self, cfg): - """ - Builds a single pathway ResNet model. - - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - assert cfg.MODEL.ARCH in _POOL1.keys() - pool_size = _POOL1[cfg.MODEL.ARCH] - self.cfg = cfg - assert len({len(pool_size), self.num_pathways}) == 1 - assert cfg.RESNET.DEPTH in _MODEL_STAGE_DEPTH.keys() - - (d2, d3, d4, d5) = _MODEL_STAGE_DEPTH[cfg.RESNET.DEPTH] - - num_groups = cfg.RESNET.NUM_GROUPS - width_per_group = cfg.RESNET.WIDTH_PER_GROUP - dim_inner = num_groups * width_per_group - - temp_kernel = _TEMPORAL_KERNEL_BASIS[cfg.MODEL.ARCH] - - self.s1 = stem_helper.VideoModelStem( - dim_in=cfg.DATA.INPUT_CHANNEL_NUM, - dim_out=[width_per_group], - kernel=[temp_kernel[0][0] + [7, 7]], - stride=[[1, 2, 2]], - padding=[[temp_kernel[0][0][0] // 2, 3, 3]], - norm_module=self.norm_module, - ) - - self.s2 = resnet_helper.ResStage( - dim_in=[width_per_group], - dim_out=[width_per_group * 4], - dim_inner=[dim_inner], - temp_kernel_sizes=temp_kernel[1], - stride=cfg.RESNET.SPATIAL_STRIDES[0], - num_blocks=[d2], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[0], - nonlocal_inds=cfg.NONLOCAL.LOCATION[0], - nonlocal_group=cfg.NONLOCAL.GROUP[0], - nonlocal_pool=cfg.NONLOCAL.POOL[0], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[0], - norm_module=self.norm_module, - ) - - for pathway in range(self.num_pathways): - pool = nn.MaxPool3d( - kernel_size=pool_size[pathway], - stride=pool_size[pathway], - padding=[0, 0, 0], - ) - self.add_module("pathway{}_pool".format(pathway), pool) - - self.s3 = resnet_helper.ResStage( - dim_in=[width_per_group * 4], - dim_out=[width_per_group * 8], - dim_inner=[dim_inner * 2], - temp_kernel_sizes=temp_kernel[2], - stride=cfg.RESNET.SPATIAL_STRIDES[1], - num_blocks=[d3], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[1], - nonlocal_inds=cfg.NONLOCAL.LOCATION[1], - nonlocal_group=cfg.NONLOCAL.GROUP[1], - nonlocal_pool=cfg.NONLOCAL.POOL[1], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[1], - norm_module=self.norm_module, - ) - - self.s4 = resnet_helper.ResStage( - dim_in=[width_per_group * 8], - dim_out=[width_per_group * 16], - dim_inner=[dim_inner * 4], - temp_kernel_sizes=temp_kernel[3], - stride=cfg.RESNET.SPATIAL_STRIDES[2], - num_blocks=[d4], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[2], - nonlocal_inds=cfg.NONLOCAL.LOCATION[2], - nonlocal_group=cfg.NONLOCAL.GROUP[2], - nonlocal_pool=cfg.NONLOCAL.POOL[2], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[2], - norm_module=self.norm_module, - ) - - # self.s5 = resnet_helper.ResStage( - # dim_in=[width_per_group * 16], - # dim_out=[width_per_group * 32], - # dim_inner=[dim_inner * 8], - # temp_kernel_sizes=temp_kernel[4], - # stride=cfg.RESNET.SPATIAL_STRIDES[3], - # num_blocks=[d5], - # num_groups=[num_groups], - # num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[3], - # nonlocal_inds=cfg.NONLOCAL.LOCATION[3], - # nonlocal_group=cfg.NONLOCAL.GROUP[3], - # nonlocal_pool=cfg.NONLOCAL.POOL[3], - # instantiation=cfg.NONLOCAL.INSTANTIATION, - # trans_func_name=cfg.RESNET.TRANS_FUNC, - # stride_1x1=cfg.RESNET.STRIDE_1X1, - # inplace_relu=cfg.RESNET.INPLACE_RELU, - # dilation=cfg.RESNET.SPATIAL_DILATIONS[3], - # norm_module=self.norm_module, - # ) - self.labels=cfg.RESNET.LABELS - self.dual_define("t4",self.labels,LightDecoderBlock(width_per_group * 16,width_per_group * 8,width_per_group * 4)) - self.dual_define("t3",self.labels,LightDecoderBlock(width_per_group * 4,width_per_group * 4, 128)) - self.dual_define("conv1x1",self.labels,nn.Sequential( - nn.Conv3d(128+width_per_group, 64, kernel_size=(1, 1, 1), stride=1, padding=0), - nn.BatchNorm3d(64), - nn.ReLU(), - nn.Conv3d(64, 1, kernel_size=(1, 1, 1), stride=1, padding=0), - )) - - self.linear = nn.Linear(1, 1) - - def forward_plus(self, x, y, net): - return [net(x)[0] + y[0]] - - - def dual_define(self,name,labels,net): - for label in labels: - self.add_module(f"{name}_{label}",copy.deepcopy(net)) - - - def upsample(self, x, dims=["space"]): - ori_size = x[0].shape[2:5] - t, h, w = ori_size - if "space" in dims: - h = 2 * h - w = 2 * w - if "time" in dims: - t = 2 * t - size = (t, h, w) - return [F.interpolate(x[0], size)] - - def concat(self,x,y): - return [torch.cat([x[0],y[0]],1)] - - def get_detach_var(self,x): - return [t.detach() for t in x] - - # @torchsnooper.snoop() - def forward(self, x, freeze_backbone=False): - x = self.get_detach_var(x) - x1 = self.s1(x) # 1,64,8,56,56 - x2 = self.s2(x1) # 1,256,8,56,56 - x3 = self.s3(x2) # 1,512,8,28, 28 - feat= self.s4(x3) # 1,1024,8,14,14 - assert isinstance(freeze_backbone,bool) - if freeze_backbone: - feat=self.get_detach_var(feat) - x1=self.get_detach_var(x1) - x2=self.get_detach_var(x2) - x3=self.get_detach_var(x3) - - feat = self.upsample(feat) # 1,1024, 8, 28, 28 - feat = self.concat(x3,feat)# 1,1024+512, 8, 28, 28 - reg_out=[self.forward_branch(feat,x1,x2,label) for label in self.labels] - reg_out=torch.cat(reg_out,1) - reg_out=torch.sigmoid(reg_out) - class_out = reg_out.mean([3, 4]).view(-1, 1)*100 # 1,2,8,56,56 - class_out = self.linear(class_out) - class_out = class_out.view(reg_out.size(0),len(self.labels),-1) - class_out = torch.sigmoid(class_out) - return reg_out,class_out - - - def forward_branch(self,feat,x1,x2,label): - t4= getattr(self,f"t4_{label}") - feat = t4(feat[0])# 1,256, 8, 28, 28 - feat = self.upsample([feat]) # 1,256, 8, 56, 56 - feat = self.concat(x2,feat)# 1,256+256, 8, 56, 56 - t3= getattr(self,f"t3_{label}") - feat = t3(feat[0]) # 1,128, 8, 56, 56 - feat = self.concat(x1,[feat]) # 1,192, 8, 56, 56 - conv1x1=getattr(self,f"conv1x1_{label}") - feat = conv1x1(feat[0]) # 1,2,8,56,56 - return feat - - - -@MODEL_REGISTRY.register() -class ResUNetStrong(nn.Module): - """ - ResNet model builder. It builds a ResNet like network backbone without - lateral connection (C2D, I3D, Slow). - - Christoph Feichtenhofer, Haoqi Fan, Jitendra Malik, and Kaiming He. - "SlowFast networks for video recognition." - https://arxiv.org/pdf/1812.03982.pdf - - Xiaolong Wang, Ross Girshick, Abhinav Gupta, and Kaiming He. - "Non-local neural networks." - https://arxiv.org/pdf/1711.07971.pdf - """ - - def __init__(self, cfg): - """ - The `__init__` method of any subclass should also contain these - arguments. - - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - super(ResUNetStrong, self).__init__() - self.norm_module = get_norm(cfg) - self.enable_detection = cfg.DETECTION.ENABLE - self.enable_jitter = cfg.JITTER.ENABLE - self.num_pathways = 1 - assert cfg.DATA.TRAIN_CROP_SIZE == cfg.DATA.TEST_CROP_SIZE - self.image_size = cfg.DATA.TRAIN_CROP_SIZE - self.clip_size = cfg.DATA.NUM_FRAMES - self._construct_network(cfg) - init_helper.init_weights( - self, cfg.MODEL.FC_INIT_STD, cfg.RESNET.ZERO_INIT_FINAL_BN - ) - - def _construct_network(self, cfg): - """ - Builds a single pathway ResNet model. - - Args: - cfg (CfgNode): model building configs, details are in the - comments of the config file. - """ - assert cfg.MODEL.ARCH in _POOL1.keys() - pool_size = _POOL1[cfg.MODEL.ARCH] - self.cfg = cfg - assert len({len(pool_size), self.num_pathways}) == 1 - assert cfg.RESNET.DEPTH in _MODEL_STAGE_DEPTH.keys() - - (d2, d3, d4, d5) = _MODEL_STAGE_DEPTH[cfg.RESNET.DEPTH] - - num_groups = cfg.RESNET.NUM_GROUPS - width_per_group = cfg.RESNET.WIDTH_PER_GROUP - dim_inner = num_groups * width_per_group - - temp_kernel = _TEMPORAL_KERNEL_BASIS[cfg.MODEL.ARCH] - - self.s1 = stem_helper.VideoModelStem( - dim_in=cfg.DATA.INPUT_CHANNEL_NUM, - dim_out=[width_per_group], - kernel=[temp_kernel[0][0] + [7, 7]], - stride=[[1, 2, 2]], - padding=[[temp_kernel[0][0][0] // 2, 3, 3]], - norm_module=self.norm_module, - ) - - self.s2 = resnet_helper.ResStage( - dim_in=[width_per_group], - dim_out=[width_per_group * 4], - dim_inner=[dim_inner], - temp_kernel_sizes=temp_kernel[1], - stride=cfg.RESNET.SPATIAL_STRIDES[0], - num_blocks=[d2], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[0], - nonlocal_inds=cfg.NONLOCAL.LOCATION[0], - nonlocal_group=cfg.NONLOCAL.GROUP[0], - nonlocal_pool=cfg.NONLOCAL.POOL[0], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[0], - norm_module=self.norm_module, - ) - - for pathway in range(self.num_pathways): - pool = nn.MaxPool3d( - kernel_size=pool_size[pathway], - stride=pool_size[pathway], - padding=[0, 0, 0], - ) - self.add_module("pathway{}_pool".format(pathway), pool) - - self.s3 = resnet_helper.ResStage( - dim_in=[width_per_group * 4], - dim_out=[width_per_group * 8], - dim_inner=[dim_inner * 2], - temp_kernel_sizes=temp_kernel[2], - stride=cfg.RESNET.SPATIAL_STRIDES[1], - num_blocks=[d3], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[1], - nonlocal_inds=cfg.NONLOCAL.LOCATION[1], - nonlocal_group=cfg.NONLOCAL.GROUP[1], - nonlocal_pool=cfg.NONLOCAL.POOL[1], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[1], - norm_module=self.norm_module, - ) - - self.s4 = resnet_helper.ResStage( - dim_in=[width_per_group * 8], - dim_out=[width_per_group * 16], - dim_inner=[dim_inner * 4], - temp_kernel_sizes=temp_kernel[3], - stride=cfg.RESNET.SPATIAL_STRIDES[2], - num_blocks=[d4], - num_groups=[num_groups], - num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[2], - nonlocal_inds=cfg.NONLOCAL.LOCATION[2], - nonlocal_group=cfg.NONLOCAL.GROUP[2], - nonlocal_pool=cfg.NONLOCAL.POOL[2], - instantiation=cfg.NONLOCAL.INSTANTIATION, - trans_func_name=cfg.RESNET.TRANS_FUNC, - stride_1x1=cfg.RESNET.STRIDE_1X1, - inplace_relu=cfg.RESNET.INPLACE_RELU, - dilation=cfg.RESNET.SPATIAL_DILATIONS[2], - norm_module=self.norm_module, - ) - - # self.s5 = resnet_helper.ResStage( - # dim_in=[width_per_group * 16], - # dim_out=[width_per_group * 32], - # dim_inner=[dim_inner * 8], - # temp_kernel_sizes=temp_kernel[4], - # stride=cfg.RESNET.SPATIAL_STRIDES[3], - # num_blocks=[d5], - # num_groups=[num_groups], - # num_block_temp_kernel=cfg.RESNET.NUM_BLOCK_TEMP_KERNEL[3], - # nonlocal_inds=cfg.NONLOCAL.LOCATION[3], - # nonlocal_group=cfg.NONLOCAL.GROUP[3], - # nonlocal_pool=cfg.NONLOCAL.POOL[3], - # instantiation=cfg.NONLOCAL.INSTANTIATION, - # trans_func_name=cfg.RESNET.TRANS_FUNC, - # stride_1x1=cfg.RESNET.STRIDE_1X1, - # inplace_relu=cfg.RESNET.INPLACE_RELU, - # dilation=cfg.RESNET.SPATIAL_DILATIONS[3], - # norm_module=self.norm_module, - # ) - - self.labels=cfg.RESNET.LABELS - self.dual_define("t4",self.labels,ResDecoderBlock(width_per_group * 16,width_per_group * 8,width_per_group * 8)) - self.dual_define("t3",self.labels,ResDecoderBlock(width_per_group * 8,width_per_group * 4, 256)) - self.dual_define("conv1x1",self.labels,nn.Sequential( - nn.Conv3d(width_per_group*4+width_per_group, 128, kernel_size=(1, 1, 1), stride=1, padding=0), - nn.BatchNorm3d(128), - nn.ReLU(), - nn.Conv3d(128, 1, kernel_size=(1, 1, 1), stride=1, padding=0), - )) - - self.linear = nn.Linear(1, 1) - - def forward_plus(self, x, y, net): - return [net(x)[0] + y[0]] - - - def dual_define(self,name,labels,net): - for label in labels: - self.add_module(f"{name}_{label}",copy.deepcopy(net)) - - - def upsample(self, x, dims=["space"]): - ori_size = x[0].shape[2:5] - t, h, w = ori_size - if "space" in dims: - h = 2 * h - w = 2 * w - if "time" in dims: - t = 2 * t - size = (t, h, w) - return [F.interpolate(x[0], size)] - - def concat(self,x,y): - return [torch.cat([x[0],y[0]],1)] - - def get_detach_var(self,x): - return [t.detach() for t in x] - - # @torchsnooper.snoop() - def forward(self, x, freeze_backbone=False): - x = self.get_detach_var(x) - x1 = self.s1(x) # 1,64,8,56,56 - x2 = self.s2(x1) # 1,256,8,56,56 - x3 = self.s3(x2) # 1,512,8,28, 28 - feat= self.s4(x3) # 1,1024,8,14,14 - assert isinstance(freeze_backbone,bool) - if freeze_backbone: - feat=self.get_detach_var(feat) - x1=self.get_detach_var(x1) - x2=self.get_detach_var(x2) - x3=self.get_detach_var(x3) - - feat = self.upsample(feat) # 1,1024, 8, 28, 28 - feat = self.concat(x3,feat)# 1,1024+512, 8, 28, 28 - reg_out=[self.forward_branch(feat,x1,x2,label) for label in self.labels] - reg_out=torch.cat(reg_out,1) - reg_out=torch.sigmoid(reg_out) - class_out = reg_out.mean([3, 4]).view(-1, 1)*100 # 1,2,8,56,56 - class_out = self.linear(class_out) - class_out = class_out.view(reg_out.size(0),len(self.labels),-1) - class_out = torch.sigmoid(class_out) - return reg_out,class_out - - - def forward_branch(self,feat,x1,x2,label): - t4= getattr(self,f"t4_{label}") - feat = t4(feat[0])# 1,256, 8, 28, 28 - feat = self.upsample([feat]) # 1,256, 8, 56, 56 - feat = self.concat(x2,feat)# 1,256+256, 8, 56, 56 - t3= getattr(self,f"t3_{label}") - feat = t3(feat[0]) # 1,128, 8, 56, 56 - feat = self.concat(x1,[feat]) # 1,192, 8, 56, 56 - conv1x1=getattr(self,f"conv1x1_{label}") - feat = conv1x1(feat[0]) # 1,2,8,56,56 - return feat diff --git a/video/pwtf-dvd/model_code/inference/slowfast/utils/__init__.py b/video/pwtf-dvd/model_code/inference/slowfast/utils/__init__.py deleted file mode 100644 index 8dbe96a785072a24a9bcc4841a1934024f2b06a1..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/utils/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. diff --git a/video/pwtf-dvd/model_code/inference/slowfast/utils/ava_eval_helper.py b/video/pwtf-dvd/model_code/inference/slowfast/utils/ava_eval_helper.py deleted file mode 100644 index 9e8ba5468077053a4dcf1920f25256a1a241f0b9..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/utils/ava_eval_helper.py +++ /dev/null @@ -1,302 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -############################################################################## -# -# Based on: -# -------------------------------------------------------- -# ActivityNet -# Copyright (c) 2015 ActivityNet -# Licensed under The MIT License -# [see https://github.com/activitynet/ActivityNet/blob/master/LICENSE for details] -# -------------------------------------------------------- - -"""Helper functions for AVA evaluation.""" - -from __future__ import ( - absolute_import, - division, - print_function, - unicode_literals, -) -import csv -import logging -import numpy as np -import pprint -import time -from collections import defaultdict -from fvcore.common.file_io import PathManager - -from slowfast.utils.ava_evaluation import ( - object_detection_evaluation, - standard_fields, -) - -logger = logging.getLogger(__name__) - - -def make_image_key(video_id, timestamp): - """Returns a unique identifier for a video id & timestamp.""" - return "%s,%04d" % (video_id, int(timestamp)) - - -def read_csv(csv_file, class_whitelist=None, load_score=False): - """Loads boxes and class labels from a CSV file in the AVA format. - CSV file format described at https://research.google.com/ava/download.html. - Args: - csv_file: A file object. - class_whitelist: If provided, boxes corresponding to (integer) class labels - not in this set are skipped. - Returns: - boxes: A dictionary mapping each unique image key (string) to a list of - boxes, given as coordinates [y1, x1, y2, x2]. - labels: A dictionary mapping each unique image key (string) to a list of - integer class lables, matching the corresponding box in `boxes`. - scores: A dictionary mapping each unique image key (string) to a list of - score values lables, matching the corresponding label in `labels`. If - scores are not provided in the csv, then they will default to 1.0. - """ - boxes = defaultdict(list) - labels = defaultdict(list) - scores = defaultdict(list) - with PathManager.open(csv_file, "r") as f: - reader = csv.reader(f) - for row in reader: - assert len(row) in [7, 8], "Wrong number of columns: " + row - image_key = make_image_key(row[0], row[1]) - x1, y1, x2, y2 = [float(n) for n in row[2:6]] - action_id = int(row[6]) - if class_whitelist and action_id not in class_whitelist: - continue - score = 1.0 - if load_score: - score = float(row[7]) - boxes[image_key].append([y1, x1, y2, x2]) - labels[image_key].append(action_id) - scores[image_key].append(score) - return boxes, labels, scores - - -def read_exclusions(exclusions_file): - """Reads a CSV file of excluded timestamps. - Args: - exclusions_file: A file object containing a csv of video-id,timestamp. - Returns: - A set of strings containing excluded image keys, e.g. "aaaaaaaaaaa,0904", - or an empty set if exclusions file is None. - """ - excluded = set() - if exclusions_file: - with PathManager.open(exclusions_file, "r") as f: - reader = csv.reader(f) - for row in reader: - assert len(row) == 2, "Expected only 2 columns, got: " + row - excluded.add(make_image_key(row[0], row[1])) - return excluded - - -def read_labelmap(labelmap_file): - """Read label map and class ids.""" - - labelmap = [] - class_ids = set() - name = "" - class_id = "" - with PathManager.open(labelmap_file, "r") as f: - for line in f: - if line.startswith(" name:"): - name = line.split('"')[1] - elif line.startswith(" id:") or line.startswith(" label_id:"): - class_id = int(line.strip().split(" ")[-1]) - labelmap.append({"id": class_id, "name": name}) - class_ids.add(class_id) - return labelmap, class_ids - - -def evaluate_ava_from_files(labelmap, groundtruth, detections, exclusions): - """Run AVA evaluation given annotation/prediction files.""" - - categories, class_whitelist = read_labelmap(labelmap) - excluded_keys = read_exclusions(exclusions) - groundtruth = read_csv(groundtruth, class_whitelist, load_score=False) - detections = read_csv(detections, class_whitelist, load_score=True) - run_evaluation(categories, groundtruth, detections, excluded_keys) - - -def evaluate_ava( - preds, - original_boxes, - metadata, - excluded_keys, - class_whitelist, - categories, - groundtruth=None, - video_idx_to_name=None, - name="latest", -): - """Run AVA evaluation given numpy arrays.""" - - eval_start = time.time() - - detections = get_ava_eval_data( - preds, - original_boxes, - metadata, - class_whitelist, - video_idx_to_name=video_idx_to_name, - ) - - logger.info("Evaluating with %d unique GT frames." % len(groundtruth[0])) - logger.info( - "Evaluating with %d unique detection frames" % len(detections[0]) - ) - - write_results(detections, "detections_%s.csv" % name) - write_results(groundtruth, "groundtruth_%s.csv" % name) - - results = run_evaluation(categories, groundtruth, detections, excluded_keys) - - logger.info("AVA eval done in %f seconds." % (time.time() - eval_start)) - return results["PascalBoxes_Precision/mAP@0.5IOU"] - - -def run_evaluation( - categories, groundtruth, detections, excluded_keys, verbose=True -): - """AVA evaluation main logic.""" - - pascal_evaluator = object_detection_evaluation.PascalDetectionEvaluator( - categories - ) - - boxes, labels, _ = groundtruth - - gt_keys = [] - pred_keys = [] - - for image_key in boxes: - if image_key in excluded_keys: - logging.info( - ( - "Found excluded timestamp in ground truth: %s. " - "It will be ignored." - ), - image_key, - ) - continue - pascal_evaluator.add_single_ground_truth_image_info( - image_key, - { - standard_fields.InputDataFields.groundtruth_boxes: np.array( - boxes[image_key], dtype=float - ), - standard_fields.InputDataFields.groundtruth_classes: np.array( - labels[image_key], dtype=int - ), - standard_fields.InputDataFields.groundtruth_difficult: np.zeros( - len(boxes[image_key]), dtype=bool - ), - }, - ) - - gt_keys.append(image_key) - - boxes, labels, scores = detections - - for image_key in boxes: - if image_key in excluded_keys: - logging.info( - ( - "Found excluded timestamp in detections: %s. " - "It will be ignored." - ), - image_key, - ) - continue - pascal_evaluator.add_single_detected_image_info( - image_key, - { - standard_fields.DetectionResultFields.detection_boxes: np.array( - boxes[image_key], dtype=float - ), - standard_fields.DetectionResultFields.detection_classes: np.array( - labels[image_key], dtype=int - ), - standard_fields.DetectionResultFields.detection_scores: np.array( - scores[image_key], dtype=float - ), - }, - ) - - pred_keys.append(image_key) - - metrics = pascal_evaluator.evaluate() - - pprint.pprint(metrics, indent=2) - return metrics - - -def get_ava_eval_data( - scores, - boxes, - metadata, - class_whitelist, - verbose=False, - video_idx_to_name=None, -): - """ - Convert our data format into the data format used in official AVA - evaluation. - """ - - out_scores = defaultdict(list) - out_labels = defaultdict(list) - out_boxes = defaultdict(list) - count = 0 - for i in range(scores.shape[0]): - video_idx = int(np.round(metadata[i][0])) - sec = int(np.round(metadata[i][1])) - - video = video_idx_to_name[video_idx] - - key = video + "," + "%04d" % (sec) - batch_box = boxes[i].tolist() - # The first is batch idx. - batch_box = [batch_box[j] for j in [0, 2, 1, 4, 3]] - - one_scores = scores[i].tolist() - for cls_idx, score in enumerate(one_scores): - if cls_idx + 1 in class_whitelist: - out_scores[key].append(score) - out_labels[key].append(cls_idx + 1) - out_boxes[key].append(batch_box[1:]) - count += 1 - - return out_boxes, out_labels, out_scores - - -def write_results(detections, filename): - """Write prediction results into official formats.""" - start = time.time() - - boxes, labels, scores = detections - with PathManager.open(filename, "w") as f: - for key in boxes.keys(): - for box, label, score in zip(boxes[key], labels[key], scores[key]): - f.write( - "%s,%.03f,%.03f,%.03f,%.03f,%d,%.04f\n" - % (key, box[1], box[0], box[3], box[2], label, score) - ) - - logger.info("AVA results wrote to %s" % filename) - logger.info("\ttook %d seconds." % (time.time() - start)) diff --git a/video/pwtf-dvd/model_code/inference/slowfast/utils/benchmark.py b/video/pwtf-dvd/model_code/inference/slowfast/utils/benchmark.py deleted file mode 100644 index 33e5fe9073ad61ecec737d6b4a6a2880eec15cb9..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/utils/benchmark.py +++ /dev/null @@ -1,103 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved -""" -Functions for benchmarks. -""" - -import numpy as np -import pprint -import torch -import tqdm -from fvcore.common.timer import Timer - -import slowfast.utils.logging as logging -import slowfast.utils.misc as misc -from slowfast.datasets import loader -from slowfast.utils.env import setup_environment - -logger = logging.get_logger(__name__) - - -def benchmark_data_loading(cfg): - """ - Benchmark the speed of data loading in PySlowFast. - Args: - - cfg (CfgNode): configs. Details can be found in - slowfast/config/defaults.py - """ - # Set up environment. - setup_environment() - # Set random seed from configs. - np.random.seed(cfg.RNG_SEED) - torch.manual_seed(cfg.RNG_SEED) - - # Setup logging format. - logging.setup_logging(cfg.OUTPUT_DIR) - - # Print config. - logger.info("Benchmark data loading with config:") - logger.info(pprint.pformat(cfg)) - - timer = Timer() - dataloader = loader.construct_loader(cfg, "train") - logger.info( - "Initialize loader using {:.2f} seconds.".format(timer.seconds()) - ) - # Total batch size across different machines. - batch_size = cfg.TRAIN.BATCH_SIZE * cfg.NUM_SHARDS - log_period = cfg.BENCHMARK.LOG_PERIOD - epoch_times = [] - # Test for a few epochs. - for cur_epoch in range(cfg.BENCHMARK.NUM_EPOCHS): - timer = Timer() - timer_epoch = Timer() - iter_times = [] - if cfg.BENCHMARK.SHUFFLE: - loader.shuffle_dataset(dataloader, cur_epoch) - for cur_iter, _ in enumerate(tqdm.tqdm(dataloader)): - if cur_iter > 0 and cur_iter % log_period == 0: - iter_times.append(timer.seconds()) - ram_usage, ram_total = misc.cpu_mem_usage() - logger.info( - "Epoch {}: {} iters ({} videos) in {:.2f} seconds. " - "RAM Usage: {:.2f}/{:.2f} GB.".format( - cur_epoch, - log_period, - log_period * batch_size, - iter_times[-1], - ram_usage, - ram_total, - ) - ) - timer.reset() - epoch_times.append(timer_epoch.seconds()) - ram_usage, ram_total = misc.cpu_mem_usage() - logger.info( - "Epoch {}: in total {} iters ({} videos) in {:.2f} seconds. " - "RAM Usage: {:.2f}/{:.2f} GB.".format( - cur_epoch, - len(dataloader), - len(dataloader) * batch_size, - epoch_times[-1], - ram_usage, - ram_total, - ) - ) - logger.info( - "Epoch {}: on average every {} iters ({} videos) take {:.2f}/{:.2f} " - "(avg/std) seconds.".format( - cur_epoch, - log_period, - log_period * batch_size, - np.mean(iter_times), - np.std(iter_times), - ) - ) - logger.info( - "On average every epoch ({} videos) takes {:.2f}/{:.2f} " - "(avg/std) seconds.".format( - len(dataloader) * batch_size, - np.mean(epoch_times), - np.std(epoch_times), - ) - ) diff --git a/video/pwtf-dvd/model_code/inference/slowfast/utils/bn_helper.py b/video/pwtf-dvd/model_code/inference/slowfast/utils/bn_helper.py deleted file mode 100644 index b18d8c76c10d7598db61ba8ca192314140f9ba79..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/utils/bn_helper.py +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""bn helper.""" - -import itertools -import torch - - -@torch.no_grad() -def compute_and_update_bn_stats(model, data_loader, num_batches=200): - """ - Compute and update the batch norm stats to make it more precise. During - training both bn stats and the weight are changing after every iteration, - so the bn can not precisely reflect the latest stats of the current model. - Here the bn stats is recomputed without change of weights, to make the - running mean and running var more precise. - Args: - model (model): the model using to compute and update the bn stats. - data_loader (dataloader): dataloader using to provide inputs. - num_batches (int): running iterations using to compute the stats. - """ - - # Prepares all the bn layers. - bn_layers = [ - m - for m in model.modules() - if any( - ( - isinstance(m, bn_type) - for bn_type in ( - torch.nn.BatchNorm1d, - torch.nn.BatchNorm2d, - torch.nn.BatchNorm3d, - ) - ) - ) - ] - - # In order to make the running stats only reflect the current batch, the - # momentum is disabled. - # bn.running_mean = (1 - momentum) * bn.running_mean + momentum * batch_mean - # Setting the momentum to 1.0 to compute the stats without momentum. - momentum_actual = [bn.momentum for bn in bn_layers] - for bn in bn_layers: - bn.momentum = 1.0 - - # Calculates the running iterations for precise stats computation. - running_mean = [torch.zeros_like(bn.running_mean) for bn in bn_layers] - running_square_mean = [torch.zeros_like(bn.running_var) for bn in bn_layers] - - for ind, (inputs, _, _) in enumerate( - itertools.islice(data_loader, num_batches) - ): - # Forwards the model to update the bn stats. - if isinstance(inputs, (list,)): - for i in range(len(inputs)): - inputs[i] = inputs[i].float().cuda(non_blocking=True) - else: - inputs = inputs.cuda(non_blocking=True) - model(inputs) - - for i, bn in enumerate(bn_layers): - # Accumulates the bn stats. - running_mean[i] += (bn.running_mean - running_mean[i]) / (ind + 1) - # $E(x^2) = Var(x) + E(x)^2$. - cur_square_mean = bn.running_var + bn.running_mean ** 2 - running_square_mean[i] += ( - cur_square_mean - running_square_mean[i] - ) / (ind + 1) - - for i, bn in enumerate(bn_layers): - bn.running_mean = running_mean[i] - # Var(x) = $E(x^2) - E(x)^2$. - bn.running_var = running_square_mean[i] - bn.running_mean ** 2 - # Sets the precise bn stats. - bn.momentum = momentum_actual[i] diff --git a/video/pwtf-dvd/model_code/inference/slowfast/utils/c2_model_loading.py b/video/pwtf-dvd/model_code/inference/slowfast/utils/c2_model_loading.py deleted file mode 100644 index 4bcc0759c484fd321917c55e9967835632c2ac54..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/utils/c2_model_loading.py +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""Caffe2 to PyTorch checkpoint name converting utility.""" - -import re - - -def get_name_convert_func(): - """ - Get the function to convert Caffe2 layer names to PyTorch layer names. - Returns: - (func): function to convert parameter name from Caffe2 format to PyTorch - format. - """ - pairs = [ - # ------------------------------------------------------------ - # 'nonlocal_conv3_1_theta_w' -> 's3.pathway0_nonlocal3.conv_g.weight' - [ - r"^nonlocal_conv([0-9]+)_([0-9]+)_(.*)", - r"s\1.pathway0_nonlocal\2_\3", - ], - # 'theta' -> 'conv_theta' - [r"^(.*)_nonlocal([0-9]+)_(theta)(.*)", r"\1_nonlocal\2.conv_\3\4"], - # 'g' -> 'conv_g' - [r"^(.*)_nonlocal([0-9]+)_(g)(.*)", r"\1_nonlocal\2.conv_\3\4"], - # 'phi' -> 'conv_phi' - [r"^(.*)_nonlocal([0-9]+)_(phi)(.*)", r"\1_nonlocal\2.conv_\3\4"], - # 'out' -> 'conv_out' - [r"^(.*)_nonlocal([0-9]+)_(out)(.*)", r"\1_nonlocal\2.conv_\3\4"], - # 'nonlocal_conv4_5_bn_s' -> 's4.pathway0_nonlocal3.bn.weight' - [r"^(.*)_nonlocal([0-9]+)_(bn)_(.*)", r"\1_nonlocal\2.\3.\4"], - # ------------------------------------------------------------ - # 't_pool1_subsample_bn' -> 's1_fuse.conv_f2s.bn.running_mean' - [r"^t_pool1_subsample_bn_(.*)", r"s1_fuse.bn.\1"], - # 't_pool1_subsample' -> 's1_fuse.conv_f2s' - [r"^t_pool1_subsample_(.*)", r"s1_fuse.conv_f2s.\1"], - # 't_res4_5_branch2c_bn_subsample_bn_rm' -> 's4_fuse.conv_f2s.bias' - [ - r"^t_res([0-9]+)_([0-9]+)_branch2c_bn_subsample_bn_(.*)", - r"s\1_fuse.bn.\3", - ], - # 't_pool1_subsample' -> 's1_fuse.conv_f2s' - [ - r"^t_res([0-9]+)_([0-9]+)_branch2c_bn_subsample_(.*)", - r"s\1_fuse.conv_f2s.\3", - ], - # ------------------------------------------------------------ - # 'res4_4_branch_2c_bn_b' -> 's4.pathway0_res4.branch2.c_bn_b' - [ - r"^res([0-9]+)_([0-9]+)_branch([0-9]+)([a-z])_(.*)", - r"s\1.pathway0_res\2.branch\3.\4_\5", - ], - # 'res_conv1_bn_' -> 's1.pathway0_stem.bn.' - [r"^res_conv1_bn_(.*)", r"s1.pathway0_stem.bn.\1"], - # 'conv1_w_momentum' -> 's1.pathway0_stem.conv.' - [r"^conv1_(.*)", r"s1.pathway0_stem.conv.\1"], - # 'res4_0_branch1_w' -> 'S4.pathway0_res0.branch1.weight' - [ - r"^res([0-9]+)_([0-9]+)_branch([0-9]+)_(.*)", - r"s\1.pathway0_res\2.branch\3_\4", - ], - # 'res_conv1_' -> 's1.pathway0_stem.conv.' - [r"^res_conv1_(.*)", r"s1.pathway0_stem.conv.\1"], - # ------------------------------------------------------------ - # 'res4_4_branch_2c_bn_b' -> 's4.pathway0_res4.branch2.c_bn_b' - [ - r"^t_res([0-9]+)_([0-9]+)_branch([0-9]+)([a-z])_(.*)", - r"s\1.pathway1_res\2.branch\3.\4_\5", - ], - # 'res_conv1_bn_' -> 's1.pathway0_stem.bn.' - [r"^t_res_conv1_bn_(.*)", r"s1.pathway1_stem.bn.\1"], - # 'conv1_w_momentum' -> 's1.pathway0_stem.conv.' - [r"^t_conv1_(.*)", r"s1.pathway1_stem.conv.\1"], - # 'res4_0_branch1_w' -> 'S4.pathway0_res0.branch1.weight' - [ - r"^t_res([0-9]+)_([0-9]+)_branch([0-9]+)_(.*)", - r"s\1.pathway1_res\2.branch\3_\4", - ], - # 'res_conv1_' -> 's1.pathway0_stem.conv.' - [r"^t_res_conv1_(.*)", r"s1.pathway1_stem.conv.\1"], - # ------------------------------------------------------------ - # pred_ -> head.projection. - [r"pred_(.*)", r"head.projection.\1"], - # '.bn_b' -> '.weight' - [r"(.*)bn.b\Z", r"\1bn.bias"], - # '.bn_s' -> '.weight' - [r"(.*)bn.s\Z", r"\1bn.weight"], - # '_bn_rm' -> '.running_mean' - [r"(.*)bn.rm\Z", r"\1bn.running_mean"], - # '_bn_riv' -> '.running_var' - [r"(.*)bn.riv\Z", r"\1bn.running_var"], - # '_b' -> '.bias' - [r"(.*)[\._]b\Z", r"\1.bias"], - # '_w' -> '.weight' - [r"(.*)[\._]w\Z", r"\1.weight"], - ] - - def convert_caffe2_name_to_pytorch(caffe2_layer_name): - """ - Convert the caffe2_layer_name to pytorch format by apply the list of - regular expressions. - Args: - caffe2_layer_name (str): caffe2 layer name. - Returns: - (str): pytorch layer name. - """ - for source, dest in pairs: - caffe2_layer_name = re.sub(source, dest, caffe2_layer_name) - return caffe2_layer_name - - return convert_caffe2_name_to_pytorch diff --git a/video/pwtf-dvd/model_code/inference/slowfast/utils/checkpoint.py b/video/pwtf-dvd/model_code/inference/slowfast/utils/checkpoint.py deleted file mode 100644 index 05d5ac4624feecbbc1f868682f8ed921ac5fef2c..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/utils/checkpoint.py +++ /dev/null @@ -1,530 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""Functions that handle saving and loading of checkpoints.""" - -import copy -import numpy as np -import os -import pickle -from collections import OrderedDict -import torch -from fvcore.common.file_io import PathManager - -import slowfast.utils.distributed as du -import slowfast.utils.logging as logging -from slowfast.utils.c2_model_loading import get_name_convert_func - -logger = logging.get_logger(__name__) - - -def make_checkpoint_dir(path_to_job): - """ - Creates the checkpoint directory (if not present already). - Args: - path_to_job (string): the path to the folder of the current job. - """ - checkpoint_dir = os.path.join(path_to_job, "checkpoints") - # Create the checkpoint dir from the master process - if du.is_master_proc() and not PathManager.exists(checkpoint_dir): - try: - PathManager.mkdirs(checkpoint_dir) - except Exception: - pass - return checkpoint_dir - - -def get_checkpoint_dir(path_to_job): - """ - Get path for storing checkpoints. - Args: - path_to_job (string): the path to the folder of the current job. - """ - return os.path.join(path_to_job, "checkpoints") - - -def get_path_to_checkpoint(path_to_job, epoch): - """ - Get the full path to a checkpoint file. - Args: - path_to_job (string): the path to the folder of the current job. - epoch (int): the number of epoch for the checkpoint. - """ - name = "checkpoint_epoch_{:07d}.pyth".format(epoch) - return os.path.join(get_checkpoint_dir(path_to_job), name) - - -def get_last_checkpoint(path_to_job): - """ - Get the last checkpoint from the checkpointing folder. - Args: - path_to_job (string): the path to the folder of the current job. - """ - - d = get_checkpoint_dir(path_to_job) - names = PathManager.ls(d) if PathManager.exists(d) else [] - names = [f for f in names if "checkpoint" in f] - assert len(names), "No checkpoints found in '{}'.".format(d) - # Sort the checkpoints by epoch. - name = sorted(names)[-1] - return os.path.join(d, name) - - -def has_checkpoint(path_to_job): - """ - Determines if the given directory contains a checkpoint. - Args: - path_to_job (string): the path to the folder of the current job. - """ - d = get_checkpoint_dir(path_to_job) - files = PathManager.ls(d) if PathManager.exists(d) else [] - return any("checkpoint" in f for f in files) - - -def is_checkpoint_epoch(cfg, cur_epoch, multigrid_schedule=None): - """ - Determine if a checkpoint should be saved on current epoch. - Args: - cfg (CfgNode): configs to save. - cur_epoch (int): current number of epoch of the model. - multigrid_schedule (List): schedule for multigrid training. - """ - if cur_epoch + 1 == cfg.SOLVER.MAX_EPOCH: - return True - if multigrid_schedule is not None: - prev_epoch = 0 - for s in multigrid_schedule: - if cur_epoch < s[-1]: - period = max( - (s[-1] - prev_epoch) // cfg.MULTIGRID.EVAL_FREQ + 1, 1 - ) - return (s[-1] - 1 - cur_epoch) % period == 0 - prev_epoch = s[-1] - - return (cur_epoch + 1) % cfg.TRAIN.CHECKPOINT_PERIOD == 0 - - -def is_checkpoint_iter(cfg, cur_iter): - """ - Determine if a checkpoint should be saved on current iter. - Args: - cfg (CfgNode): configs to save. - cur_epoch (int): current number of epoch of the model. - multigrid_schedule (List): schedule for multigrid training. - """ - - return (cur_iter+1) % cfg.TRAIN.CHECKPOINT_PERIOD_BY_ITER == 0 - - - -def save_checkpoint_by_iter(path_to_job, model, optimizer, epoch,global_step,cfg): - """ - Save a checkpoint. - Args: - model (model): model to save the weight to the checkpoint. - optimizer (optim): optimizer to save the historical state. - epoch (int): current number of epoch of the model. - cfg (CfgNode): configs to save. - """ - # Save checkpoints only from the master process. - if not du.is_master_proc(cfg.NUM_GPUS * cfg.NUM_SHARDS): - return - # Ensure that the checkpoint dir exists. - PathManager.mkdirs(get_checkpoint_dir(path_to_job)) - # Omit the DDP wrapper in the multi-gpu setting. - sd = model.module.state_dict() if cfg.NUM_GPUS > 1 else model.state_dict() - normalized_sd = sub_to_normal_bn(sd) - - # Record the state. - checkpoint = { - "epoch": epoch, - "model_state": normalized_sd, - "optimizer_state": optimizer.state_dict(), - "global_step": global_step, - "cfg": cfg.dump(), - } - # Write the checkpoint. - path_to_checkpoint = get_path_to_checkpoint(path_to_job,global_step+1) - with PathManager.open(path_to_checkpoint, "wb") as f: - torch.save(checkpoint, f) - return path_to_checkpoint - -def save_checkpoint(path_to_job, model, optimizer, epoch, cfg): - """ - Save a checkpoint. - Args: - model (model): model to save the weight to the checkpoint. - optimizer (optim): optimizer to save the historical state. - epoch (int): current number of epoch of the model. - cfg (CfgNode): configs to save. - """ - # Save checkpoints only from the master process. - if not du.is_master_proc(cfg.NUM_GPUS * cfg.NUM_SHARDS): - return - # Ensure that the checkpoint dir exists. - PathManager.mkdirs(get_checkpoint_dir(path_to_job)) - # Omit the DDP wrapper in the multi-gpu setting. - sd = model.module.state_dict() if cfg.NUM_GPUS > 1 else model.state_dict() - normalized_sd = sub_to_normal_bn(sd) - - # Record the state. - checkpoint = { - "epoch": epoch, - "model_state": normalized_sd, - "optimizer_state": optimizer.state_dict(), - "cfg": cfg.dump(), - } - # Write the checkpoint. - path_to_checkpoint = get_path_to_checkpoint(path_to_job, epoch + 1) - with PathManager.open(path_to_checkpoint, "wb") as f: - torch.save(checkpoint, f) - return path_to_checkpoint - - -def inflate_weight(state_dict_2d, state_dict_3d): - """ - Inflate 2D model weights in state_dict_2d to the 3D model weights in - state_dict_3d. The details can be found in: - Joao Carreira, and Andrew Zisserman. - "Quo vadis, action recognition? a new model and the kinetics dataset." - Args: - state_dict_2d (OrderedDict): a dict of parameters from a 2D model. - state_dict_3d (OrderedDict): a dict of parameters from a 3D model. - Returns: - state_dict_inflated (OrderedDict): a dict of inflated parameters. - """ - state_dict_inflated = OrderedDict() - for k, v2d in state_dict_2d.items(): - assert k in state_dict_3d.keys() - v3d = state_dict_3d[k] - # Inflate the weight of 2D conv to 3D conv. - if len(v2d.shape) == 4 and len(v3d.shape) == 5: - logger.info( - "Inflate {}: {} -> {}: {}".format(k, v2d.shape, k, v3d.shape) - ) - # Dimension need to be match. - assert v2d.shape[-2:] == v3d.shape[-2:] - assert v2d.shape[:2] == v3d.shape[:2] - v3d = ( - v2d.unsqueeze(2).repeat(1, 1, v3d.shape[2], 1, 1) / v3d.shape[2] - ) - elif v2d.shape == v3d.shape: - v3d = v2d - else: - logger.info( - "Unexpected {}: {} -|> {}: {}".format( - k, v2d.shape, k, v3d.shape - ) - ) - state_dict_inflated[k] = v3d.clone() - return state_dict_inflated - - -def load_checkpoint( - path_to_checkpoint, - model, - data_parallel=True, - optimizer=None, - inflation=False, - convert_from_caffe2=False, -): - """ - Load the checkpoint from the given file. If inflation is True, inflate the - 2D Conv weights from the checkpoint to 3D Conv. - Args: - path_to_checkpoint (string): path to the checkpoint to load. - model (model): model to load the weights from the checkpoint. - data_parallel (bool): if true, model is wrapped by - torch.nn.parallel.DistributedDataParallel. - optimizer (optim): optimizer to load the historical state. - inflation (bool): if True, inflate the weights from the checkpoint. - convert_from_caffe2 (bool): if True, load the model from caffe2 and - convert it to pytorch. - Returns: - (int): the number of training epoch of the checkpoint. - """ - assert PathManager.exists( - path_to_checkpoint - ), "Checkpoint '{}' not found".format(path_to_checkpoint) - # Account for the DDP wrapper in the multi-gpu setting. - ms = model.module if data_parallel else model - if convert_from_caffe2: - with PathManager.open(path_to_checkpoint, "rb") as f: - caffe2_checkpoint = pickle.load(f, encoding="latin1") - state_dict = OrderedDict() - name_convert_func = get_name_convert_func() - for key in caffe2_checkpoint["blobs"].keys(): - converted_key = name_convert_func(key) - converted_key = c2_normal_to_sub_bn(converted_key, ms.state_dict()) - if converted_key in ms.state_dict(): - c2_blob_shape = caffe2_checkpoint["blobs"][key].shape - model_blob_shape = ms.state_dict()[converted_key].shape - # Load BN stats to Sub-BN. - if ( - len(model_blob_shape) == 1 - and len(c2_blob_shape) == 1 - and model_blob_shape[0] > c2_blob_shape[0] - and model_blob_shape[0] % c2_blob_shape[0] == 0 - ): - caffe2_checkpoint["blobs"][key] = np.concatenate( - [caffe2_checkpoint["blobs"][key]] - * (model_blob_shape[0] // c2_blob_shape[0]) - ) - c2_blob_shape = caffe2_checkpoint["blobs"][key].shape - - if c2_blob_shape == tuple(model_blob_shape): - state_dict[converted_key] = torch.tensor( - caffe2_checkpoint["blobs"][key] - ).clone() - logger.info( - "{}: {} => {}: {}".format( - key, - c2_blob_shape, - converted_key, - tuple(model_blob_shape), - ) - ) - else: - logger.warn( - "!! {}: {} does not match {}: {}".format( - key, - c2_blob_shape, - converted_key, - tuple(model_blob_shape), - ) - ) - else: - if not any( - prefix in key for prefix in ["momentum", "lr", "model_iter"] - ): - logger.warn( - "!! {}: can not be converted, got {}".format( - key, converted_key - ) - ) - ms.load_state_dict(state_dict, strict=False) - epoch = -1 - global_step=-1 - else: - # Load the checkpoint on CPU to avoid GPU mem spike. - with PathManager.open(path_to_checkpoint, "rb") as f: - checkpoint = torch.load(f, map_location="cpu") - model_state_dict_3d = ( - model.module.state_dict() if data_parallel else model.state_dict() - ) - checkpoint["model_state"] = normal_to_sub_bn( - checkpoint["model_state"], model_state_dict_3d - ) - if inflation: - # Try to inflate the model. - inflated_model_dict = inflate_weight( - checkpoint["model_state"], model_state_dict_3d - ) - ms.load_state_dict(inflated_model_dict, strict=False) - else: - ms.load_state_dict(checkpoint["model_state"]) - # Load the optimizer state (commonly not done when fine-tuning) - if optimizer: - optimizer.load_state_dict(checkpoint["optimizer_state"]) - if "epoch" in checkpoint.keys(): - epoch = checkpoint["epoch"] - else: - epoch = -1 - if "global_step" in checkpoint.keys(): - global_step=checkpoint["global_step"] - else: - global_step=-1 - return epoch,global_step - - -def sub_to_normal_bn(sd): - """ - Convert the Sub-BN paprameters to normal BN parameters in a state dict. - There are two copies of BN layers in a Sub-BN implementation: `bn.bn` and - `bn.split_bn`. `bn.split_bn` is used during training and - "compute_precise_bn". Before saving or evaluation, its stats are copied to - `bn.bn`. We rename `bn.bn` to `bn` and store it to be consistent with normal - BN layers. - Args: - sd (OrderedDict): a dict of parameters whitch might contain Sub-BN - parameters. - Returns: - new_sd (OrderedDict): a dict with Sub-BN parameters reshaped to - normal parameters. - """ - new_sd = copy.deepcopy(sd) - modifications = [ - ("bn.bn.running_mean", "bn.running_mean"), - ("bn.bn.running_var", "bn.running_var"), - ("bn.split_bn.num_batches_tracked", "bn.num_batches_tracked"), - ] - to_remove = ["bn.bn.", ".split_bn."] - for key in sd: - for before, after in modifications: - if key.endswith(before): - new_key = key.split(before)[0] + after - new_sd[new_key] = new_sd.pop(key) - - for rm in to_remove: - if rm in key and key in new_sd: - del new_sd[key] - - for key in new_sd: - if key.endswith("bn.weight") or key.endswith("bn.bias"): - if len(new_sd[key].size()) == 4: - assert all(d == 1 for d in new_sd[key].size()[1:]) - new_sd[key] = new_sd[key][:, 0, 0, 0] - - return new_sd - - -def c2_normal_to_sub_bn(key, model_keys): - """ - Convert BN parameters to Sub-BN parameters if model contains Sub-BNs. - Args: - key (OrderedDict): source dict of parameters. - mdoel_key (OrderedDict): target dict of parameters. - Returns: - new_sd (OrderedDict): converted dict of parameters. - """ - if "bn.running_" in key: - if key in model_keys: - return key - - new_key = key.replace("bn.running_", "bn.split_bn.running_") - if new_key in model_keys: - return new_key - else: - return key - - -def normal_to_sub_bn(checkpoint_sd, model_sd): - """ - Convert BN parameters to Sub-BN parameters if model contains Sub-BNs. - Args: - checkpoint_sd (OrderedDict): source dict of parameters. - model_sd (OrderedDict): target dict of parameters. - Returns: - new_sd (OrderedDict): converted dict of parameters. - """ - for key in model_sd: - if key not in checkpoint_sd: - if "bn.split_bn." in key: - load_key = key.replace("bn.split_bn.", "bn.") - bn_key = key.replace("bn.split_bn.", "bn.bn.") - checkpoint_sd[key] = checkpoint_sd.pop(load_key) - checkpoint_sd[bn_key] = checkpoint_sd[key] - - for key in model_sd: - if key in checkpoint_sd: - model_blob_shape = model_sd[key].shape - c2_blob_shape = checkpoint_sd[key].shape - - if ( - len(model_blob_shape) == 1 - and len(c2_blob_shape) == 1 - and model_blob_shape[0] > c2_blob_shape[0] - and model_blob_shape[0] % c2_blob_shape[0] == 0 - ): - before_shape = checkpoint_sd[key].shape - checkpoint_sd[key] = torch.cat( - [checkpoint_sd[key]] - * (model_blob_shape[0] // c2_blob_shape[0]) - ) - logger.info( - "{} {} -> {}".format( - key, before_shape, checkpoint_sd[key].shape - ) - ) - return checkpoint_sd - - -def load_test_checkpoint(cfg, model): - """ - Loading checkpoint logic for testing. - """ - # Load a checkpoint to test if applicable. - if cfg.TEST.CHECKPOINT_FILE_PATH != "": - # If no checkpoint found in MODEL_VIS.CHECKPOINT_FILE_PATH or in the current - # checkpoint folder, try to load checkpoint from - # TEST.CHECKPOINT_FILE_PATH and test it. - load_checkpoint( - cfg.TEST.CHECKPOINT_FILE_PATH, - model, - cfg.NUM_GPUS > 1, - None, - inflation=False, - convert_from_caffe2=cfg.TEST.CHECKPOINT_TYPE == "caffe2", - ) - elif has_checkpoint(cfg.OUTPUT_DIR): - last_checkpoint = get_last_checkpoint(cfg.OUTPUT_DIR) - load_checkpoint(last_checkpoint, model, cfg.NUM_GPUS > 1) - elif cfg.TRAIN.CHECKPOINT_FILE_PATH != "": - # If no checkpoint found in TEST.CHECKPOINT_FILE_PATH or in the current - # checkpoint folder, try to load checkpoint from - # TRAIN.CHECKPOINT_FILE_PATH and test it. - load_checkpoint( - cfg.TRAIN.CHECKPOINT_FILE_PATH, - model, - cfg.NUM_GPUS > 1, - None, - inflation=False, - convert_from_caffe2=cfg.TRAIN.CHECKPOINT_TYPE == "caffe2", - ) - else: - logger.info( - "Unknown way of loading checkpoint. Using with random initialization, only for debugging." - ) - - -def load_train_checkpoint(cfg, model, optimizer): - """ - Loading checkpoint logic for training. - """ - if cfg.TRAIN.AUTO_RESUME and has_checkpoint(cfg.OUTPUT_DIR): - last_checkpoint = get_last_checkpoint(cfg.OUTPUT_DIR) - logger.info("Load from last checkpoint, {}.".format(last_checkpoint)) - checkpoint_epoch,global_step = load_checkpoint( - last_checkpoint, model, cfg.NUM_GPUS > 1, optimizer - ) - start_epoch = checkpoint_epoch + 1 - global_step = global_step + 1 - elif cfg.TRAIN.CHECKPOINT_FILE_PATH != "": - if cfg.TRAIN.CHECKPOINT_TYPE=="backbone": - logger.info("Load backbone from given checkpoint file.") - load_backbone(model,cfg.TRAIN.CHECKPOINT_FILE_PATH) - start_epoch = 0 - global_step = 0 - else: - logger.info("Load from given checkpoint file.") - checkpoint_epoch, global_step = load_checkpoint( - cfg.TRAIN.CHECKPOINT_FILE_PATH, - model, - cfg.NUM_GPUS > 1, - optimizer, - inflation=cfg.TRAIN.CHECKPOINT_INFLATE, - convert_from_caffe2=cfg.TRAIN.CHECKPOINT_TYPE == "caffe2", - ) - start_epoch = checkpoint_epoch + 1 - global_step = global_step + 1 - else: - start_epoch = 0 - global_step = 0 - - return start_epoch, global_step - - - -def load_backbone(model,file): - current_state=model.state_dict() - checkpoint=torch.load(file) - - for key in checkpoint: - if key in current_state: - assert current_state[key].shape==checkpoint[key].shape - current_state[key]=checkpoint[key] - model.load_state_dict(current_state) - - return model - - diff --git a/video/pwtf-dvd/model_code/inference/slowfast/utils/distributed.py b/video/pwtf-dvd/model_code/inference/slowfast/utils/distributed.py deleted file mode 100644 index bfbed8e8a4af5fc4b38c1558616fd3f640b587c0..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/utils/distributed.py +++ /dev/null @@ -1,299 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""Distributed helpers.""" - -import functools -import logging -import pickle -import torch -import torch.distributed as dist - -_LOCAL_PROCESS_GROUP = None - - -def all_gather(tensors): - """ - All gathers the provided tensors from all processes across machines. - Args: - tensors (list): tensors to perform all gather across all processes in - all machines. - """ - - gather_list = [] - output_tensor = [] - world_size = dist.get_world_size() - for tensor in tensors: - tensor_placeholder = [ - torch.ones_like(tensor) for _ in range(world_size) - ] - dist.all_gather(tensor_placeholder, tensor, async_op=False) - gather_list.append(tensor_placeholder) - for gathered_tensor in gather_list: - output_tensor.append(torch.cat(gathered_tensor, dim=0)) - return output_tensor - - -def all_reduce(tensors, average=True): - """ - All reduce the provided tensors from all processes across machines. - Args: - tensors (list): tensors to perform all reduce across all processes in - all machines. - average (bool): scales the reduced tensor by the number of overall - processes across all machines. - """ - - for tensor in tensors: - dist.all_reduce(tensor, async_op=False) - if average: - world_size = dist.get_world_size() - for tensor in tensors: - tensor.mul_(1.0 / world_size) - return tensors - - -def init_process_group( - local_rank, - local_world_size, - shard_id, - num_shards, - init_method, - dist_backend="nccl", -): - """ - Initializes the default process group. - Args: - local_rank (int): the rank on the current local machine. - local_world_size (int): the world size (number of processes running) on - the current local machine. - shard_id (int): the shard index (machine rank) of the current machine. - num_shards (int): number of shards for distributed training. - init_method (string): supporting three different methods for - initializing process groups: - "file": use shared file system to initialize the groups across - different processes. - "tcp": use tcp address to initialize the groups across different - dist_backend (string): backend to use for distributed training. Options - includes gloo, mpi and nccl, the details can be found here: - https://pytorch.org/docs/stable/distributed.html - """ - # Sets the GPU to use. - torch.cuda.set_device(local_rank) - # Initialize the process group. - proc_rank = local_rank + shard_id * local_world_size - world_size = local_world_size * num_shards - dist.init_process_group( - backend=dist_backend, - init_method=init_method, - world_size=world_size, - rank=proc_rank, - ) - - -def is_master_proc(num_gpus=8): - """ - Determines if the current process is the master process. - """ - if torch.distributed.is_initialized(): - return dist.get_rank() % num_gpus == 0 - else: - return True - - -def get_world_size(): - """ - Get the size of the world. - """ - if not dist.is_available(): - return 1 - if not dist.is_initialized(): - return 1 - return dist.get_world_size() - - -def get_rank(): - """ - Get the rank of the current process. - """ - if not dist.is_available(): - return 0 - if not dist.is_initialized(): - return 0 - return dist.get_rank() - - -def synchronize(): - """ - Helper function to synchronize (barrier) among all processes when - using distributed training - """ - if not dist.is_available(): - return - if not dist.is_initialized(): - return - world_size = dist.get_world_size() - if world_size == 1: - return - dist.barrier() - - -@functools.lru_cache() -def _get_global_gloo_group(): - """ - Return a process group based on gloo backend, containing all the ranks - The result is cached. - Returns: - (group): pytorch dist group. - """ - if dist.get_backend() == "nccl": - return dist.new_group(backend="gloo") - else: - return dist.group.WORLD - - -def _serialize_to_tensor(data, group): - """ - Seriialize the tensor to ByteTensor. Note that only `gloo` and `nccl` - backend is supported. - Args: - data (data): data to be serialized. - group (group): pytorch dist group. - Returns: - tensor (ByteTensor): tensor that serialized. - """ - - backend = dist.get_backend(group) - assert backend in ["gloo", "nccl"] - device = torch.device("cpu" if backend == "gloo" else "cuda") - - buffer = pickle.dumps(data) - if len(buffer) > 1024 ** 3: - logger = logging.getLogger(__name__) - logger.warning( - "Rank {} trying to all-gather {:.2f} GB of data on device {}".format( - get_rank(), len(buffer) / (1024 ** 3), device - ) - ) - storage = torch.ByteStorage.from_buffer(buffer) - tensor = torch.ByteTensor(storage).to(device=device) - return tensor - - -def _pad_to_largest_tensor(tensor, group): - """ - Padding all the tensors from different GPUs to the largest ones. - Args: - tensor (tensor): tensor to pad. - group (group): pytorch dist group. - Returns: - list[int]: size of the tensor, on each rank - Tensor: padded tensor that has the max size - """ - world_size = dist.get_world_size(group=group) - assert ( - world_size >= 1 - ), "comm.gather/all_gather must be called from ranks within the given group!" - local_size = torch.tensor( - [tensor.numel()], dtype=torch.int64, device=tensor.device - ) - size_list = [ - torch.zeros([1], dtype=torch.int64, device=tensor.device) - for _ in range(world_size) - ] - dist.all_gather(size_list, local_size, group=group) - size_list = [int(size.item()) for size in size_list] - - max_size = max(size_list) - - # we pad the tensor because torch all_gather does not support - # gathering tensors of different shapes - if local_size != max_size: - padding = torch.zeros( - (max_size - local_size,), dtype=torch.uint8, device=tensor.device - ) - tensor = torch.cat((tensor, padding), dim=0) - return size_list, tensor - - -def all_gather_unaligned(data, group=None): - """ - Run all_gather on arbitrary picklable data (not necessarily tensors). - - Args: - data: any picklable object - group: a torch process group. By default, will use a group which - contains all ranks on gloo backend. - - Returns: - list[data]: list of data gathered from each rank - """ - if get_world_size() == 1: - return [data] - if group is None: - group = _get_global_gloo_group() - if dist.get_world_size(group) == 1: - return [data] - - tensor = _serialize_to_tensor(data, group) - - size_list, tensor = _pad_to_largest_tensor(tensor, group) - max_size = max(size_list) - - # receiving Tensor from all ranks - tensor_list = [ - torch.empty((max_size,), dtype=torch.uint8, device=tensor.device) - for _ in size_list - ] - dist.all_gather(tensor_list, tensor, group=group) - - data_list = [] - for size, tensor in zip(size_list, tensor_list): - buffer = tensor.cpu().numpy().tobytes()[:size] - data_list.append(pickle.loads(buffer)) - - return data_list - - -def init_distributed_training(cfg): - """ - Initialize variables needed for distributed training. - """ - if cfg.NUM_GPUS <= 1: - return - num_gpus_per_machine = cfg.NUM_GPUS - num_machines = dist.get_world_size() // num_gpus_per_machine - for i in range(num_machines): - ranks_on_i = list( - range(i * num_gpus_per_machine, (i + 1) * num_gpus_per_machine) - ) - pg = dist.new_group(ranks_on_i) - if i == cfg.SHARD_ID: - global _LOCAL_PROCESS_GROUP - _LOCAL_PROCESS_GROUP = pg - - -def get_local_size() -> int: - """ - Returns: - The size of the per-machine process group, - i.e. the number of processes per machine. - """ - if not dist.is_available(): - return 1 - if not dist.is_initialized(): - return 1 - return dist.get_world_size(group=_LOCAL_PROCESS_GROUP) - - -def get_local_rank() -> int: - """ - Returns: - The rank of the current process within the local (per-machine) process group. - """ - if not dist.is_available(): - return 0 - if not dist.is_initialized(): - return 0 - assert _LOCAL_PROCESS_GROUP is not None - return dist.get_rank(group=_LOCAL_PROCESS_GROUP) diff --git a/video/pwtf-dvd/model_code/inference/slowfast/utils/env.py b/video/pwtf-dvd/model_code/inference/slowfast/utils/env.py deleted file mode 100644 index 2554915089a6e20c9ce58bba7fa59136ed65c887..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/utils/env.py +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""Set up Environment.""" - -import slowfast.utils.logging as logging - -_ENV_SETUP_DONE = False - - -def setup_environment(): - global _ENV_SETUP_DONE - if _ENV_SETUP_DONE: - return - _ENV_SETUP_DONE = True diff --git a/video/pwtf-dvd/model_code/inference/slowfast/utils/logging.py b/video/pwtf-dvd/model_code/inference/slowfast/utils/logging.py deleted file mode 100644 index f2763b3000c9be4a5499b310a3bc052fd5472d50..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/utils/logging.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""Logging.""" - -import builtins -import decimal -import functools -import logging -import os -import sys -import simplejson -from fvcore.common.file_io import PathManager - -import slowfast.utils.distributed as du - - -def _suppress_print(): - """ - Suppresses printing from the current process. - """ - - def print_pass(*objects, sep=" ", end="\n", file=sys.stdout, flush=False): - pass - - builtins.print = print_pass - - -@functools.lru_cache(maxsize=None) -def _cached_log_stream(filename): - return PathManager.open(filename, "a") - - -def setup_logging(output_dir=None): - """ - Sets up the logging for multiple processes. Only enable the logging for the - master process, and suppress logging for the non-master processes. - """ - # Set up logging format. - _FORMAT = "[%(levelname)s: %(filename)s: %(lineno)4d]: %(message)s" - - if du.is_master_proc(): - # Enable logging for the master process. - logging.root.handlers = [] - else: - # Suppress logging for non-master processes. - _suppress_print() - - logger = logging.getLogger() - logger.setLevel(logging.DEBUG) - logger.propagate = False - plain_formatter = logging.Formatter( - "[%(asctime)s][%(levelname)s] %(name)s: %(lineno)4d: %(message)s", - datefmt="%m/%d %H:%M:%S", - ) - - if du.is_master_proc(): - ch = logging.StreamHandler(stream=sys.stdout) - ch.setLevel(logging.DEBUG) - ch.setFormatter(plain_formatter) - logger.addHandler(ch) - - if output_dir is not None and du.is_master_proc(du.get_world_size()): - filename = os.path.join(output_dir, "stdout.log") - fh = logging.StreamHandler(_cached_log_stream(filename)) - fh.setLevel(logging.DEBUG) - fh.setFormatter(plain_formatter) - logger.addHandler(fh) - - -def get_logger(name): - """ - Retrieve the logger with the specified name or, if name is None, return a - logger which is the root logger of the hierarchy. - Args: - name (string): name of the logger. - """ - return logging.getLogger(name) - - -def log_json_stats(stats): - """ - Logs json stats. - Args: - stats (dict): a dictionary of statistical information to log. - """ - stats = { - k: decimal.Decimal("{:.6f}".format(v)) if isinstance(v, float) else v - for k, v in stats.items() - } - json_stats = simplejson.dumps(stats, sort_keys=True, use_decimal=True) - logger = get_logger(__name__) - logger.info("json_stats: {:s}".format(json_stats)) diff --git a/video/pwtf-dvd/model_code/inference/slowfast/utils/lr_policy.py b/video/pwtf-dvd/model_code/inference/slowfast/utils/lr_policy.py deleted file mode 100644 index 4c67f8e5d9d6d576928986521dbe2eac8b1ca7e5..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/utils/lr_policy.py +++ /dev/null @@ -1,98 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""Learning rate policy.""" - -import math - - -def get_lr_at_epoch(cfg, cur_epoch): - """ - Retrieve the learning rate of the current epoch with the option to perform - warm up in the beginning of the training stage. - Args: - cfg (CfgNode): configs. Details can be found in - slowfast/config/defaults.py - cur_epoch (float): the number of epoch of the current training stage. - """ - lr = get_lr_func(cfg.SOLVER.LR_POLICY)(cfg, cur_epoch) - # Perform warm up. - if cur_epoch < cfg.SOLVER.WARMUP_EPOCHS: - lr_start = cfg.SOLVER.WARMUP_START_LR - lr_end = get_lr_func(cfg.SOLVER.LR_POLICY)( - cfg, cfg.SOLVER.WARMUP_EPOCHS - ) - alpha = (lr_end - lr_start) / cfg.SOLVER.WARMUP_EPOCHS - lr = cur_epoch * alpha + lr_start - return lr - -def get_lr_at_iter(cfg,cur_iter): - """LR schedule that should yield 76% converged accuracy with batch size 256""" - start_step = cfg.SOLVER.TOTAL_STEP- cfg.SOLVER.LR_STEP - duration_step = cfg.SOLVER.LR_STEP - base_lr=float(cfg.SOLVER.BASE_LR) - if cur_iter <= start_step: - return base_lr - else: - this_step = cur_iter - start_step - lr = base_lr * ((this_step / duration_step) ** 2.0) - return lr - - -def lr_func_cosine(cfg, cur_epoch): - """ - Retrieve the learning rate to specified values at specified epoch with the - cosine learning rate schedule. Details can be found in: - Ilya Loshchilov, and Frank Hutter - SGDR: Stochastic Gradient Descent With Warm Restarts. - Args: - cfg (CfgNode): configs. Details can be found in - slowfast/config/defaults.py - cur_epoch (float): the number of epoch of the current training stage. - """ - return ( - cfg.SOLVER.BASE_LR - * (math.cos(math.pi * cur_epoch / cfg.SOLVER.MAX_EPOCH) + 1.0) - * 0.5 - ) - - -def lr_func_steps_with_relative_lrs(cfg, cur_epoch): - """ - Retrieve the learning rate to specified values at specified epoch with the - steps with relative learning rate schedule. - Args: - cfg (CfgNode): configs. Details can be found in - slowfast/config/defaults.py - cur_epoch (float): the number of epoch of the current training stage. - """ - ind = get_step_index(cfg, cur_epoch) - return cfg.SOLVER.LRS[ind] * cfg.SOLVER.BASE_LR - - -def get_step_index(cfg, cur_epoch): - """ - Retrieves the lr step index for the given epoch. - Args: - cfg (CfgNode): configs. Details can be found in - slowfast/config/defaults.py - cur_epoch (float): the number of epoch of the current training stage. - """ - steps = cfg.SOLVER.STEPS + [cfg.SOLVER.MAX_EPOCH] - for ind, step in enumerate(steps): # NoQA - if cur_epoch < step: - break - return ind - 1 - - -def get_lr_func(lr_policy): - """ - Given the configs, retrieve the specified lr policy function. - Args: - lr_policy (string): the learning rate policy to use for the job. - """ - policy = "lr_func_" + lr_policy - if policy not in globals(): - raise NotImplementedError("Unknown LR policy: {}".format(lr_policy)) - else: - return globals()[policy] diff --git a/video/pwtf-dvd/model_code/inference/slowfast/utils/meters.py b/video/pwtf-dvd/model_code/inference/slowfast/utils/meters.py deleted file mode 100644 index 2c4e9582a2bb5f6685987ce1f0ce391ac3950419..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/utils/meters.py +++ /dev/null @@ -1,841 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""Meters.""" - -import datetime -import numpy as np -import os -from collections import defaultdict, deque -import torch -from fvcore.common.timer import Timer -from sklearn.metrics import average_precision_score - -import slowfast.datasets.ava_helper as ava_helper -import slowfast.utils.logging as logging -import slowfast.utils.metrics as metrics -import slowfast.utils.misc as misc -from slowfast.utils.ava_eval_helper import ( - evaluate_ava, - read_csv, - read_exclusions, - read_labelmap, -) - -logger = logging.get_logger(__name__) - - -def get_ava_mini_groundtruth(full_groundtruth): - """ - Get the groundtruth annotations corresponding the "subset" of AVA val set. - We define the subset to be the frames such that (second % 4 == 0). - We optionally use subset for faster evaluation during training - (in order to track training progress). - Args: - full_groundtruth(dict): list of groundtruth. - """ - ret = [defaultdict(list), defaultdict(list), defaultdict(list)] - - for i in range(3): - for key in full_groundtruth[i].keys(): - if int(key.split(",")[1]) % 4 == 0: - ret[i][key] = full_groundtruth[i][key] - return ret - - -class AVAMeter(object): - """ - Measure the AVA train, val, and test stats. - """ - - def __init__(self, overall_iters, cfg, mode): - """ - overall_iters (int): the overall number of iterations of one epoch. - cfg (CfgNode): configs. - mode (str): `train`, `val`, or `test` mode. - """ - self.cfg = cfg - self.lr = None - self.loss = ScalarMeter(cfg.LOG_PERIOD) - self.full_ava_test = cfg.AVA.FULL_TEST_ON_VAL - self.mode = mode - self.iter_timer = Timer() - self.all_preds = [] - self.all_ori_boxes = [] - self.all_metadata = [] - self.overall_iters = overall_iters - self.excluded_keys = read_exclusions( - os.path.join(cfg.AVA.ANNOTATION_DIR, cfg.AVA.EXCLUSION_FILE) - ) - self.categories, self.class_whitelist = read_labelmap( - os.path.join(cfg.AVA.ANNOTATION_DIR, cfg.AVA.LABEL_MAP_FILE) - ) - gt_filename = os.path.join( - cfg.AVA.ANNOTATION_DIR, cfg.AVA.GROUNDTRUTH_FILE - ) - self.full_groundtruth = read_csv(gt_filename, self.class_whitelist) - self.mini_groundtruth = get_ava_mini_groundtruth(self.full_groundtruth) - - _, self.video_idx_to_name = ava_helper.load_image_lists( - cfg, mode == "train" - ) - - def log_iter_stats(self, cur_epoch, cur_iter): - """ - Log the stats. - Args: - cur_epoch (int): the current epoch. - cur_iter (int): the current iteration. - """ - - if (cur_iter + 1) % self.cfg.LOG_PERIOD != 0: - return - - eta_sec = self.iter_timer.seconds() * (self.overall_iters - cur_iter) - eta = str(datetime.timedelta(seconds=int(eta_sec))) - if self.mode == "train": - stats = { - "_type": "{}_iter".format(self.mode), - "cur_epoch": "{}".format(cur_epoch + 1), - "cur_iter": "{}".format(cur_iter + 1), - "eta": eta, - "time_diff": self.iter_timer.seconds(), - "mode": self.mode, - "loss": self.loss.get_win_median(), - "lr": self.lr, - } - elif self.mode == "val": - stats = { - "_type": "{}_iter".format(self.mode), - "cur_epoch": "{}".format(cur_epoch + 1), - "cur_iter": "{}".format(cur_iter + 1), - "eta": eta, - "time_diff": self.iter_timer.seconds(), - "mode": self.mode, - } - elif self.mode == "test": - stats = { - "_type": "{}_iter".format(self.mode), - "cur_iter": "{}".format(cur_iter + 1), - "eta": eta, - "time_diff": self.iter_timer.seconds(), - "mode": self.mode, - } - else: - raise NotImplementedError("Unknown mode: {}".format(self.mode)) - - logging.log_json_stats(stats) - - def iter_tic(self): - """ - Start to record time. - """ - self.iter_timer.reset() - - def iter_toc(self): - """ - Stop to record time. - """ - self.iter_timer.pause() - - def reset(self): - """ - Reset the Meter. - """ - self.loss.reset() - - self.all_preds = [] - self.all_ori_boxes = [] - self.all_metadata = [] - - def update_stats(self, preds, ori_boxes, metadata, loss=None, lr=None): - """ - Update the current stats. - Args: - preds (tensor): prediction embedding. - ori_boxes (tensor): original boxes (x1, y1, x2, y2). - metadata (tensor): metadata of the AVA data. - loss (float): loss value. - lr (float): learning rate. - """ - if self.mode in ["val", "test"]: - self.all_preds.append(preds) - self.all_ori_boxes.append(ori_boxes) - self.all_metadata.append(metadata) - if loss is not None: - self.loss.add_value(loss) - if lr is not None: - self.lr = lr - - def finalize_metrics(self, log=True): - """ - Calculate and log the final AVA metrics. - """ - all_preds = torch.cat(self.all_preds, dim=0) - all_ori_boxes = torch.cat(self.all_ori_boxes, dim=0) - all_metadata = torch.cat(self.all_metadata, dim=0) - - if self.mode == "test" or (self.full_ava_test and self.mode == "val"): - groundtruth = self.full_groundtruth - else: - groundtruth = self.mini_groundtruth - - self.full_map = evaluate_ava( - all_preds, - all_ori_boxes, - all_metadata.tolist(), - self.excluded_keys, - self.class_whitelist, - self.categories, - groundtruth=groundtruth, - video_idx_to_name=self.video_idx_to_name, - ) - if log: - stats = {"mode": self.mode, "map": self.full_map} - logging.log_json_stats(stats) - - def log_epoch_stats(self, cur_epoch): - """ - Log the stats of the current epoch. - Args: - cur_epoch (int): the number of current epoch. - """ - if self.mode in ["val", "test"]: - self.finalize_metrics(log=False) - stats = { - "_type": "{}_epoch".format(self.mode), - "cur_epoch": "{}".format(cur_epoch + 1), - "mode": self.mode, - "map": self.full_map, - "gpu_mem": "{:.2f} GB".format(misc.gpu_mem_usage()), - "RAM": "{:.2f}/{:.2f} GB".format(*misc.cpu_mem_usage()), - } - logging.log_json_stats(stats) - - -class TestMeter(object): - """ - Perform the multi-view ensemble for testing: each video with an unique index - will be sampled with multiple clips, and the predictions of the clips will - be aggregated to produce the final prediction for the video. - The accuracy is calculated with the given ground truth labels. - """ - - def __init__( - self, - num_videos, - num_clips, - num_cls, - overall_iters, - multi_label=False, - ensemble_method="sum", - ): - """ - Construct tensors to store the predictions and labels. Expect to get - num_clips predictions from each video, and calculate the metrics on - num_videos videos. - Args: - num_videos (int): number of videos to test. - num_clips (int): number of clips sampled from each video for - aggregating the final prediction for the video. - num_cls (int): number of classes for each prediction. - overall_iters (int): overall iterations for testing. - multi_label (bool): if True, use map as the metric. - ensemble_method (str): method to perform the ensemble, options - include "sum", and "max". - """ - - self.iter_timer = Timer() - self.num_clips = num_clips - self.overall_iters = overall_iters - self.multi_label = multi_label - self.ensemble_method = ensemble_method - # Initialize tensors. - self.video_preds = torch.zeros((num_videos, num_cls)) - if multi_label: - self.video_preds -= 1e10 - - self.video_labels = ( - torch.zeros((num_videos, num_cls)) - if multi_label - else torch.zeros((num_videos)).long() - ) - self.clip_count = torch.zeros((num_videos)).long() - # Reset metric. - self.reset() - - def reset(self): - """ - Reset the metric. - """ - self.clip_count.zero_() - self.video_preds.zero_() - if self.multi_label: - self.video_preds -= 1e10 - self.video_labels.zero_() - - def update_stats(self, preds, labels, clip_ids): - """ - Collect the predictions from the current batch and perform on-the-flight - summation as ensemble. - Args: - preds (tensor): predictions from the current batch. Dimension is - N x C where N is the batch size and C is the channel size - (num_cls). - labels (tensor): the corresponding labels of the current batch. - Dimension is N. - clip_ids (tensor): clip indexes of the current batch, dimension is - N. - """ - for ind in range(preds.shape[0]): - vid_id = int(clip_ids[ind]) // self.num_clips - if self.video_labels[vid_id].sum() > 0: - assert torch.equal( - self.video_labels[vid_id].type(torch.FloatTensor), - labels[ind].type(torch.FloatTensor), - ) - self.video_labels[vid_id] = labels[ind] - if self.ensemble_method == "sum": - self.video_preds[vid_id] += preds[ind] - elif self.ensemble_method == "max": - self.video_preds[vid_id] = torch.max( - self.video_preds[vid_id], preds[ind] - ) - else: - raise NotImplementedError( - "Ensemble Method {} is not supported".format( - self.ensemble_method - ) - ) - self.clip_count[vid_id] += 1 - - def log_iter_stats(self, cur_iter): - """ - Log the stats. - Args: - cur_iter (int): the current iteration of testing. - """ - eta_sec = self.iter_timer.seconds() * (self.overall_iters - cur_iter) - eta = str(datetime.timedelta(seconds=int(eta_sec))) - stats = { - "split": "test_iter", - "cur_iter": "{}".format(cur_iter + 1), - "eta": eta, - "time_diff": self.iter_timer.seconds(), - } - logging.log_json_stats(stats) - - def iter_tic(self): - self.iter_timer.reset() - - def iter_toc(self): - self.iter_timer.pause() - - def finalize_metrics(self, ks=(1, 5)): - """ - Calculate and log the final ensembled metrics. - ks (tuple): list of top-k values for topk_accuracies. For example, - ks = (1, 5) correspods to top-1 and top-5 accuracy. - """ - if not all(self.clip_count == self.num_clips): - logger.warning( - "clip count {} ~= num clips {}".format( - ", ".join( - [ - "{}: {}".format(i, k) - for i, k in enumerate(self.clip_count.tolist()) - ] - ), - self.num_clips, - ) - ) - - stats = {"split": "test_final"} - if self.multi_label: - map = get_map( - self.video_preds.cpu().numpy(), self.video_labels.cpu().numpy() - ) - stats["map"] = map - else: - num_topks_correct = metrics.topks_correct( - self.video_preds, self.video_labels, ks - ) - topks = [ - (x / self.video_preds.size(0)) * 100.0 - for x in num_topks_correct - ] - assert len({len(ks), len(topks)}) == 1 - for k, topk in zip(ks, topks): - stats["top{}_acc".format(k)] = "{:.{prec}f}".format( - topk, prec=2 - ) - logging.log_json_stats(stats) - - -class ScalarMeter(object): - """ - A scalar meter uses a deque to track a series of scaler values with a given - window size. It supports calculating the median and average values of the - window, and also supports calculating the global average. - """ - - def __init__(self, window_size): - """ - Args: - window_size (int): size of the max length of the deque. - """ - self.deque = deque(maxlen=window_size) - self.total = 0.0 - self.count = 0 - - def reset(self): - """ - Reset the deque. - """ - self.deque.clear() - self.total = 0.0 - self.count = 0 - - def add_value(self, value): - """ - Add a new scalar value to the deque. - """ - self.deque.append(value) - self.count += 1 - self.total += value - - def get_win_median(self): - """ - Calculate the current median value of the deque. - """ - return np.median(self.deque) - - def get_win_avg(self): - """ - Calculate the current average value of the deque. - """ - return np.mean(self.deque) - - def get_global_avg(self): - """ - Calculate the global mean value. - """ - return self.total / self.count - - -class TrainMeter(object): - """ - Measure training stats. - """ - - def __init__(self, epoch_iters, cfg): - """ - Args: - epoch_iters (int): the overall number of iterations of one epoch. - cfg (CfgNode): configs. - """ - self._cfg = cfg - self.epoch_iters = epoch_iters - self.MAX_EPOCH = cfg.SOLVER.MAX_EPOCH * epoch_iters - self.iter_timer = Timer() - self.loss = ScalarMeter(cfg.LOG_PERIOD) - self.loss_total = 0.0 - self.lr = None - # Current minibatch errors (smoothed over a window). - self.mb_top1_err = ScalarMeter(cfg.LOG_PERIOD) - self.mb_top5_err = ScalarMeter(cfg.LOG_PERIOD) - # Number of misclassified examples. - self.num_top1_mis = 0 - self.num_top5_mis = 0 - self.num_samples = 0 - - def reset(self): - """ - Reset the Meter. - """ - self.loss.reset() - self.loss_total = 0.0 - self.lr = None - self.mb_top1_err.reset() - self.mb_top5_err.reset() - self.num_top1_mis = 0 - self.num_top5_mis = 0 - self.num_samples = 0 - - def iter_tic(self): - """ - Start to record time. - """ - self.iter_timer.reset() - - def iter_toc(self): - """ - Stop to record time. - """ - self.iter_timer.pause() - - def update_stats(self, top1_err, top5_err, loss, lr, mb_size): - """ - Update the current stats. - Args: - top1_err (float): top1 error rate. - top5_err (float): top5 error rate. - loss (float): loss value. - lr (float): learning rate. - mb_size (int): mini batch size. - """ - self.loss.add_value(loss) - self.lr = lr - self.loss_total += loss * mb_size - self.num_samples += mb_size - - if not self._cfg.DATA.MULTI_LABEL: - # Current minibatch stats - self.mb_top1_err.add_value(top1_err) - self.mb_top5_err.add_value(top5_err) - # Aggregate stats - self.num_top1_mis += top1_err * mb_size - self.num_top5_mis += top5_err * mb_size - - def log_iter_stats(self, cur_epoch, cur_iter): - """ - log the stats of the current iteration. - Args: - cur_epoch (int): the number of current epoch. - cur_iter (int): the number of current iteration. - """ - if (cur_iter + 1) % self._cfg.LOG_PERIOD != 0: - return - eta_sec = self.iter_timer.seconds() * ( - self.MAX_EPOCH - (cur_epoch * self.epoch_iters + cur_iter + 1) - ) - eta = str(datetime.timedelta(seconds=int(eta_sec))) - stats = { - "_type": "train_iter", - "epoch": "{}/{}".format(cur_epoch + 1, self._cfg.SOLVER.MAX_EPOCH), - "iter": "{}/{}".format(cur_iter + 1, self.epoch_iters), - "time_diff": self.iter_timer.seconds(), - "eta": eta, - "loss": self.loss.get_win_median(), - "lr": self.lr, - "gpu_mem": "{:.2f} GB".format(misc.gpu_mem_usage()), - } - if not self._cfg.DATA.MULTI_LABEL: - stats["top1_err"] = self.mb_top1_err.get_win_median() - stats["top5_err"] = self.mb_top5_err.get_win_median() - logging.log_json_stats(stats) - - def log_epoch_stats(self, cur_epoch): - """ - Log the stats of the current epoch. - Args: - cur_epoch (int): the number of current epoch. - """ - eta_sec = self.iter_timer.seconds() * ( - self.MAX_EPOCH - (cur_epoch + 1) * self.epoch_iters - ) - eta = str(datetime.timedelta(seconds=int(eta_sec))) - stats = { - "_type": "train_epoch", - "epoch": "{}/{}".format(cur_epoch + 1, self._cfg.SOLVER.MAX_EPOCH), - "time_diff": self.iter_timer.seconds(), - "eta": eta, - "lr": self.lr, - "gpu_mem": "{:.2f} GB".format(misc.gpu_mem_usage()), - "RAM": "{:.2f}/{:.2f} GB".format(*misc.cpu_mem_usage()), - } - if not self._cfg.DATA.MULTI_LABEL: - top1_err = self.num_top1_mis / self.num_samples - top5_err = self.num_top5_mis / self.num_samples - avg_loss = self.loss_total / self.num_samples - stats["top1_err"] = top1_err - stats["top5_err"] = top5_err - stats["loss"] = avg_loss - logging.log_json_stats(stats) - - -class TrainIterMeter(object): - """ - Measure training stats. - """ - - def __init__(self, epoch_iters, cfg,extra=[]): - """ - Args: - epoch_iters (int): the overall number of iterations of one epoch. - cfg (CfgNode): configs. - """ - self._cfg = cfg - self.epoch_iters = epoch_iters - self.MAX_EPOCH = cfg.SOLVER.MAX_EPOCH * epoch_iters - self.iter_timer = Timer() - self.loss = ScalarMeter(cfg.LOG_PERIOD) - self.loss_total = 0.0 - self.lr = None - - # Number of misclassified examples. - self.num_samples = 0 - - self.meters={key:ScalarMeter(cfg.LOG_PERIOD) for key in extra} - - def reset(self): - """ - Reset the Meter. - """ - self.loss.reset() - self.loss_total = 0.0 - self.lr = None - - - self.num_samples = 0 - - for meter in self.meters.values(): - meter.reset() - - def iter_tic(self): - """ - Start to record time. - """ - self.iter_timer.reset() - - def iter_toc(self): - """ - Stop to record time. - """ - self.iter_timer.pause() - - def update_stats(self, loss, lr, mb_size,extra={}): - """ - Update the current stats. - Args: - top1_err (float): top1 error rate. - top5_err (float): top5 error rate. - loss (float): loss value. - lr (float): learning rate. - mb_size (int): mini batch size. - """ - self.loss.add_value(loss) - self.lr = lr - self.loss_total += loss * mb_size - self.num_samples += mb_size - - - for key,val in extra.items(): - self.meters[key].add_value(val) - - def log_iter_stats(self, cur_epoch, cur_iter,extra={}): - """ - log the stats of the current iteration. - Args: - cur_epoch (int): the number of current epoch. - cur_iter (int): the number of current iteration. - """ - if (cur_iter + 1) % self._cfg.LOG_PERIOD != 0: - return - eta_sec = self.iter_timer.seconds() * ( - self.MAX_EPOCH - (cur_epoch * self.epoch_iters + cur_iter + 1) - ) - eta = str(datetime.timedelta(seconds=int(eta_sec))) - stats = { - "_type": "train_iter", - "epoch": "{}/{}".format(cur_epoch + 1, self._cfg.SOLVER.MAX_EPOCH), - "iter": "{}/{}".format(cur_iter + 1, self.epoch_iters), - "time_diff": self.iter_timer.seconds(), - "eta": eta, - "loss": self.loss.get_win_median(), - "lr": self.lr, - "gpu_mem": "{:.2f} GB".format(misc.gpu_mem_usage()), - } - - for key,meter in self.meters.items(): - stats[key]=meter.get_win_median() - for key,val in extra.items(): - stats[key]=val - - logging.log_json_stats(stats) - - def log_epoch_stats(self, cur_epoch): - """ - Log the stats of the current epoch. - Args: - cur_epoch (int): the number of current epoch. - """ - eta_sec = self.iter_timer.seconds() * ( - self.MAX_EPOCH - (cur_epoch + 1) * self.epoch_iters - ) - eta = str(datetime.timedelta(seconds=int(eta_sec))) - stats = { - "_type": "train_epoch", - "epoch": "{}/{}".format(cur_epoch + 1, self._cfg.SOLVER.MAX_EPOCH), - "time_diff": self.iter_timer.seconds(), - "eta": eta, - "lr": self.lr, - "gpu_mem": "{:.2f} GB".format(misc.gpu_mem_usage()), - "RAM": "{:.2f}/{:.2f} GB".format(*misc.cpu_mem_usage()), - } - if not self._cfg.DATA.MULTI_LABEL: - avg_loss = self.loss_total / self.num_samples - stats["loss"] = avg_loss - logging.log_json_stats(stats) - - - - -class ValMeter(object): - """ - Measures validation stats. - """ - - def __init__(self, max_iter, cfg): - """ - Args: - max_iter (int): the max number of iteration of the current epoch. - cfg (CfgNode): configs. - """ - self._cfg = cfg - self.max_iter = max_iter - self.iter_timer = Timer() - # Current minibatch errors (smoothed over a window). - self.mb_top1_err = ScalarMeter(cfg.LOG_PERIOD) - self.mb_top5_err = ScalarMeter(cfg.LOG_PERIOD) - # Min errors (over the full val set). - self.min_top1_err = 100.0 - self.min_top5_err = 100.0 - # Number of misclassified examples. - self.num_top1_mis = 0 - self.num_top5_mis = 0 - self.num_samples = 0 - self.all_preds = [] - self.all_labels = [] - - def reset(self): - """ - Reset the Meter. - """ - self.iter_timer.reset() - self.mb_top1_err.reset() - self.mb_top5_err.reset() - self.num_top1_mis = 0 - self.num_top5_mis = 0 - self.num_samples = 0 - self.all_preds = [] - self.all_labels = [] - - def iter_tic(self): - """ - Start to record time. - """ - self.iter_timer.reset() - - def iter_toc(self): - """ - Stop to record time. - """ - self.iter_timer.pause() - - def update_stats(self, top1_err, top5_err, mb_size): - """ - Update the current stats. - Args: - top1_err (float): top1 error rate. - top5_err (float): top5 error rate. - mb_size (int): mini batch size. - """ - self.mb_top1_err.add_value(top1_err) - self.mb_top5_err.add_value(top5_err) - self.num_top1_mis += top1_err * mb_size - self.num_top5_mis += top5_err * mb_size - self.num_samples += mb_size - - def update_predictions(self, preds, labels): - """ - Update predictions and labels. - Args: - preds (tensor): model output predictions. - labels (tensor): labels. - """ - # TODO: merge update_prediction with update_stats. - self.all_preds.append(preds) - self.all_labels.append(labels) - - def log_iter_stats(self, cur_epoch, cur_iter): - """ - log the stats of the current iteration. - Args: - cur_epoch (int): the number of current epoch. - cur_iter (int): the number of current iteration. - """ - if (cur_iter + 1) % self._cfg.LOG_PERIOD != 0: - return - eta_sec = self.iter_timer.seconds() * (self.max_iter - cur_iter - 1) - eta = str(datetime.timedelta(seconds=int(eta_sec))) - stats = { - "_type": "val_iter", - "epoch": "{}/{}".format(cur_epoch + 1, self._cfg.SOLVER.MAX_EPOCH), - "iter": "{}/{}".format(cur_iter + 1, self.max_iter), - "time_diff": self.iter_timer.seconds(), - "eta": eta, - "gpu_mem": "{:.2f} GB".format(misc.gpu_mem_usage()), - } - if not self._cfg.DATA.MULTI_LABEL: - stats["top1_err"] = self.mb_top1_err.get_win_median() - stats["top5_err"] = self.mb_top5_err.get_win_median() - logging.log_json_stats(stats) - - def log_epoch_stats(self, cur_epoch): - """ - Log the stats of the current epoch. - Args: - cur_epoch (int): the number of current epoch. - """ - stats = { - "_type": "val_epoch", - "epoch": "{}/{}".format(cur_epoch + 1, self._cfg.SOLVER.MAX_EPOCH), - "time_diff": self.iter_timer.seconds(), - "gpu_mem": "{:.2f} GB".format(misc.gpu_mem_usage()), - "RAM": "{:.2f}/{:.2f} GB".format(*misc.cpu_mem_usage()), - } - if self._cfg.DATA.MULTI_LABEL: - stats["map"] = get_map( - torch.cat(self.all_preds).cpu().numpy(), - torch.cat(self.all_labels).cpu().numpy(), - ) - else: - top1_err = self.num_top1_mis / self.num_samples - top5_err = self.num_top5_mis / self.num_samples - self.min_top1_err = min(self.min_top1_err, top1_err) - self.min_top5_err = min(self.min_top5_err, top5_err) - - stats["top1_err"] = top1_err - stats["top5_err"] = top5_err - stats["min_top1_err"] = self.min_top1_err - stats["min_top5_err"] = self.min_top5_err - - logging.log_json_stats(stats) - - -def get_map(preds, labels): - """ - Compute mAP for multi-label case. - Args: - preds (numpy tensor): num_examples x num_classes. - labels (numpy tensor): num_examples x num_classes. - Returns: - mean_ap (int): final mAP score. - """ - - logger.info("Getting mAP for {} examples".format(preds.shape[0])) - - preds = preds[:, ~(np.all(labels == 0, axis=0))] - labels = labels[:, ~(np.all(labels == 0, axis=0))] - aps = [0] - try: - aps = average_precision_score(labels, preds, average=None) - except ValueError: - print( - "Average precision requires a sufficient number of samples \ - in a batch which are missing in this sample." - ) - - mean_ap = np.mean(aps) - return mean_ap diff --git a/video/pwtf-dvd/model_code/inference/slowfast/utils/metrics.py b/video/pwtf-dvd/model_code/inference/slowfast/utils/metrics.py deleted file mode 100644 index 0ef01b174aa5c3d54da77923f515f244327c4e80..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/utils/metrics.py +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""Functions for computing metrics.""" - -import torch - - -def topks_correct(preds, labels, ks): - """ - Given the predictions, labels, and a list of top-k values, compute the - number of correct predictions for each top-k value. - - Args: - preds (array): array of predictions. Dimension is batchsize - N x ClassNum. - labels (array): array of labels. Dimension is batchsize N. - ks (list): list of top-k values. For example, ks = [1, 5] correspods - to top-1 and top-5. - - Returns: - topks_correct (list): list of numbers, where the `i`-th entry - corresponds to the number of top-`ks[i]` correct predictions. - """ - assert preds.size(0) == labels.size( - 0 - ), "Batch dim of predictions and labels must match" - # Find the top max_k predictions for each sample - _top_max_k_vals, top_max_k_inds = torch.topk( - preds, max(ks), dim=1, largest=True, sorted=True - ) - # (batch_size, max_k) -> (max_k, batch_size). - top_max_k_inds = top_max_k_inds.t() - # (batch_size, ) -> (max_k, batch_size). - rep_max_k_labels = labels.view(1, -1).expand_as(top_max_k_inds) - # (i, j) = 1 if top i-th prediction for the j-th sample is correct. - top_max_k_correct = top_max_k_inds.eq(rep_max_k_labels) - # Compute the number of topk correct predictions for each k. - topks_correct = [ - top_max_k_correct[:k, :].view(-1).float().sum() for k in ks - ] - return topks_correct - - -def topk_errors(preds, labels, ks): - """ - Computes the top-k error for each k. - Args: - preds (array): array of predictions. Dimension is N. - labels (array): array of labels. Dimension is N. - ks (list): list of ks to calculate the top accuracies. - """ - num_topks_correct = topks_correct(preds, labels, ks) - return [(1.0 - x / preds.size(0)) * 100.0 for x in num_topks_correct] - - -def topk_accuracies(preds, labels, ks): - """ - Computes the top-k accuracy for each k. - Args: - preds (array): array of predictions. Dimension is N. - labels (array): array of labels. Dimension is N. - ks (list): list of ks to calculate the top accuracies. - """ - num_topks_correct = topks_correct(preds, labels, ks) - return [(x / preds.size(0)) * 100.0 for x in num_topks_correct] diff --git a/video/pwtf-dvd/model_code/inference/slowfast/utils/misc.py b/video/pwtf-dvd/model_code/inference/slowfast/utils/misc.py deleted file mode 100644 index 13fea609bca56845d61819707a66cbd807b956d8..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/utils/misc.py +++ /dev/null @@ -1,359 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -import json -import logging -import math -import numpy as np -import os -from datetime import datetime -import psutil -import torch -from fvcore.common.file_io import PathManager -from fvcore.nn.activation_count import activation_count -from fvcore.nn.flop_count import flop_count -from matplotlib import pyplot as plt -from torch import nn - -import slowfast.utils.logging as logging -import slowfast.utils.multiprocessing as mpu -from slowfast.datasets.utils import pack_pathway_output -from slowfast.models.batchnorm_helper import SubBatchNorm3d - -logger = logging.get_logger(__name__) - - -def check_nan_losses(loss): - """ - Determine whether the loss is NaN (not a number). - Args: - loss (loss): loss to check whether is NaN. - """ - if math.isnan(loss): - raise RuntimeError("ERROR: Got NaN losses {}".format(datetime.now())) - - -def params_count(model): - """ - Compute the number of parameters. - Args: - model (model): model to count the number of parameters. - """ - return np.sum([p.numel() for p in model.parameters()]).item() - - -def gpu_mem_usage(): - """ - Compute the GPU memory usage for the current device (GB). - """ - if torch.cuda.is_available(): - mem_usage_bytes = torch.cuda.max_memory_allocated() - else: - mem_usage_bytes = 0 - return mem_usage_bytes / 1024 ** 3 - - -def cpu_mem_usage(): - """ - Compute the system memory (RAM) usage for the current device (GB). - Returns: - usage (float): used memory (GB). - total (float): total memory (GB). - """ - vram = psutil.virtual_memory() - usage = (vram.total - vram.available) / 1024 ** 3 - total = vram.total / 1024 ** 3 - - return usage, total - - -def _get_model_analysis_input(cfg, use_train_input): - """ - Return a dummy input for model analysis with batch size 1. The input is - used for analyzing the model (counting flops and activations etc.). - Args: - cfg (CfgNode): configs. Details can be found in - slowfast/config/defaults.py - use_train_input (bool): if True, return the input for training. Otherwise, - return the input for testing. - - Returns: - inputs: the input for model analysis. - """ - rgb_dimension = 3 - if use_train_input: - input_tensors = torch.rand( - rgb_dimension, - cfg.DATA.NUM_FRAMES, - cfg.DATA.TRAIN_CROP_SIZE, - cfg.DATA.TRAIN_CROP_SIZE, - ) - else: - input_tensors = torch.rand( - rgb_dimension, - cfg.DATA.NUM_FRAMES, - cfg.DATA.TEST_CROP_SIZE, - cfg.DATA.TEST_CROP_SIZE, - ) - model_inputs = pack_pathway_output(cfg, input_tensors) - for i in range(len(model_inputs)): - model_inputs[i] = model_inputs[i].unsqueeze(0) - if cfg.NUM_GPUS: - model_inputs[i] = model_inputs[i].cuda(non_blocking=True) - - # If detection is enabled, count flops for one proposal. - if cfg.DETECTION.ENABLE: - bbox = torch.tensor([[0, 0, 1.0, 0, 1.0]]) - if cfg.NUM_GPUS: - bbox = bbox.cuda() - inputs = (model_inputs, bbox) - else: - inputs = (model_inputs,) - return inputs - - -def get_model_stats(model, cfg, mode, use_train_input): - """ - Compute statistics for the current model given the config. - Args: - model (model): model to perform analysis. - cfg (CfgNode): configs. Details can be found in - slowfast/config/defaults.py - mode (str): Options include `flop` or `activation`. Compute either flop - (gflops) or activation count (mega). - use_train_input (bool): if True, compute statistics for training. Otherwise, - compute statistics for testing. - - Returns: - float: the total number of count of the given model. - """ - assert mode in [ - "flop", - "activation", - ], "'{}' not supported for model analysis".format(mode) - if mode == "flop": - model_stats_fun = flop_count - elif mode == "activation": - model_stats_fun = activation_count - - # Set model to evaluation mode for analysis. - # Evaluation mode can avoid getting stuck with sync batchnorm. - model_mode = model.training - model.eval() - inputs = _get_model_analysis_input(cfg, use_train_input) - count_dict, _ = model_stats_fun(model, inputs) - count = sum(count_dict.values()) - model.train(model_mode) - return count - - -def log_model_info(model, cfg, use_train_input=True): - """ - Log info, includes number of parameters, gpu usage, gflops and activation count. - The model info is computed when the model is in validation mode. - Args: - model (model): model to log the info. - cfg (CfgNode): configs. Details can be found in - slowfast/config/defaults.py - use_train_input (bool): if True, log info for training. Otherwise, - log info for testing. - """ - print("Model:\n{}".format(model)) - print("Params: {:,}".format(params_count(model))) - print("Mem: {:,} MB".format(gpu_mem_usage())) - print( - "Flops: {:,} G".format( - get_model_stats(model, cfg, "flop", use_train_input) - ) - ) - print( - "Activations: {:,} M".format( - get_model_stats(model, cfg, "activation", use_train_input) - ) - ) - logger.info("nvidia-smi") - os.system("nvidia-smi") - -def is_eval_epoch(cfg, cur_epoch, multigrid_schedule): - """ - Determine if the model should be evaluated at the current epoch. - Args: - cfg (CfgNode): configs. Details can be found in - slowfast/config/defaults.py - cur_epoch (int): current epoch. - multigrid_schedule (List): schedule for multigrid training. - """ - if cur_epoch + 1 == cfg.SOLVER.MAX_EPOCH: - return True - if multigrid_schedule is not None: - prev_epoch = 0 - for s in multigrid_schedule: - if cur_epoch < s[-1]: - period = max( - (s[-1] - prev_epoch) // cfg.MULTIGRID.EVAL_FREQ + 1, 1 - ) - return (s[-1] - 1 - cur_epoch) % period == 0 - prev_epoch = s[-1] - - return (cur_epoch + 1) % cfg.TRAIN.EVAL_PERIOD == 0 - - -def plot_input(tensor, bboxes=(), texts=(), path="./tmp_vis.png"): - """ - Plot the input tensor with the optional bounding box and save it to disk. - Args: - tensor (tensor): a tensor with shape of `NxCxHxW`. - bboxes (tuple): bounding boxes with format of [[x, y, h, w]]. - texts (tuple): a tuple of string to plot. - path (str): path to the image to save to. - """ - tensor = tensor - tensor.min() - tensor = tensor / tensor.max() - f, ax = plt.subplots(nrows=1, ncols=tensor.shape[0], figsize=(50, 20)) - for i in range(tensor.shape[0]): - ax[i].axis("off") - ax[i].imshow(tensor[i].permute(1, 2, 0)) - # ax[1][0].axis('off') - if bboxes is not None and len(bboxes) > i: - for box in bboxes[i]: - x1, y1, x2, y2 = box - ax[i].vlines(x1, y1, y2, colors="g", linestyles="solid") - ax[i].vlines(x2, y1, y2, colors="g", linestyles="solid") - ax[i].hlines(y1, x1, x2, colors="g", linestyles="solid") - ax[i].hlines(y2, x1, x2, colors="g", linestyles="solid") - - if texts is not None and len(texts) > i: - ax[i].text(0, 0, texts[i]) - f.savefig(path) - - -def frozen_bn_stats(model): - """ - Set all the bn layers to eval mode. - Args: - model (model): model to set bn layers to eval mode. - """ - for m in model.modules(): - if isinstance(m, nn.BatchNorm3d): - m.eval() - - -def aggregate_sub_bn_stats(module): - """ - Recursively find all SubBN modules and aggregate sub-BN stats. - Args: - module (nn.Module) - Returns: - count (int): number of SubBN module found. - """ - count = 0 - for child in module.children(): - if isinstance(child, SubBatchNorm3d): - child.aggregate_stats() - count += 1 - else: - count += aggregate_sub_bn_stats(child) - return count - - -def launch_job(cfg, init_method, func, daemon=False): - """ - Run 'func' on one or more GPUs, specified in cfg - Args: - cfg (CfgNode): configs. Details can be found in - slowfast/config/defaults.py - init_method (str): initialization method to launch the job with multiple - devices. - func (function): job to run on GPU(s) - daemon (bool): The spawned processes’ daemon flag. If set to True, - daemonic processes will be created - """ - if cfg.NUM_GPUS > 1: - torch.multiprocessing.spawn( - mpu.run, - nprocs=cfg.NUM_GPUS, - args=( - cfg.NUM_GPUS, - func, - init_method, - cfg.SHARD_ID, - cfg.NUM_SHARDS, - cfg.DIST_BACKEND, - cfg, - ), - daemon=daemon, - ) - else: - func(cfg=cfg) - - -def get_class_names(path, parent_path=None, subset_path=None): - """ - Read json file with entries {classname: index} and return - an array of class names in order. - If parent_path is provided, load and map all children to their ids. - Args: - path (str): path to class ids json file. - File must be in the format {"class1": id1, "class2": id2, ...} - parent_path (Optional[str]): path to parent-child json file. - File must be in the format {"parent1": ["child1", "child2", ...], ...} - subset_path (Optional[str]): path to text file containing a subset - of class names, separated by newline characters. - Returns: - class_names (list of strs): list of class names. - class_parents (dict): a dictionary where key is the name of the parent class - and value is a list of ids of the children classes. - subset_ids (list of ints): list of ids of the classes provided in the - subset file. - """ - try: - with PathManager.open(path, "r") as f: - class2idx = json.load(f) - except Exception as err: - print("Fail to load file from {} with error {}".format(path, err)) - return - - max_key = max(class2idx.values()) - class_names = [None] * (max_key + 1) - - for k, i in class2idx.items(): - class_names[i] = k - - class_parent = None - if parent_path is not None and parent_path != "": - try: - with PathManager.open(parent_path, "r") as f: - d_parent = json.load(f) - except EnvironmentError as err: - print( - "Fail to load file from {} with error {}".format( - parent_path, err - ) - ) - return - class_parent = {} - for parent, children in d_parent.items(): - indices = [ - class2idx[c] for c in children if class2idx.get(c) is not None - ] - class_parent[parent] = indices - - subset_ids = None - if subset_path is not None and subset_path != "": - try: - with PathManager.open(subset_path, "r") as f: - subset = f.read().split("\n") - subset_ids = [ - class2idx[name] - for name in subset - if class2idx.get(name) is not None - ] - except EnvironmentError as err: - print( - "Fail to load file from {} with error {}".format( - subset_path, err - ) - ) - return - - return class_names, class_parent, subset_ids diff --git a/video/pwtf-dvd/model_code/inference/slowfast/utils/multigrid.py b/video/pwtf-dvd/model_code/inference/slowfast/utils/multigrid.py deleted file mode 100644 index 4aed24bb4889d30960cec5ca94ab20a73b40b9e1..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/utils/multigrid.py +++ /dev/null @@ -1,240 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""Helper functions for multigrid training.""" - -import numpy as np - -import slowfast.utils.logging as logging - -logger = logging.get_logger(__name__) - - -class MultigridSchedule(object): - """ - This class defines multigrid training schedule and update cfg accordingly. - """ - - def init_multigrid(self, cfg): - """ - Update cfg based on multigrid settings. - Args: - cfg (configs): configs that contains training and multigrid specific - hyperparameters. Details can be seen in - slowfast/config/defaults.py. - Returns: - cfg (configs): the updated cfg. - """ - self.schedule = None - # We may modify cfg.TRAIN.BATCH_SIZE, cfg.DATA.NUM_FRAMES, and - # cfg.DATA.TRAIN_CROP_SIZE during training, so we store their original - # value in cfg and use them as global variables. - cfg.MULTIGRID.DEFAULT_B = cfg.TRAIN.BATCH_SIZE - cfg.MULTIGRID.DEFAULT_T = cfg.DATA.NUM_FRAMES - cfg.MULTIGRID.DEFAULT_S = cfg.DATA.TRAIN_CROP_SIZE - - if cfg.MULTIGRID.LONG_CYCLE: - self.schedule = self.get_long_cycle_schedule(cfg) - cfg.SOLVER.STEPS = [0] + [s[-1] for s in self.schedule] - # Fine-tuning phase. - cfg.SOLVER.STEPS[-1] = ( - cfg.SOLVER.STEPS[-2] + cfg.SOLVER.STEPS[-1] - ) // 2 - cfg.SOLVER.LRS = [ - cfg.SOLVER.GAMMA ** s[0] * s[1][0] for s in self.schedule - ] - # Fine-tuning phase. - cfg.SOLVER.LRS = cfg.SOLVER.LRS[:-1] + [ - cfg.SOLVER.LRS[-2], - cfg.SOLVER.LRS[-1], - ] - - cfg.SOLVER.MAX_EPOCH = self.schedule[-1][-1] - - elif cfg.MULTIGRID.SHORT_CYCLE: - cfg.SOLVER.STEPS = [ - int(s * cfg.MULTIGRID.EPOCH_FACTOR) for s in cfg.SOLVER.STEPS - ] - cfg.SOLVER.MAX_EPOCH = int( - cfg.SOLVER.MAX_EPOCH * cfg.MULTIGRID.EPOCH_FACTOR - ) - return cfg - - def update_long_cycle(self, cfg, cur_epoch): - """ - Before every epoch, check if long cycle shape should change. If it - should, update cfg accordingly. - Args: - cfg (configs): configs that contains training and multigrid specific - hyperparameters. Details can be seen in - slowfast/config/defaults.py. - cur_epoch (int): current epoch index. - Returns: - cfg (configs): the updated cfg. - changed (bool): do we change long cycle shape at this epoch? - """ - base_b, base_t, base_s = get_current_long_cycle_shape( - self.schedule, cur_epoch - ) - if base_s != cfg.DATA.TRAIN_CROP_SIZE or base_t != cfg.DATA.NUM_FRAMES: - - cfg.DATA.NUM_FRAMES = base_t - cfg.DATA.TRAIN_CROP_SIZE = base_s - cfg.TRAIN.BATCH_SIZE = base_b * cfg.MULTIGRID.DEFAULT_B - - bs_factor = ( - float(cfg.TRAIN.BATCH_SIZE / cfg.NUM_GPUS) - / cfg.MULTIGRID.BN_BASE_SIZE - ) - - if bs_factor < 1: - cfg.BN.NORM_TYPE = "sync_batchnorm" - cfg.BN.NUM_SYNC_DEVICES = int(1.0 / bs_factor) - elif bs_factor > 1: - cfg.BN.NORM_TYPE = "sub_batchnorm" - cfg.BN.NUM_SPLITS = int(bs_factor) - else: - cfg.BN.NORM_TYPE = "batchnorm" - - cfg.MULTIGRID.LONG_CYCLE_SAMPLING_RATE = cfg.DATA.SAMPLING_RATE * ( - cfg.MULTIGRID.DEFAULT_T // cfg.DATA.NUM_FRAMES - ) - logger.info("Long cycle updates:") - logger.info("\tBN.NORM_TYPE: {}".format(cfg.BN.NORM_TYPE)) - if cfg.BN.NORM_TYPE == "sync_batchnorm": - logger.info( - "\tBN.NUM_SYNC_DEVICES: {}".format(cfg.BN.NUM_SYNC_DEVICES) - ) - elif cfg.BN.NORM_TYPE == "sub_batchnorm": - logger.info("\tBN.NUM_SPLITS: {}".format(cfg.BN.NUM_SPLITS)) - logger.info("\tTRAIN.BATCH_SIZE: {}".format(cfg.TRAIN.BATCH_SIZE)) - logger.info( - "\tDATA.NUM_FRAMES x LONG_CYCLE_SAMPLING_RATE: {}x{}".format( - cfg.DATA.NUM_FRAMES, cfg.MULTIGRID.LONG_CYCLE_SAMPLING_RATE - ) - ) - logger.info( - "\tDATA.TRAIN_CROP_SIZE: {}".format(cfg.DATA.TRAIN_CROP_SIZE) - ) - return cfg, True - else: - return cfg, False - - def get_long_cycle_schedule(self, cfg): - """ - Based on multigrid hyperparameters, define the schedule of a long cycle. - Args: - cfg (configs): configs that contains training and multigrid specific - hyperparameters. Details can be seen in - slowfast/config/defaults.py. - Returns: - schedule (list): Specifies a list long cycle base shapes and their - corresponding training epochs. - """ - - steps = cfg.SOLVER.STEPS - - default_size = float( - cfg.DATA.NUM_FRAMES * cfg.DATA.TRAIN_CROP_SIZE ** 2 - ) - default_iters = steps[-1] - - # Get shapes and average batch size for each long cycle shape. - avg_bs = [] - all_shapes = [] - for t_factor, s_factor in cfg.MULTIGRID.LONG_CYCLE_FACTORS: - base_t = int(round(cfg.DATA.NUM_FRAMES * t_factor)) - base_s = int(round(cfg.DATA.TRAIN_CROP_SIZE * s_factor)) - if cfg.MULTIGRID.SHORT_CYCLE: - shapes = [ - [ - base_t, - cfg.MULTIGRID.DEFAULT_S - * cfg.MULTIGRID.SHORT_CYCLE_FACTORS[0], - ], - [ - base_t, - cfg.MULTIGRID.DEFAULT_S - * cfg.MULTIGRID.SHORT_CYCLE_FACTORS[1], - ], - [base_t, base_s], - ] - else: - shapes = [[base_t, base_s]] - - # (T, S) -> (B, T, S) - shapes = [ - [int(round(default_size / (s[0] * s[1] * s[1]))), s[0], s[1]] - for s in shapes - ] - avg_bs.append(np.mean([s[0] for s in shapes])) - all_shapes.append(shapes) - - # Get schedule regardless of cfg.MULTIGRID.EPOCH_FACTOR. - total_iters = 0 - schedule = [] - for step_index in range(len(steps) - 1): - step_epochs = steps[step_index + 1] - steps[step_index] - - for long_cycle_index, shapes in enumerate(all_shapes): - cur_epochs = ( - step_epochs * avg_bs[long_cycle_index] / sum(avg_bs) - ) - - cur_iters = cur_epochs / avg_bs[long_cycle_index] - total_iters += cur_iters - schedule.append((step_index, shapes[-1], cur_epochs)) - - iter_saving = default_iters / total_iters - - final_step_epochs = cfg.SOLVER.MAX_EPOCH - steps[-1] - - # We define the fine-tuning phase to have the same amount of iteration - # saving as the rest of the training. - ft_epochs = final_step_epochs / iter_saving * avg_bs[-1] - - schedule.append((step_index + 1, all_shapes[-1][2], ft_epochs)) - - # Obtrain final schedule given desired cfg.MULTIGRID.EPOCH_FACTOR. - x = ( - cfg.SOLVER.MAX_EPOCH - * cfg.MULTIGRID.EPOCH_FACTOR - / sum(s[-1] for s in schedule) - ) - - final_schedule = [] - total_epochs = 0 - for s in schedule: - epochs = s[2] * x - total_epochs += epochs - final_schedule.append((s[0], s[1], int(round(total_epochs)))) - print_schedule(final_schedule) - return final_schedule - - -def print_schedule(schedule): - """ - Log schedule. - """ - logger.info("Long cycle index\tBase shape\tEpochs") - for s in schedule: - logger.info("{}\t{}\t{}".format(s[0], s[1], s[2])) - - -def get_current_long_cycle_shape(schedule, epoch): - """ - Given a schedule and epoch index, return the long cycle base shape. - Args: - schedule (configs): configs that contains training and multigrid specific - hyperparameters. Details can be seen in - slowfast/config/defaults.py. - cur_epoch (int): current epoch index. - Returns: - shapes (list): A list describing the base shape in a long cycle: - [batch size relative to default, - number of frames, spatial dimension]. - """ - for s in schedule: - if epoch < s[-1]: - return s[1] - return schedule[-1][1] diff --git a/video/pwtf-dvd/model_code/inference/slowfast/utils/multiprocessing.py b/video/pwtf-dvd/model_code/inference/slowfast/utils/multiprocessing.py deleted file mode 100644 index a56aa603697dd3a6a37871ddd4407523aeebbb8c..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/utils/multiprocessing.py +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""Multiprocessing helpers.""" - -import torch - - -def run( - local_rank, num_proc, func, init_method, shard_id, num_shards, backend, cfg -): - """ - Runs a function from a child process. - Args: - local_rank (int): rank of the current process on the current machine. - num_proc (int): number of processes per machine. - func (function): function to execute on each of the process. - init_method (string): method to initialize the distributed training. - TCP initialization: equiring a network address reachable from all - processes followed by the port. - Shared file-system initialization: makes use of a file system that - is shared and visible from all machines. The URL should start with - file:// and contain a path to a non-existent file on a shared file - system. - shard_id (int): the rank of the current machine. - num_shards (int): number of overall machines for the distributed - training job. - backend (string): three distributed backends ('nccl', 'gloo', 'mpi') are - supports, each with different capabilities. Details can be found - here: - https://pytorch.org/docs/stable/distributed.html - cfg (CfgNode): configs. Details can be found in - slowfast/config/defaults.py - """ - # Initialize the process group. - world_size = num_proc * num_shards - rank = shard_id * num_proc + local_rank - - try: - torch.distributed.init_process_group( - backend=backend, - init_method=init_method, - world_size=world_size, - rank=rank, - ) - except Exception as e: - raise e - - torch.cuda.set_device(local_rank) - func(cfg) diff --git a/video/pwtf-dvd/model_code/inference/slowfast/utils/parser.py b/video/pwtf-dvd/model_code/inference/slowfast/utils/parser.py deleted file mode 100644 index 06b4373e3b3736ceb310eed465fbc75e3bae1eb5..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/utils/parser.py +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""Argument parser functions.""" - -import argparse -import sys - -import slowfast.utils.checkpoint as cu -from slowfast.config.defaults import get_cfg - - -def parse_args(): - """ - Parse the following arguments for a default parser for PySlowFast users. - Args: - shard_id (int): shard id for the current machine. Starts from 0 to - num_shards - 1. If single machine is used, then set shard id to 0. - num_shards (int): number of shards using by the job. - init_method (str): initialization method to launch the job with multiple - devices. Options includes TCP or shared file-system for - initialization. details can be find in - https://pytorch.org/docs/stable/distributed.html#tcp-initialization - cfg (str): path to the config file. - opts (argument): provide addtional options from the command line, it - overwrites the config loaded from file. - """ - parser = argparse.ArgumentParser( - description="Provide SlowFast video training and testing pipeline." - ) - parser.add_argument( - "--shard_id", - help="The shard id of current node, Starts from 0 to num_shards - 1", - default=0, - type=int, - ) - parser.add_argument( - "--num_shards", - help="Number of shards using by the job", - default=1, - type=int, - ) - parser.add_argument( - "--init_method", - help="Initialization method, includes TCP or shared file-system", - default="tcp://localhost:9999", - type=str, - ) - parser.add_argument( - "--cfg", - dest="cfg_file", - help="Path to the config file", - default="configs/Kinetics/SLOWFAST_4x16_R50.yaml", - type=str, - ) - parser.add_argument( - "opts", - help="See slowfast/config/defaults.py for all options", - default=None, - nargs=argparse.REMAINDER, - ) - if len(sys.argv) == 1: - parser.print_help() - return parser.parse_args() - - -def load_config(args): - """ - Given the arguemnts, load and initialize the configs. - Args: - args (argument): arguments includes `shard_id`, `num_shards`, - `init_method`, `cfg_file`, and `opts`. - """ - # Setup cfg. - cfg = get_cfg() - # Load config from cfg. - if args.cfg_file is not None: - cfg.merge_from_file(args.cfg_file) - # Load config from command line, overwrite config from opts. - if args.opts is not None: - cfg.merge_from_list(args.opts) - - # Inherit parameters from args. - if hasattr(args, "num_shards") and hasattr(args, "shard_id"): - cfg.NUM_SHARDS = args.num_shards - cfg.SHARD_ID = args.shard_id - if hasattr(args, "rng_seed"): - cfg.RNG_SEED = args.rng_seed - if hasattr(args, "output_dir"): - cfg.OUTPUT_DIR = args.output_dir - - # Create the checkpoint dir. - cu.make_checkpoint_dir(cfg.OUTPUT_DIR) - return cfg diff --git a/video/pwtf-dvd/model_code/inference/slowfast/utils/weight_init_helper.py b/video/pwtf-dvd/model_code/inference/slowfast/utils/weight_init_helper.py deleted file mode 100644 index 0b5544a70529f5dd1b06ba05a6aca4c7f508bdf3..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/slowfast/utils/weight_init_helper.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. - -"""Utility function for weight initialization""" - -import torch.nn as nn -from fvcore.nn.weight_init import c2_msra_fill - - -def init_weights(model, fc_init_std=0.01, zero_init_final_bn=True): - """ - Performs ResNet style weight initialization. - Args: - fc_init_std (float): the expected standard deviation for fc layer. - zero_init_final_bn (bool): if True, zero initialize the final bn for - every bottleneck. - """ - for m in model.modules(): - if isinstance(m, nn.Conv3d): - """ - Follow the initialization method proposed in: - {He, Kaiming, et al. - "Delving deep into rectifiers: Surpassing human-level - performance on imagenet classification." - arXiv preprint arXiv:1502.01852 (2015)} - """ - c2_msra_fill(m) - elif isinstance(m, nn.BatchNorm3d): - if ( - hasattr(m, "transform_final_bn") - and m.transform_final_bn - and zero_init_final_bn - ): - batchnorm_weight = 0.0 - else: - batchnorm_weight = 1.0 - if m.weight is not None: - m.weight.data.fill_(batchnorm_weight) - if m.bias is not None: - m.bias.data.zero_() - if isinstance(m, nn.Linear): - m.weight.data.normal_(mean=0.0, std=fc_init_std) - m.bias.data.zero_() diff --git a/video/pwtf-dvd/model_code/inference/test_on_raw_video.py b/video/pwtf-dvd/model_code/inference/test_on_raw_video.py deleted file mode 100644 index 9074dcd8ab946d4db33467594722f9e3e83199a7..0000000000000000000000000000000000000000 --- a/video/pwtf-dvd/model_code/inference/test_on_raw_video.py +++ /dev/null @@ -1,251 +0,0 @@ - -import torch -from torch.nn import functional as F -import os -import numpy as np -from test_tools.common import detect_all, grab_all_frames -from test_tools.utils import get_crop_box -from test_tools.ct.operations import find_longest, multiple_tracking -from test_tools.faster_crop_align_xray import FasterCropAlignXRay -from test_tools.supply_writer import SupplyWriter -import argparse -from tqdm import tqdm -from torchvision.transforms import Compose, ToTensor, Normalize -from model.framework import get_model -import cv2 -from PIL import Image - -mean = torch.tensor([0.485 * 255, 0.456 * 255, 0.406 * 255,]).cuda().view(1, 3, 1, 1, 1) -std = torch.tensor([0.229 * 255, 0.224 * 255, 0.225 * 255,]).cuda().view(1, 3, 1, 1, 1) - -def main(): - """Main inference function""" - parser = argparse.ArgumentParser(description="FTCN Face Depth Estimation Inference") - parser.add_argument("--video", type=str, help="Input video path", default="./examples/shining.mp4") - parser.add_argument("--out_dir", type=str, help="Output directory", default="./examples") - parser.add_argument("--model_path", type=str, help="Model checkpoint path", default="./model/for_deploy_model3.pth") - parser.add_argument("--max_frame", type=int, help="Maximum number of frames to process", default=768) - args = parser.parse_args() - - # Load model - print("Loading model...") - model = get_model() - model.load_state_dict(torch.load(args.model_path, map_location='cpu')) - model.eval() - model.cuda() - print("Model loaded successfully!") - - # Initialize preprocessing functions - crop_align_func = FasterCropAlignXRay(224) - - # Setup input/output paths - input_file = args.video - os.makedirs(args.out_dir, exist_ok=True) - basename = os.path.splitext(os.path.basename(input_file))[0] +"_detect.mp4" - out_file = os.path.join(args.out_dir, basename) - - # Process video frames - max_frame = args.max_frame - cache_file = f"{input_file}_{str(max_frame)}.pth" - - if os.path.exists(cache_file): - print("Loading cached detection results...") - detect_res, all_lm68 = torch.load(cache_file) - frames = grab_all_frames(input_file, max_size=max_frame, cvt=True) - print("Detection results loaded from cache") - else: - print("Performing face detection...") - detect_res, all_lm68, frames = detect_all( - input_file, return_frames=True, max_size=max_frame - ) - torch.save((detect_res, all_lm68), cache_file) - print("Face detection completed") - - print(f"Processing {len(frames)} frames") - - - # Process detection results - shape = frames[0].shape[:2] - all_detect_res = [] - - assert len(all_lm68) == len(detect_res) - - for faces, faces_lm68 in zip(detect_res, all_lm68): - new_faces = [] - for (box, lm5, score), face_lm68 in zip(faces, faces_lm68): - new_face = (box, lm5, face_lm68, score) - new_faces.append(new_face) - all_detect_res.append(new_faces) - - detect_res = all_detect_res - - # Track faces across frames - print("Tracking faces across frames...") - tracks = multiple_tracking(detect_res) - tuples = [(0, len(detect_res))] * len(tracks) - - print(f"Found {len(tracks)} face tracks") - - if len(tracks) == 0: - print("No tracks found, using longest sequence...") - tuples, tracks = find_longest(detect_res) - - # Extract face crops and landmarks - data_storage = {} - frame_boxes = {} - super_clips = [] - - for track_i, ((start, end), track) in enumerate(zip(tuples, tracks)): - print(f"Processing track {track_i}: frames {start}-{end}") - assert len(detect_res[start:end]) == len(track) - - super_clips.append(len(track)) - - for face, frame_idx, j in zip(track, range(start, end), range(len(track))): - box, lm5, lm68 = face[:3] - big_box = get_crop_box(shape, box, scale=0.5) - - top_left = big_box[:2][None, :] - - new_lm5 = lm5 - top_left - new_lm68 = lm68 - top_left - new_box = (box.reshape(2, 2) - top_left).reshape(-1) - - info = (new_box, new_lm5, new_lm68, big_box) - - x1, y1, x2, y2 = big_box - cropped = frames[frame_idx][y1:y2, x1:x2] - - base_key = f"{track_i}_{j}_" - data_storage[base_key + "img"] = cropped - data_storage[base_key + "ldm"] = info - data_storage[base_key + "idx"] = frame_idx - - frame_boxes[frame_idx] = np.rint(box).astype(np.int32) - - print(f"Sampling clips from super clips: {super_clips}") - - # Generate clips for temporal analysis - clips_for_video = [] - clip_size = 32 - pad_length = clip_size - 1 - - for super_clip_idx, super_clip_size in enumerate(super_clips): - inner_index = list(range(super_clip_size)) - - if super_clip_size < clip_size: # Need padding for short sequences - post_module = inner_index[1:-1][::-1] + inner_index - l_post = len(post_module) - post_module = post_module * (pad_length // l_post + 1) - post_module = post_module[:pad_length] - - if len(post_module) != pad_length: - continue # Skip sequences that are too short - - pre_module = inner_index + inner_index[1:-1][::-1] - l_pre = len(post_module) - pre_module = pre_module * (pad_length // l_pre + 1) - pre_module = pre_module[-pad_length:] - - if len(pre_module) != pad_length: - continue # Skip sequences that are too short - - inner_index = pre_module + inner_index + post_module - - super_clip_size = len(inner_index) - - # Generate sliding window clips - frame_range = [ - inner_index[i : i + clip_size] - for i in range(super_clip_size) - if i + clip_size <= super_clip_size - ] - - for indices in frame_range: - clip = [(super_clip_idx, t) for t in indices] - clips_for_video.append(clip) - - # Run inference on clips - preds = [] - frame_res = {} - test_transform = Compose([ - ToTensor(), - Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) - ]) - - print(f"Running inference on {len(clips_for_video)} clips...") - for clip in tqdm(clips_for_video, desc="Processing clips"): - # Prepare data for this clip - images = [data_storage[f"{i}_{j}_img"] for i, j in clip] - landmarks = [data_storage[f"{i}_{j}_ldm"] for i, j in clip] - frame_ids = [data_storage[f"{i}_{j}_idx"] for i, j in clip] - - # Align and crop faces - landmarks, images = crop_align_func(landmarks, images) - - # Convert to temporal frequency domain - images_tensor = [] - ft_images = [] - for image in images: - image = np.array(image) - img_pil = Image.fromarray(image) - img_pil = test_transform(img_pil) - images_tensor.append(img_pil) - - # Apply median filter and compute frequency domain - img_filtered = cv2.medianBlur(image.copy(), 5) - ft_images.append(cv2.cvtColor((image - img_filtered), cv2.COLOR_RGB2GRAY)) - - # Compute FFT for temporal analysis - ft_images = np.array(ft_images) - ft_images = np.absolute(np.fft.fft(ft_images, axis=0)[:clip_size//2] * 1/clip_size) - ft_images = torch.from_numpy(ft_images).cuda() - ft_images = ft_images.unsqueeze(0) - - # Prepare image tensor - images = torch.stack(images_tensor, dim=1) - images = images.unsqueeze(0) - images = images.cuda() - - # Run model inference - with torch.no_grad(): - output = model(images, ft_images) - output = F.sigmoid(output) - output = output.squeeze(0) - - pred = float(output.item()) - - # Store predictions for each frame - for f_id in frame_ids: - if f_id not in frame_res: - frame_res[f_id] = [] - frame_res[f_id].append(pred) - preds.append(pred) - - - # Aggregate results - mean_pred = np.mean(preds) - print(f"Average prediction score: {mean_pred:.4f}") - - # Prepare final results - boxes = [] - scores = [] - - for frame_idx in range(len(frames)): - if frame_idx in frame_res: - pred_prob = np.mean(frame_res[frame_idx]) - rect = frame_boxes[frame_idx] - else: - pred_prob = None - rect = None - scores.append(pred_prob) - boxes.append(rect) - - # Save results to video - print(f"Saving results to {out_file}") - SupplyWriter(args.video, out_file, 0.002584857167676091).run(frames, scores, boxes) - print("Inference completed successfully!") - - -if __name__ == "__main__": - main()