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
-
-
- 1 Academia Sinica,
- 2 Microsoft,
- 3 National Taiwan University,
-
- 4 National 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
-
-
-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 |
-|--|--------|------------|------------|------------|---------|-----------|
-|||||||
-
-
-## 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
-
-
-
-
-
-
-
-
-> **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.
-
-
-
-
-
-## 🔥 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.**
-
-
-
-
-
-## :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
-
-
-
-# [Paper](https://ieeexplore.ieee.org/document/10547206)
-
-[](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:
-
-
-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.
-
-
-
-## 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.
-
-
-
-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.
-
-
-
-
-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.
-
-
-
-
-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.
-
-
-
-### 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.
-
-
-
-
-### 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.
-
-
-
-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.
-
-
-
-### 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.
-
-
-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.
-
-
-### 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.
-
-
-
-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.
-
-
-
-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 Size-Invariant TimeSformer
-
-
-
-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.
-
-
-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
-
-
-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
-
-
-
-
-
- ⭐ We got Highlight !
-
-
-
-
-
-
- Interactive Demos
-
-
-
-
-
-
-
- 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
-
-
-
-
-
- Frequency Extraction : 1D FFT per‑pixel along time captures subtle temporal artifacts.
-
-
-
-
-
-
-
- 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 highlights regions (eyes, mouth) where temporal incoherence is likely.
-
-
-
-
-
-
-
- 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 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}
-}
-
-
-
📋 Copy BibTeX
-
⬇️ Jump to Demos
-
📄 ICCV Paper (soon)
-
🤗 Hugging Face Demo (soon)
-
-
-
-
-
- 🙏 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()