画像検索の精度確認(1)

Date:

Share post:

先の投稿では画像検索に関する基本的な動作確認を行いましたが、その中で以下のような感触を得ました。

  • 同じ被写体を撮影したものであれば、ある程度位置をずらして撮影したものでも類似度が高いと判断される
  • 同じ被写体を撮影したものでも、構図(被写体の向きや撮影時のアングル)が違うと類似度が低く判断されがち
  • 違う被写体を撮影したものでも、色合いや構図が似ていると類似度が高いと判断されてしまう
  • 同一の被写体と判断して良さそうな距離の境界は、コサイン距離の場合、0.2前後になりそう

今回はもう少し際どい(判断が難しいと思われる)画像での類似度判定を確認してみたいと思います。

実験データ

被写体としては卓上カレンダーを使用します。
期待するのは1月の面と2月の面を見分けることです。
各面に関しては3タイプの撮影方法で、それぞれ3枚の画像を作成しました。

1月 / グループ1(1-1)

1.jpg2.jpg3.jpg

1月の面を撮影したもので、カレンダーの横幅が画像一杯になるように心掛けて撮影したものです。

1月 / グループ2(1-2)

4.jpg5.jpg6.jpg

1月の面に対して、グループ1よりも少し引いて、カレンダーの横に隙間ができるような距離で撮影したものです。

1月 / グループ3(1-3)

7.jpg8.jpg9.jpg

1月の面に対して、グループ1よりも接写気味に撮影したもので、カレンダー以外の写り込みがより少なくなっています。

2月 / グループ1(2-1)

10.jpg11.jpg12.jpg

2月の面に対して「1月 / グループ1」と同等の撮影をしたものです。

2月 / グループ2(2-2)

13.jpg14.jpg15.jpg

2月の面に対して「1月 / グループ2」と同等の撮影をしたものです。

2月 / グループ3(2-3)

16.jpg17.jpg18.jpg

2月の面に対して「1月 / グループ3」と同等の撮影をしたものです。

実験結果

1月の面を写した各画像に対して、他の画像との距離を計測した結果を以下に列記します。
エンベディングの処理は前回と同じものを使用し、距離としてもコサイン距離を採用しています。

なお、比較対象が同一グループに属するケースを赤字、別グループでも同じ月の面を写したものであればオレンジで記述してあります。

1.jpg

1.JPG0.01-1
2.JPG0.027849253040691081-1
3.JPG0.029953258640343261-1
12.JPG0.035529941658559052-1
10.JPG0.0363750369466715462-1
11.JPG0.0402104603224565652-1
4.JPG0.070316369018889821-2
5.JPG0.082229844299675951-2
6.JPG0.089073039470462521-2
15.JPG0.094526191563244492-2
14.JPG0.095132890223182162-2
17.JPG0.099455970777682872-3
18.JPG0.099652227814146072-3
13.JPG0.100441972946711762-2
16.JPG0.12895765798244642-3
9.JPG0.153301515841496541-3
7.JPG0.214907313252823421-3
8.JPG0.27970694491492021-3

同一グループの画像は他の画像よりも距離が近いと判断されました。
一方で、同じ1月の面を写した他のグループ(1-2,1-3)よりも、2月の面を写したものでありながら構図の類似性が高いグループ2-1の方が距離が近いと判断されてしまっています。

グループ1-1に対して1-2や2-2の方が1-3や2-3よりも距離が近いと判断されていますが、これは1-1の構図と比較した場合の被写体とカメラ間の距離の変化が1-3,2-3の方が大きくなっていて、結果として絵的な変化の度合いも大きくなっているためと考えられます。

2.jpg

2.JPG0.01-1
1.JPG0.027849253040691081-1
3.JPG0.031076562341952551-1
10.JPG0.032088618946206852-1
11.JPG0.033220646795883772-1
12.JPG0.038921195177642032-1
4.JPG0.061636403487273621-2
6.JPG0.065264477223330061-2
15.JPG0.072576109804931682-2
13.JPG0.075884664127876642-2
14.JPG0.076766500019199162-2
17.JPG0.084615750981100862-3
5.JPG0.08530987602513941-2
18.JPG0.096029272081636362-3
16.JPG0.117669976458141152-3
9.JPG0.13677329096163771-3
7.JPG0.200857366305230661-3
8.JPG0.26628582561785011-3

傾向的には「1.jpg」のケースと同等です。

3.jpg

3.JPG0.01-1
1.JPG0.029953258640343261-1
2.JPG0.031076562341952551-1
10.JPG0.044327981394144072-1
12.JPG0.048367830704187712-1
11.JPG0.050645192264626942-1
6.JPG0.068157835309304421-2
4.JPG0.083967996100969831-2
18.JPG0.08528993806236142-3
17.JPG0.086336988931840392-3
5.JPG0.089057476349262641-2
14.JPG0.105178522589226772-2
13.JPG0.106092014138798652-2
16.JPG0.108211516971234882-3
9.JPG0.115236901526291621-3
15.JPG0.119994168010994942-2
7.JPG0.15367193508480871-3
8.JPG0.218916664940205451-3

傾向的には「1.jpg」のケースと同等です。

4.jpg

4.JPG0.01-2
5.JPG0.0339241408436352641-2
6.JPG0.0506944415061212351-2
11.JPG0.059914947379646092-1
2.JPG0.061636403487273621-1
14.JPG0.0621819521162750852-2
10.JPG0.063979177967471322-1
13.JPG0.064200161324371232-2
12.JPG0.064643036878889842-1
1.JPG0.070316369018889821-1
15.JPG0.072293938541962872-2
3.JPG0.083967996100969831-1
18.JPG0.150849312909926652-3
17.JPG0.151605547601530332-3
16.JPG0.169870206315024032-3
9.JPG0.184159132607404241-3
7.JPG0.232443201713731231-3
8.JPG0.28015903295669511-3

傾向的には「1.jpg」のケースと同等です。
構図の類似度(1-2に対する2-2)の優位性がグループ1-1のケースほど顕著ではありませんが、大きな違いとは言えないかと。

5.jpg

5.JPG0.01-2
4.JPG0.0339241408436352641-2
6.JPG0.045314111864634081-2
12.JPG0.069247469021710642-1
14.JPG0.072582721841994882-2
10.JPG0.072955654583776292-1
11.JPG0.078604810544237072-1
13.JPG0.081676460393814932-2
1.JPG0.082229844299675951-1
2.JPG0.08530987602513941-1
3.JPG0.089057476349262641-1
15.JPG0.091407818873033512-2
18.JPG0.15407479672468772-3
17.JPG0.160421959236532692-3
9.JPG0.17806877591087591-3
16.JPG0.181421381082771842-3
7.JPG0.206516111823178421-3
8.JPG0.241231725555921431-3

傾向的には「4.jpg」のケースと同等です。

6.jpg

6.JPG0.01-2
5.JPG0.045314111864634081-2
4.JPG0.0506944415061212351-2
2.JPG0.065264477223330061-1
11.JPG0.065448300893443672-1
10.JPG0.066015238085505362-1
14.JPG0.06614095732373872-2
12.JPG0.067594582564220682-1
3.JPG0.068157835309304421-1
13.JPG0.069591016709466662-2
1.JPG0.089073039470462521-1
15.JPG0.099959543466178642-2
18.JPG0.13510406353836492-3
17.JPG0.13715826272194932-3
9.JPG0.148808215863352241-3
16.JPG0.151108716270139222-3
7.JPG0.181743305719014761-3
8.JPG0.220794489398548181-3

傾向的には「4.jpg」のケースと同等です。

7.jpg

7.JPG0.01-3
8.JPG0.034667496673349561-3
9.JPG0.0583544474127790651-3
3.JPG0.15367193508480871-1
18.JPG0.172337663432550082-3
16.JPG0.173313203785847582-3
17.JPG0.17909798822112612-3
6.JPG0.181743305719014761-2
2.JPG0.200857366305230661-1
5.JPG0.206516111823178421-2
1.JPG0.214907313252823421-1
10.JPG0.229673598446531572-1
12.JPG0.232198913273599322-1
4.JPG0.232443201713731231-2
11.JPG0.25047684470129742-1
13.JPG0.29256127768775242-2
14.JPG0.29351124436909672-2
15.JPG0.326035051255883952-2

同一グループの画像が他の画像よりも距離が近いと判断されている点は今までのケースと同様ですが、同一グループ以外の画像との比較における距離がより大きくなっています。
これは、接写することでカレンダーに印字されている内容がより大写しになっており、画像の差として認識され易くなったためと推測します。

8.jpg

8.JPG0.01-3
7.JPG0.034667496673349561-3
9.JPG0.099267646674201961-3
3.JPG0.218916664940205451-1
6.JPG0.220794489398548181-2
5.JPG0.241231725555921431-2
18.JPG0.248564101670290082-3
16.JPG0.255071355920086452-3
17.JPG0.259966341431423942-3
2.JPG0.26628582561785011-1
1.JPG0.27970694491492021-1
4.JPG0.28015903295669511-2
12.JPG0.28038804290912422-1
10.JPG0.286319186803116972-1
11.JPG0.31081773498888512-1
13.JPG0.35616275672316122-2
14.JPG0.361103244372097072-2
15.JPG0.39061959494978072-2

傾向的には「7.jpg」のケースと同等です。

9.jpg

9.JPG0.01-3
7.JPG0.0583544474127790651-3
16.JPG0.088863266953973952-3
18.JPG0.093933770870456292-3
17.JPG0.096696516641962662-3
8.JPG0.099267646674201961-3
3.JPG0.115236901526291621-1
2.JPG0.13677329096163771-1
6.JPG0.148808215863352241-2
1.JPG0.153301515841496541-1
10.JPG0.167044886977637862-1
12.JPG0.169913971143153542-1
5.JPG0.17806877591087591-2
11.JPG0.182560484886010842-1
4.JPG0.184159132607404241-2
13.JPG0.224294580053959082-2
14.JPG0.22433300207942922-2
15.JPG0.24534581154701242-2

傾向的には「4.jpg」のケースと同等ですが、同一グループに属する「8.jpg」が、グループ2-3の各画像よりも距離が遠いと判断されています。
「8.jpg」と「9.jpg」を良く見比べてみると、「8.jpg」は若干明るく、「9.jpg」は若干暗く写っていて、一方でグループ2-3の画像は「9.jpg」の画像よりもさらに暗めに写っています。
この明暗の度合いによって、グループ2-3の方が「8.jpg」よりも類似度が高いと判断されたのではないかと推測します。

考察

改めて各比較結果から以下の観点で距離を抽出します。

  • 最も近いと判断された画像との距離
  • 同一グループで最も遠いと判断された画像との距離
  • 異なる面(2月)を写したもので最も近いと判断された画像との距離
  • 同じ面(1月)を写したもので最も遠いと判断された画像との距離

結果は以下の通り。

1.JPG2.JPG
0.02784925304069108
3.JPG
0.02995325864034326
12.JPG
0.03552994165855905
8.JPG
0.2797069449149202
2.JPG1.JPG
0.02784925304069108
3.JPG
0.03107656234195255
10.JPG
0.03208861894620685
8.JPG
0.2662858256178501
3.JPG1.JPG
0.02995325864034326
2.JPG
0.03107656234195255
10.JPG
0.04432798139414407
8.JPG
0.21891666494020545
4.JPG5.JPG
0.033924140843635264
6.JPG
0.050694441506121235
11.JPG
0.05991494737964609
8.JPG
0.2801590329566951
5.JPG4.JPG
0.033924140843635264
6.JPG
0.04531411186463408
12.JPG
0.06924746902171064
8.JPG
0.24123172555592143
6.JPG5.JPG
0.04531411186463408
4.JPG
0.050694441506121235
11.JPG
0.06544830089344367
8.JPG
0.22079448939854818
7.JPG8.JPG
0.03466749667334956
9.JPG
0.058354447412779065
18.JPG
0.17233766343255008
4.JPG
0.23244320171373123
8.JPG7.JPG
0.03466749667334956
9.JPG
0.09926764667420196
18.JPG
0.24856410167029008
4.JPG
0.2801590329566951
9.JPG7.JPG
0.058354447412779065
8.JPG
0.09926764667420196
16.JPG
0.08886326695397395
4.JPG
0.18415913260740424

上記から以下のようなことが言えるかと思います。

  • 最も近いと判断された場合でも0.02以上の距離がある
  • 異なる被写体でも見た目の類似性が高いもの(カレンダーの1月と2月)であれば、被写体自体の差よりも構図等の差の方が距離への影響度が大きい
  • 同一の被写体で、構図等も合わせたつもりでも、若干の撮影状況の違いにより0.1程度の距離と判断されてしまう場合がある
  • 同一被写体でも、少し構図が変わることで0.2以上の距離と判断されてしまう場合がある
  • 異なる被写体でも構図や撮影状況の類似度が高ければ0.1未満の距離と判断されてしまう
  • 見た目の類似度が高い被写体でも、その差が十分視認できる程度の解像度であれば距離に反映され易いと思われる

まとめ

結果を大雑把にまとめれば、「現在の方式では今回対象としたレベルの類似性を持つ被写体を識別するには不十分な精度」と言うことになります。
類似度が高いと言っても、人間の目では簡単に識別できるレベルなのですが。

エンベディングに際して被写体の特徴がどの程度ベクトルに反映されるかが重要ですが、グループ1-3との比較の際にも触れたように、画像上のその特徴が十分確認できる状況になければ、その可能性は当然ながら低くなります。
改めて考えてみると、エンベディングの際に画像サイズを224×224に変換しており、今回使用した画像の細かさでは同変換時に小さな文字が潰れてしまい、特徴として反映され難くなってしまっているのかもしれません。
エンベディングに際して対象画像のサイズを大きくできるらしいとの未確認情報もあるのですが、それができたとしても処理速度の劣化に繋がる可能性は高くなりそうで、実際に判別精度が向上するかどうかも含めて実験が必要になります。

先の投稿でも触れたように、深層学習モデルや距離の算出方法を変えることで判別精度が向上することも期待できなくはないので、今後色々な可能性を探っていきたいと思います。

Related articles

画像検索の精度確認(2)

先の投稿で、類似度の高い画像の識別に...

画像検索

昨今の投稿で触れてきたエンベディング...

画像データのエンベディング

昨今、ベクトル検索に絡む投稿を続けて...

PostgreSQLでベクトル検索

先にPostgreSQL関連の記事を...