dp92 commited on
Commit
053f91b
·
1 Parent(s): 9ea432c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +36 -35
app.py CHANGED
@@ -1,49 +1,50 @@
1
-
2
  import torch
 
 
 
 
3
  from PIL import Image
4
 
 
 
5
 
6
- # Load the pre-trained ResNet50 model from Hugging Face
7
- model_name = 'pytorch/vision:v0.9.0'
8
- model = AutoModel.from_pretrained(model_name)
9
 
10
  # Set the model to evaluation mode
11
  model.eval()
12
 
13
- # Load the tokenizer
14
- tokenizer = AutoTokenizer.from_pretrained(model_name)
15
-
16
- # Define the preprocessing pipeline
17
  preprocess = transforms.Compose([
18
  transforms.Resize(256),
19
  transforms.CenterCrop(224),
20
  transforms.ToTensor(),
21
- transforms.Normalize(mean=[0.485, 0.456, 0.406],
22
- std=[0.229, 0.224, 0.225])
 
 
23
  ])
24
 
25
- # Define a function to extract features from an image
26
- def extract_features(image_path, model, tokenizer, preprocess):
27
- # Load the image
28
- image = Image.open(image_path).convert('RGB')
29
- # Apply the preprocessing pipeline
30
- image = preprocess(image)
31
- # Add a batch dimension to the image tensor
32
- image = image.unsqueeze(0)
33
- # Encode the image using the tokenizer
34
- inputs = tokenizer(image, padding=True, truncation=True, return_tensors='pt')
35
- # Pass the inputs through the model to get the features
36
- outputs = model(**inputs)
37
- # Return the features
38
- return outputs.last_hidden_state.squeeze().detach().numpy()
39
-
40
- # Define a dictionary to store the features
41
- features_dict = {}
42
-
43
- # Loop over the images and extract the features
44
- for image_name in image_names:
45
- # Extract the features for this image
46
- image_path = os.path.join(images_folder, image_name)
47
- features = extract_features(image_path, model, tokenizer, preprocess)
48
- # Add the features to the dictionary
49
- features_dict[image_name] = features
 
 
1
  import torch
2
+ import torch.nn as nn
3
+ import torchvision.models as models
4
+ import torchvision.transforms as transforms
5
+ import os
6
  from PIL import Image
7
 
8
+ # Define the ResNet-50 model
9
+ model = models.resnet50(pretrained=True)
10
 
11
+ # Remove the classification head (the fully connected layer)
12
+ num_features = model.fc.in_features
13
+ model.fc = nn.Identity()
14
 
15
  # Set the model to evaluation mode
16
  model.eval()
17
 
18
+ # Define the preprocessing transforms
 
 
 
19
  preprocess = transforms.Compose([
20
  transforms.Resize(256),
21
  transforms.CenterCrop(224),
22
  transforms.ToTensor(),
23
+ transforms.Normalize(
24
+ mean=[0.485, 0.456, 0.406],
25
+ std=[0.229, 0.224, 0.225]
26
+ )
27
  ])
28
 
29
+ # Define the dictionary to store the feature vectors
30
+ features = {}
31
+
32
+ # Iterate over the images and extract the features
33
+ image_dir = 'lfw'
34
+ for root, dirs, files in os.walk(image_dir):
35
+ for file in files:
36
+ # Load the image
37
+ image_path = os.path.join(root, file)
38
+ image = Image.open(image_path).convert('RGB')
39
+
40
+ # Apply the preprocessing transforms
41
+ input_tensor = preprocess(image)
42
+ input_batch = input_tensor.unsqueeze(0)
43
+
44
+ # Extract the features from the penultimate layer
45
+ with torch.no_grad():
46
+ features_tensor = model(input_batch)
47
+ features_vector = torch.squeeze(features_tensor).numpy()
48
+
49
+ # Store the feature vector in the dictionary
50
+ features[file] = features_vector