LoginSignup
13

More than 1 year has passed since last update.

深層学習ではじめる画像ベクトル化

Last updated at Posted at 2021-12-06

はじめに

株式会社じげんの伊崎です。
主に全社データ分析基盤の構築を担当しています。

内容について

画像のベクトル化を深層学習で行う方法を説明します。
技術的な説明は最小限にとどめて、とりあえずベクトル化し、使ってみることを目指します。
画像検索や画像を使ったレコメンドに興味のある方に役立つ内容です。
はじめにベクトル化のやり方を書き、その後で使い方の例を書きます。

画像について

本記事で扱う画像は著作権フリーのものを使用しています。
1枚目: Chiemsee2016によるPixabayからの画像
2枚目: Ilona KrijgsmanによるPixabayからの画像
3枚目: PexelsによるPixabayからの画像

ベクトル化の方法

Kerasの事前学習済みライブラリを使う方法を書きます。
実行環境はGoogle Colaboratory(Colab)です。

import numpy as np
import tensorflow as tf

model = tf.keras.applications.EfficientNetB0(include_top=False, pooling="avg")

def image2vec(image_path):
    raw = tf.io.read_file(image_path)
    image = tf.image.decode_jpeg(raw, channels=3)
    image = tf.image.resize(image, [224, 224])
    vec = model.predict(np.array([image.numpy()]))[0]
    return vec

Colabに画像をアップロードし、そのパスに対してimage2vecを実行すると、numpyの1次元配列が返ります。
例えば以下の画像が
cat-g0f125da90_640.jpg
以下のような配列となります。

array([-0.03999095,  1.113671  , -0.13362627, ..., -0.13771635,
       -0.14991407, -0.17145288], dtype=float32)

これがベクトル化です。

画像ベクトルの使い方

画像同士の近さ判定

ベクトル同士の近さを測ることにより、画像の近さを測ることができます。
ベクトルの近さ(コサイン類似度)を測る方法は、以下の記事を参考にさせていただきました。

計算すると、最初にベクトル化した画像と以下の画像の類似度が0.021059312とわかります。
puppy-g2ab92e08c_640.jpg
続いて、最初の画像と以下の画像を比べると、類似度は0.11230692となります。
tiger-g2d648ccdb_640.jpg
猫と犬より、猫とトラのほうが近いという結果になりました。

画像検索

上の例では2枚の画像を比較しました。
大量の画像を用意し、ある1枚の画像とそれぞれの画像との類似度を測ることで、画像を類似度順に並べることができます。
これにより、画像検索が実現できます。
こちらに関しては、以下の記事に詳しく記載されています。

画像によるレコメンド

ある商品を見ているユーザーに対し、上記の手法で類似した商品を提示することでレコメンドが実装できます。
さらに、ユーザー行動をもとにした高度なレコメンドを実装する際にも、しばしば画像のベクトルが使われます。
こちらに関しては、以下の記事に詳しく記載されています。

ごく簡単な解説

ベクトル化の過程をひとことで言うと
「画像分類の仕方を事前に学習したモデルに、特徴量(ベクトル)の取り出しだけさせる」
ということをやっています。

終わりに

駆け足でベクトル化について書きました。
画像ベクトル化の有用さを少しでも感じていただけたら嬉しいです。

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
13