DELF 및 TensorFlow Hub를 사용하여 이미지를 일치시키는 방법

View on TensorFlow.org Run in Google Colab View on GitHub Download notebook TF Hub 모델보기

TensorFlow Hub(TF-Hub)는 재사용 가능한 리소스, 특히 사전 훈련된 모듈에서 패키징된 머신러닝 전문 지식을 공유하는 플랫폼입니다.

이 colab에서는 DELF 신경망과 이미지 처리 로직을 패키지로 구성해 키포인트와 설명자를 식별하는 모듈을 사용합니다. 신경망의 가중치는 이 논문에 설명된 대로 랜드마크의 이미지에 대해 훈련되었습니다.

설정

pip install scikit-image
from absl import logging

import matplotlib.pyplot as plt
import numpy as np
from PIL import Image, ImageOps
from scipy.spatial import cKDTree
from skimage.feature import plot_matches
from skimage.measure import ransac
from skimage.transform import AffineTransform
from six import BytesIO

import tensorflow as tf

import tensorflow_hub as hub
from six.moves.urllib.request import urlopen
2022-12-14 20:26:52.104385: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer.so.7'; dlerror: libnvinfer.so.7: cannot open shared object file: No such file or directory
2022-12-14 20:26:52.104496: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer_plugin.so.7'; dlerror: libnvinfer_plugin.so.7: cannot open shared object file: No such file or directory
2022-12-14 20:26:52.104506: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.

데이터

다음 셀에서는 일치와 비교를 위해 DELF로 처리할 두 이미지의 URL을 지정합니다.

Choose images

이미지를 다운로드, 크기 조정, 저장 및 표시합니다.

def download_and_resize(name, url, new_width=256, new_height=256):
  path = tf.keras.utils.get_file(url.split('/')[-1], url)
  image = Image.open(path)
  image = ImageOps.fit(image, (new_width, new_height), Image.ANTIALIAS)
  return image
image1 = download_and_resize('image_1.jpg', IMAGE_1_URL)
image2 = download_and_resize('image_2.jpg', IMAGE_2_URL)

plt.subplot(1,2,1)
plt.imshow(image1)
plt.subplot(1,2,2)
plt.imshow(image2)
Downloading data from https://upload.wikimedia.org/wikipedia/commons/2/28/Bridge_of_Sighs%2C_Oxford.jpg
7013850/7013850 [==============================] - 0s 0us/step
/tmpfs/tmp/ipykernel_28045/2456265030.py:4: DeprecationWarning: ANTIALIAS is deprecated and will be removed in Pillow 10 (2023-07-01). Use Resampling.LANCZOS instead.
  image = ImageOps.fit(image, (new_width, new_height), Image.ANTIALIAS)
Downloading data from https://upload.wikimedia.org/wikipedia/commons/c/c3/The_Bridge_of_Sighs_and_Sheldonian_Theatre%2C_Oxford.jpg
14164194/14164194 [==============================] - 1s 0us/step
<matplotlib.image.AxesImage at 0x7fb8c8879be0>

png

데이터에 DELF 모듈 적용하기

DELF 모듈은 이미지를 입력으로 받아 주목할 부분을 벡터로 설명합니다. 다음 셀에 이 colab 로직의 핵심 부분이 포함되어 있습니다.

delf = hub.load('https://tfhub.dev/google/delf/1').signatures['default']
def run_delf(image):
  np_image = np.array(image)
  float_image = tf.image.convert_image_dtype(np_image, tf.float32)

  return delf(
      image=float_image,
      score_threshold=tf.constant(100.0),
      image_scales=tf.constant([0.25, 0.3536, 0.5, 0.7071, 1.0, 1.4142, 2.0]),
      max_feature_num=tf.constant(1000))
result1 = run_delf(image1)
result2 = run_delf(image2)

위치 및 설명 벡터를 사용하여 이미지 일치시키기

TensorFlow is not needed for this post-processing and visualization

match_images(image1, image2, result1, result2)
Loaded image 1's 233 features
Loaded image 2's 262 features
Found 47 inliers

png