logo
dreamfireyu 4 years ago
parent
commit
d57c9468fc
  1. 13
      __init__.py
  2. 23
      deepfake.py
  3. 8
      kernel_utils.py

13
__init__.py

@ -0,0 +1,13 @@
# Copyright 2021 Zilliz. 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.

23
deepfake.py

@ -3,11 +3,11 @@ import os
import re import re
import string import string
import time import time
import sys
from pathlib import Path
import torch import torch
import pandas as pd import pandas as pd
from .kernel_utils import VideoReader, FaceExtractor, confident_strategy, predict_on_video_set
from .classifiers import DeepFakeClassifier
import towhee import towhee
from towhee.operator.base import NNOperator, OperatorFlag from towhee.operator.base import NNOperator, OperatorFlag
from towhee import register from towhee import register
@ -21,16 +21,21 @@ log = logging.getLogger()
class Deepfake(NNOperator): class Deepfake(NNOperator):
''' '''
ViT Distillation
Deepfake
''' '''
def __init__(self): def __init__(self):
pass
super().__init__()
sys.path.append(str(Path(__file__).parent))
weights_dir = os.path.join(str(Path(__file__).parent),"weights/")
self.model_paths = [os.path.join(weights_dir,model) for model in os.listdir(weights_dir)]
self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
def __call__(self, filepath: string) -> list: def __call__(self, filepath: string) -> list:
weights_dir = "weights/"
from kernel_utils import VideoReader, FaceExtractor, confident_strategy, predict_on_video_set
from classifiers import DeepFakeClassifier
models = [] models = []
model_paths = [os.path.join(weights_dir,model) for model in os.listdir(weights_dir)]
for path in model_paths:
model = DeepFakeClassifier(encoder="tf_efficientnet_b7_ns").to("cuda")
for path in self.model_paths:
model = DeepFakeClassifier(encoder="tf_efficientnet_b7_ns").to(self.device)
print("loading state dict {}".format(path)) print("loading state dict {}".format(path))
checkpoint = torch.load(path, map_location="cpu") checkpoint = torch.load(path, map_location="cpu")
state_dict = checkpoint.get("state_dict", checkpoint) state_dict = checkpoint.get("state_dict", checkpoint)

8
kernel_utils.py

@ -15,7 +15,7 @@ log = logging.getLogger()
mean = [0.485, 0.456, 0.406] mean = [0.485, 0.456, 0.406]
std = [0.229, 0.224, 0.225] std = [0.229, 0.224, 0.225]
normalize_transform = Normalize(mean, std) normalize_transform = Normalize(mean, std)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
class VideoReader: class VideoReader:
"""Helper class for reading one or more frames from a video file.""" """Helper class for reading one or more frames from a video file."""
@ -201,7 +201,7 @@ class VideoReader:
class FaceExtractor: class FaceExtractor:
def __init__(self, video_read_fn): def __init__(self, video_read_fn):
self.video_read_fn = video_read_fn self.video_read_fn = video_read_fn
self.detector = MTCNN(margin=0, thresholds=[0.7, 0.8, 0.8], device="cuda")
self.detector = MTCNN(margin=0, thresholds=[0.7, 0.8, 0.8], device=device)
def process_videos(self, input_dir, filenames, video_idxs): def process_videos(self, input_dir, filenames, video_idxs):
videos_read = [] videos_read = []
@ -306,7 +306,7 @@ def isotropically_resize_image(img, size, interpolation_down=cv2.INTER_AREA, int
def dist(p1, p2): def dist(p1, p2):
return math.sqrt((p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2) return math.sqrt((p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2)
detector = MTCNN(margin=0, thresholds=(0.7, 0.8, 0.8), device="cuda")
detector = MTCNN(margin=0, thresholds=(0.7, 0.8, 0.8), device=device)
def predict_on_video(distill, face_extractor, video_path, batch_size, input_size, models, strategy=np.mean, def predict_on_video(distill, face_extractor, video_path, batch_size, input_size, models, strategy=np.mean,
apply_compression=False): apply_compression=False):
batch_size *= 4 batch_size *= 4
@ -344,7 +344,7 @@ def predict_on_video(distill, face_extractor, video_path, batch_size, input_size
else: else:
pass pass
if n > 0: if n > 0:
x = torch.tensor(x, device="cuda").float()
x = torch.tensor(x, device=device).float()
#e = torch.tensor(e, device="cuda").float() #eye #e = torch.tensor(e, device="cuda").float() #eye
# Preprocess the images. # Preprocess the images.
x = x.permute((0, 3, 1, 2)) x = x.permute((0, 3, 1, 2))

Loading…
Cancel
Save