LoginSignup
1
0

【ImgSim】教師なしでの画像間の距離推論

Posted at

Imgsimとは

  • 異なる画像間の特徴ベクトルの距離や類似度を計算できるライブラリ
  • 手法はAugNet
    • 教師なし学習

AugNetとは

  • CNNを教師なし学習のルールで学習させる。
  • 同じ元画像から増強された画像の表現は埋め込み空間で互いに近くなる
  • 異なる画像から増強された画像の表現は互いに遠くなる

インストール方法

pip install imgsim

やってみた

使用データセット

datasetのダウンロード

git clone https://github.com/DeepSportradar/player-reidentification-challenge

ImgSimのテスト

この6枚の画像の距離を計算
5_25_mans
左から1,2,3とインデックスをふる。

同じ人の距離を求めてみる。

赤い人1 赤い人2 距離    青い人1 青い人2 距離
1 2 10.91 4 5 14.72
1 3 16.64 4 6 15.89
2 3 15.09 5 6 14.89

異なる人の距離を求めてみる。

赤い人 青い人 距離    赤い人 青い人 距離    赤い人 青い人 距離
1 4 30.58 2 4 29.68 3 4 27.37
1 5 29.46 2 5 28.47 3 5 25.35
1 6 30.19 2 6 29.52 3 6 26.67

ユニフォームの色が似ている人同士でも距離を計算してみる

to_github3
※ 一段目が同じ人で二段目がGallery

一段目の一番左の人をQueryとする。

同じ人 距離    違う人 距離
  1 13.560963 1 15.342218
  2 12.848311 2 14.851833
  3 19.586132 3 23.056866
  4 14.381772 4 18.973288
  5 17.720009 5 15.511065
   6 28.096533

実験からわかったことと課題

  • 背景による影響が強い気がする。
    • インスタンスセグメンテーションで背景を削除してみる。
  • 1対多で探索する方法がわからない。

今回使用したコード

import imgsim
import cv2

vtr = imgsim.Vectorizer()

red1_img = cv2.imread("./images/00437_01_01.jpeg")
red2_img = cv2.imread("./images/00437_01_10.jpeg")
red3_img = cv2.imread("./images/00437_01_19.jpeg")

blue1_img = cv2.imread("./images/00439_01_08.jpeg")
blue2_img = cv2.imread("./images/00439_01_11.jpeg")
blue3_img = cv2.imread("./images/00439_01_19.jpeg")

red1 = vtr.vectorize(red1_img)
red2 = vtr.vectorize(red2_img)
red3 = vtr.vectorize(red3_img)

blue1 = vtr.vectorize(blue1_img)
blue2 = vtr.vectorize(blue2_img)
blue3 = vtr.vectorize(blue3_img)

dist0 = imgsim.distance(red1, red2)
print("red1 red2 =", round(dist0, 2))
dist1 = imgsim.distance(red1, red3)
print("red1 red3 =", round(dist1, 2))
dist2 = imgsim.distance(red2, red3)
print("red2 red3 =", round(dist2, 2))

dist3 = imgsim.distance(blue1, blue2)
print("blue1 blue2 =", round(dist3, 2))
dist4 = imgsim.distance(blue1, blue3)
print("blue1 blue3 =", round(dist4, 2))
dist5 = imgsim.distance(blue2, blue3)
print("blue2 blue3 =", round(dist5, 2))

dist6 = imgsim.distance(red1, blue1)
print("red1 blue1 =", round(dist6, 2))
dist7 = imgsim.distance(red1, blue2)
print("red1 blue2 =", round(dist7, 2))
dist8 = imgsim.distance(red1, blue3)
print("red1 blue3 =", round(dist8, 2))

dist9 = imgsim.distance(red2, blue1)
print("red2 blue1 =", round(dist9, 2))
dist10 = imgsim.distance(red2, blue2)
print("red2 blue2 =", round(dist10, 2))
dist11 = imgsim.distance(red2, blue3)
print("red2 blue3 =", round(dist11, 2))

dist12 = imgsim.distance(red3, blue1)
print("red3 blue1 =", round(dist12, 2))
dist13 = imgsim.distance(red3, blue2)
print("red3 blue2 =", round(dist13, 2))
dist14 = imgsim.distance(red3, blue3)
print("red3 blue3 =", round(dist14, 2))

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0