diff options
| author | zhang <zch921005@126.com> | 2019-12-01 17:21:30 +0800 |
|---|---|---|
| committer | zhang <zch921005@126.com> | 2019-12-01 17:21:30 +0800 |
| commit | a7c7354946a3f9c63f8dda32a871022985a8fd83 (patch) | |
| tree | d00bbcbc788411008830e1413d5628c72421e677 /cv/image_similarity/cnn/feature_similarity.py | |
| parent | dcb7e03b282b03ebd950f0a90714ae4ec770527d (diff) | |
添加image similarity
Diffstat (limited to 'cv/image_similarity/cnn/feature_similarity.py')
| -rw-r--r-- | cv/image_similarity/cnn/feature_similarity.py | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/cv/image_similarity/cnn/feature_similarity.py b/cv/image_similarity/cnn/feature_similarity.py new file mode 100644 index 0000000..ff10250 --- /dev/null +++ b/cv/image_similarity/cnn/feature_similarity.py @@ -0,0 +1,71 @@ +import random +import torch +from cv.image_similarity.cnn.build_models import IR_50, IR_101, IR_152 +import torchvision +import os +from PIL import Image + + +to_torch_tensor = torchvision.transforms.Compose([torchvision.transforms.ToTensor(), + torchvision.transforms.Normalize([0.5, 0.5, 0.5],[0.5, 0.5, 0.5])]) + + + +def l2_norm(input, axis=1): + norm = torch.norm(input, 2, axis, True) + output = torch.div(input, norm) + + return output + + +def init_model(model, param, device): + m = model([112, 112]) + m.eval() + m.to(device) + m.load_state_dict(torch.load(param, map_location=torch.device('cpu'))) + return m + + +def get_model_pool(device): + model_pool = [] + # double + model_pool.append(init_model(IR_50, 'models/backbone_ir50_ms1m_epoch120.pth', device)) + # model_pool.append(init_model(IR_50, 'models/backbone_ir50_ms1m_epoch120.pth', device)) + # + # model_pool.append(init_model(IR_50, 'models/Backbone_IR_50_LFW.pth', device)) + # model_pool.append(init_model(IR_101, 'models/Backbone_IR_101_Batch_108320.pth', device)) + # model_pool.append(init_model(IR_152, 'models/Backbone_IR_152_MS1M_Epoch_112.pth', device)) + return model_pool + + +def get_model(device): + return init_model(IR_50, 'models/backbone_ir50_ms1m_epoch120.pth', device) + + +device = torch.device('cpu') +model = get_model(device) +print('----models load over----') +images = os.listdir('../imgs/lena') + + +vectors = [] + +for img in images: + print(img) + img = Image.open('../imgs/lena/' + img).convert('RGB') + # print(dir(img)) + print(img.size, img.mode) + img = to_torch_tensor(img.resize((112, 112), Image.ANTIALIAS)) + img = img.unsqueeze_(0).to(device) + feature = model(img) + vectors.append(l2_norm(feature).detach_()) + +print('----vectors calculate over----') + + +for i in range(len(vectors)): + for j in range(len(vectors)): + # consine distance + dist = (vectors[i]*vectors[j]).sum().item() + print(images[i], images[j], dist) + print('-------------') |
