画像からプロンプトを考えて最も似ている画像を生成した人が勝ちのゲーム（類似度の改善）

# はじめに
[画像からプロンプトを考えて最も似ている画像を生成した人が勝ちのゲーム](https://speakerdeck.com/satoshirobatofujimoto/hua-xiang-sheng-cheng-aiwoshi-tutesheng-fu-siyou)では、SSIMを使用しており、似ていない画像でも優勝してしまうことがありました。下記は、おそらく一致する輝度が多かった例。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/2aa48118-1f81-7629-50f7-9e6f2bed3582.png)

他の手法を用いて改善していきます。

# 開発環境
- Windows 11 PC
- Python 3.11

# LPIPS

LPIPSは、AlexNetやVGGなどの学習済み画像分類ネットワークの畳み込み層が出力する特徴量を基に類似度を算出する手法です

https://prog-you.com/ssim-psnr/

こちらを参考に実装します

https://mugichoko445.com/entry/2020/10/06/031850

1．ライブラリをインストール

$ pip install lpips==0.1.3

https://github.com/richzhang/PerceptualSimilarity

2．プログラムを作成

~~~.py
import lpips
import torch
import torchvision.transforms.functional as TF
from PIL import Image

loss_fn_alex = lpips.LPIPS(net='alex') # best forward scores
#loss_fn_vgg = lpips.LPIPS(net='vgg') # closer to "traditional" perceptual loss, when used for optimization

path_img0 = "groundtruth.png"
path_img1 = "1.png"

# Variables im0, im1 is a PyTorch Tensor/Variable with shape Nx3xHxW
# (N patches of size HxW, RGB images scaled in [-1,+1])
img0 = Image.open(path_img0)
img0 = img0.convert("RGB")
img0 = (TF.to_tensor(img0) - 0.5) * 2
img0.unsqueeze(0)

img1 = Image.open(path_img1)
img1 = img1.convert("RGB")
img1 = (TF.to_tensor(img1) - 0.5) * 2
img1.unsqueeze(0)

# Higher means further/more different. Lower means more similar.
d = loss_fn_alex(img0, img1)
print("Perceptual loss",1-d.item()) # 1に近づくほど似ているように変更
~~~

※RGBAの画像があったため、convert("RGB")で変換しています

# 実行

## [エンジニアの輪＠福岡](https://qiita.com/SatoshiGachiFujimoto/items/b543a8480aa1da9cb0c4)

|お題|1|2|3|4|5|
|:--|:--|:--|:--|:--|:--|
|![groundtruth.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/325c7074-f11a-3c85-2816-0a9a27f67e59.png)|![浮島にお城が立っている_ドラゴンが飛び交.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/a89ef98a-9982-5ceb-d0d8-f21b5cdd8eeb.png)|![7つの小さな島が宙に浮いている_島には尖.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/56e9571c-1663-da5c-60a7-6e499dca6f00.png)|![雲の上の空が舞台_複数の島が空に浮いてい.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/557cc113-ee6a-cf30-23df-021fa3faa15f.png)|![空に浮かんだ島に_城が立っていて_ドラゴ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/7e8d7f28-46fc-37be-5085-18362f29aec7.png)|![夕陽が見える空中都市に複数のドラゴンが飛.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/17f3f8e2-1585-0a28-f838-f26f200f3160.png)|
|SSIM|0.153|0.367|0.360|<font color="Red">0.391</font>|0.305|
|LPIPS|0.228|0.200|0.221|0.179|0.185|
||**6**|**7**|**8**|**9**|**10**|
||![空に島が浮かんでいて_島にはお城が浮かん.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/ba75bd82-ad66-bd7e-8e9c-06162c1cc572.png)|![ファンタジーの国である_翼の生えたドラゴ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/e60423db-2174-b4db-245b-3dda2da99725.png)|![雲海の上にお城が建築されている島がたくさ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/290096ca-4315-eb96-f56c-4f06c16f4660.png)|![7つの島_ドラゴンが大量に飛んでいる_虹.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/5c47c37f-449e-7fff-3e18-0f4f88b1034a.png)|![雲の上に浮かぶ王国の風景です_６つの島が.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/623ffa79-096e-27c7-6efa-f8944b0acbec.png)|
|SSIM|0.364|0.268|0.297|0.322|0.295|
|LPIPS|0.160|0.232|<font color="Red">0.235</font>|0.174|0.222|

## [AIミーティング](https://speakerdeck.com/satoshirobatofujimoto/hua-xiang-karapuronputowokao-etezui-mosi-teiruhua-xiang-wosheng-cheng-sitaren-gasheng-tinogemu-at-aimiteingu)

|お題|1|2|3|4|5|
|:--|:--|:--|:--|:--|:--|
|![groundtruth.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/cc2e6bb3-934d-66e3-bf3c-ce3600d29b96.png)|![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/9af37b3c-6955-b93f-0756-a098f0022a8b.png)|![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/9a61c7b5-a445-607a-6ac8-e0f3459bc4d5.png)|![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/3d4ae32c-4e9e-09e1-2ed7-6f37cfd24b54.png)|![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/0e03a661-1f52-3102-b155-38f3e5a0f7d7.png)|![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/07e2d655-a1b4-180f-23a2-b11a21a58521.png)|
|SSIM|0.165|0.175|0.121|0.111|0.164|
|LPIPS|0.182|0.189|0.227|0.222|0.190|
||**6**|**7**|**8**|**9**|**10**|
||![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/7a50d4aa-b0e6-42d1-0a1c-57e9fe2b07dc.png)|![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/aedea2e5-4a7b-d4d0-442e-099b96d32d60.png)|![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/f09a2c84-c2ca-5d09-7f9b-c795e2fe8b04.png)|![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/3ac0f7ef-8357-d40c-1221-fa6e7f5bcf7f.png)|![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/629d2b77-58a1-d7f3-ec99-d314cb26fb49.png)|
|SSIM|0.192|0.156|<font color="Red">0.265</font>|0.162|0.171|
|LPIPS|0.187|0.204|0.096|<font color="Red">0.251</font>|0.235|


個人的には7番の画像が一番近いと思ったのですが、、いかがでしょうか？

|お題|7|
|:--|:--|
|![groundtruth.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/cc2e6bb3-934d-66e3-bf3c-ce3600d29b96.png)|![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/aedea2e5-4a7b-d4d0-442e-099b96d32d60.png)|

特徴点のマッチングやセグメンテーションされた領域同士の比較、配置の近さなどを考慮してみたいです。

お疲れ様でした。