0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ロスをSSIMした時の畳み込みオートエンコーダの出力

Last updated at Posted at 2023-01-16

SSIM について

ここで、MVtecの論文を見るとSSIMオートエンコーダとある。
よく理解していなかったが、mseよりもいい感じにロスが出せるものらしい、通常であれば、同じ位置(同画素位置)で計算されるが、データによってばらつきがある場合、
[0000010000011]
[0000001000011]
こんな感じの時、ずれがあることが分かる。もしこれのどちらも正常だとするならば、mse等の同じ位置等で評価するものだとずれていてうまくいかない。って認識だと思われる。

SSIMでは、平均画素値、標準偏差、共分散とかから求めるので微細なずれがあっても正しく判別できるらしい

?マハラノビス距離に似ている気がする。

というのを以下のサイトで見つけた。
https://qiita.com/kotai2003/items/2d6ab5771fdc57c05507

実行してみる

def custom_loss(y_true, y_pred):
    loss= 1-tf.reduce_mean(tf.image.ssim(y_true, y_pred, 
                                          max_val = 1.0,filter_size=11,
                                        filter_sigma=1.5, k1=0.01, k2=0.03 ))
    
    return loss

として、

model.compile(optimizer='adam', loss=custom_loss)

とする。

やりがちなミス?

自分が陥ったミスとして、いつものMSEとかbinarycrossentropyのノリで
loss="custom_loss"
としてしまった。

その結果、
unknown loss function カスタムオブジェクトを指定してくれというエラーが出た。
検証時に使用する記事が多く、学習時にエラーが出たという記事が見られなかったためにこのような問題が発生した。

自作関数(def)とかしたやつはそのまま、loss=custom_lossとする。

読み込む系のは"mse"みたいにする。

実行結果

今回は畳み込みオートエンコーダを構築し自前の画像データで検証を行った。
ついでにMSEとの比較も行う

条件
学習枚数700枚
テスト枚数100枚
画像サイズ320*256
エポック600
早期終了20回
ロス SSIM mse
学習率0.01

mse

ロスが
image.png


image.png

SSIM

ロスが
image.png

image.png

見た感じ復元は滑らか

具体的な数値?画素数とかカウントすれば差が出てくるかもしれないので試してみる。

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?