update
This commit is contained in:
parent
70bb7fa5ba
commit
a488de2a93
|
|
@ -0,0 +1,84 @@
|
||||||
|
import os.path
|
||||||
|
from io import BytesIO
|
||||||
|
from itertools import chain
|
||||||
|
from PIL import Image
|
||||||
|
from more_itertools import chunked
|
||||||
|
from os import listdir
|
||||||
|
from torchinfo import summary
|
||||||
|
from torchvision import transforms
|
||||||
|
from torchvision.io import decode_jpeg
|
||||||
|
from tqdm import tqdm
|
||||||
|
from facenet_pytorch import InceptionResnetV1
|
||||||
|
from edgeface import get_model
|
||||||
|
import torch
|
||||||
|
import numpy
|
||||||
|
from insightface.app import FaceAnalysis
|
||||||
|
|
||||||
|
CROPPED_DIR = r"D:\helloproject-ai-data\face_cropped"
|
||||||
|
MODEL_NAME = "edgeface_s_gamma_05"
|
||||||
|
CHUNK_SIZE = 64
|
||||||
|
DEVICE = torch.device("cuda")
|
||||||
|
INPUT_SIZE = 256
|
||||||
|
face_analysis = FaceAnalysis()
|
||||||
|
face_analysis.prepare(ctx_id=0, det_size=(INPUT_SIZE, INPUT_SIZE))
|
||||||
|
|
||||||
|
transform = transforms.Compose([
|
||||||
|
# transforms.ToTensor(),
|
||||||
|
transforms.Resize(size=int(INPUT_SIZE * 1.2), interpolation=transforms.InterpolationMode.BILINEAR),
|
||||||
|
transforms.CenterCrop(size=INPUT_SIZE)
|
||||||
|
# transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]),
|
||||||
|
])
|
||||||
|
|
||||||
|
# model: torch.nn.Module = get_model(name=MODEL_NAME)
|
||||||
|
# model.load_state_dict(
|
||||||
|
# torch.load(os.path.join(os.path.dirname(__file__), "edgeface", f"{MODEL_NAME}.pt"), weights_only=False))
|
||||||
|
model = torch.load(r"\\192.168.250.1\share\helloproject-ai-data\artifact\vggface2_facenet.pth", weights_only=False)
|
||||||
|
model = model.eval().cuda(device=DEVICE)
|
||||||
|
with torch.no_grad():
|
||||||
|
# print(model.eval())
|
||||||
|
summary(model, input_size=[CHUNK_SIZE, 3, INPUT_SIZE, INPUT_SIZE])
|
||||||
|
# trt_model = torch.compile(model)
|
||||||
|
|
||||||
|
embeddings: numpy.ndarray | None = None
|
||||||
|
labels = []
|
||||||
|
|
||||||
|
all_cropped_list = list(
|
||||||
|
chain.from_iterable([listdir(os.path.join(CROPPED_DIR, name)) for name in listdir(CROPPED_DIR)]))
|
||||||
|
# all_cropped_list = all_cropped_list[:10000]
|
||||||
|
|
||||||
|
pbar = tqdm(total=all_cropped_list.__len__())
|
||||||
|
|
||||||
|
for name_chunk in chunked(all_cropped_list, n=CHUNK_SIZE):
|
||||||
|
decoded_images = []
|
||||||
|
for file_name in name_chunk:
|
||||||
|
sub_dir_name = file_name.split("=")[0]
|
||||||
|
dat = numpy.fromfile(os.path.join(CROPPED_DIR, sub_dir_name, file_name), dtype=numpy.uint8)
|
||||||
|
try:
|
||||||
|
decoded_image = decode_jpeg(torch.tensor(dat), device=DEVICE)
|
||||||
|
except BaseException as e:
|
||||||
|
decoded_image = (torch.tensor(numpy.array(Image.open(BytesIO(dat.tobytes())))
|
||||||
|
.transpose([2, 0, 1])).to(DEVICE))
|
||||||
|
decoded_images.append(decoded_image) # transform(decoded_image.to(torch.float32) / 255.))
|
||||||
|
if pbar.desc != sub_dir_name:
|
||||||
|
pbar.set_description(sub_dir_name)
|
||||||
|
pbar.update(1)
|
||||||
|
# input_tensor = torch.stack(decoded_images)
|
||||||
|
# res: torch.Tensor = model(input_tensor)
|
||||||
|
# print(res.shape)
|
||||||
|
# print(face_analysis.get(decoded_images[0].cpu().numpy().transpose([1, 2, 0])[:, :, ::-1]))
|
||||||
|
_label = []
|
||||||
|
res = []
|
||||||
|
for decoded_image, name in zip(decoded_images, name_chunk):
|
||||||
|
if a := face_analysis.get(decoded_image.cpu().numpy().transpose([1, 2, 0])[:, :, ::-1]):
|
||||||
|
_label.append(name)
|
||||||
|
res.append(a[0].embedding)
|
||||||
|
# print(a[0].embedding.shape)
|
||||||
|
res = numpy.stack(res)
|
||||||
|
if embeddings is not None:
|
||||||
|
embeddings = numpy.concatenate([embeddings, res], axis=0)
|
||||||
|
else:
|
||||||
|
embeddings = res
|
||||||
|
labels.extend(_label)
|
||||||
|
# print(embeddings.shape, labels.__len__())
|
||||||
|
numpy.save("embeddings.npy", embeddings)
|
||||||
|
numpy.save("embeddings_label.npy", numpy.array(all_cropped_list))
|
||||||
Loading…
Reference in New Issue