Unsupervised Anomaly Detection in Images
$begingroup$
I would like to detect defects/anomalies in images. Due to the lack of images with anomalies, I try to solve the problem in an unsupervised manner. Until now, I trained a variational autoencoder together with an generative adversarial network with “good” images. Now, I have an encoder/decoder network which is able to produce images without anomalies. Here are two examples:
original image | cropped image & input of the encoder | output of the decoder
In those images, if the object is rotated (not vertical), then it is an anomaly (like the second image). To measure the difference between the input/output of the encoder/decoder network, I tried the structural similarity metric SSIM. However, the result is not satisfying enough as many images without an anomaly also have a low similarity value. Also the pixel-wise MAE or MSE metrics are not good as they do not look specifically on the structure and are very sensitive to the brightness. Here is the result with the SSIM metric (green are the good examples, red are the anomalies):
What I want to avoid is to add specific rules for the detection, in this example to detect vertical lines because there are many other objects with different anomalies which I would like to detect.
Do you have a suggestion for another image similarity metric? Am I on the right path or are there other/better methods to do unsupervised anomaly detection?
PS: There are only a few images with anomalies (<10 images), but many without an anomaly..
machine-learning neural-network deep-learning similarity anomaly-detection
$endgroup$
add a comment |
$begingroup$
I would like to detect defects/anomalies in images. Due to the lack of images with anomalies, I try to solve the problem in an unsupervised manner. Until now, I trained a variational autoencoder together with an generative adversarial network with “good” images. Now, I have an encoder/decoder network which is able to produce images without anomalies. Here are two examples:
original image | cropped image & input of the encoder | output of the decoder
In those images, if the object is rotated (not vertical), then it is an anomaly (like the second image). To measure the difference between the input/output of the encoder/decoder network, I tried the structural similarity metric SSIM. However, the result is not satisfying enough as many images without an anomaly also have a low similarity value. Also the pixel-wise MAE or MSE metrics are not good as they do not look specifically on the structure and are very sensitive to the brightness. Here is the result with the SSIM metric (green are the good examples, red are the anomalies):
What I want to avoid is to add specific rules for the detection, in this example to detect vertical lines because there are many other objects with different anomalies which I would like to detect.
Do you have a suggestion for another image similarity metric? Am I on the right path or are there other/better methods to do unsupervised anomaly detection?
PS: There are only a few images with anomalies (<10 images), but many without an anomaly..
machine-learning neural-network deep-learning similarity anomaly-detection
$endgroup$
$begingroup$
Do you use pooling?
$endgroup$
– Lau
Nov 24 '18 at 11:02
$begingroup$
I would love to have the dataset you are working on. Thanks :)
$endgroup$
– Ali Fessi
2 days ago
add a comment |
$begingroup$
I would like to detect defects/anomalies in images. Due to the lack of images with anomalies, I try to solve the problem in an unsupervised manner. Until now, I trained a variational autoencoder together with an generative adversarial network with “good” images. Now, I have an encoder/decoder network which is able to produce images without anomalies. Here are two examples:
original image | cropped image & input of the encoder | output of the decoder
In those images, if the object is rotated (not vertical), then it is an anomaly (like the second image). To measure the difference between the input/output of the encoder/decoder network, I tried the structural similarity metric SSIM. However, the result is not satisfying enough as many images without an anomaly also have a low similarity value. Also the pixel-wise MAE or MSE metrics are not good as they do not look specifically on the structure and are very sensitive to the brightness. Here is the result with the SSIM metric (green are the good examples, red are the anomalies):
What I want to avoid is to add specific rules for the detection, in this example to detect vertical lines because there are many other objects with different anomalies which I would like to detect.
Do you have a suggestion for another image similarity metric? Am I on the right path or are there other/better methods to do unsupervised anomaly detection?
PS: There are only a few images with anomalies (<10 images), but many without an anomaly..
machine-learning neural-network deep-learning similarity anomaly-detection
$endgroup$
I would like to detect defects/anomalies in images. Due to the lack of images with anomalies, I try to solve the problem in an unsupervised manner. Until now, I trained a variational autoencoder together with an generative adversarial network with “good” images. Now, I have an encoder/decoder network which is able to produce images without anomalies. Here are two examples:
original image | cropped image & input of the encoder | output of the decoder
In those images, if the object is rotated (not vertical), then it is an anomaly (like the second image). To measure the difference between the input/output of the encoder/decoder network, I tried the structural similarity metric SSIM. However, the result is not satisfying enough as many images without an anomaly also have a low similarity value. Also the pixel-wise MAE or MSE metrics are not good as they do not look specifically on the structure and are very sensitive to the brightness. Here is the result with the SSIM metric (green are the good examples, red are the anomalies):
What I want to avoid is to add specific rules for the detection, in this example to detect vertical lines because there are many other objects with different anomalies which I would like to detect.
Do you have a suggestion for another image similarity metric? Am I on the right path or are there other/better methods to do unsupervised anomaly detection?
PS: There are only a few images with anomalies (<10 images), but many without an anomaly..
machine-learning neural-network deep-learning similarity anomaly-detection
machine-learning neural-network deep-learning similarity anomaly-detection
edited Mar 22 '18 at 22:22
schieGG
asked Mar 21 '18 at 18:17
schieGGschieGG
213
213
$begingroup$
Do you use pooling?
$endgroup$
– Lau
Nov 24 '18 at 11:02
$begingroup$
I would love to have the dataset you are working on. Thanks :)
$endgroup$
– Ali Fessi
2 days ago
add a comment |
$begingroup$
Do you use pooling?
$endgroup$
– Lau
Nov 24 '18 at 11:02
$begingroup$
I would love to have the dataset you are working on. Thanks :)
$endgroup$
– Ali Fessi
2 days ago
$begingroup$
Do you use pooling?
$endgroup$
– Lau
Nov 24 '18 at 11:02
$begingroup$
Do you use pooling?
$endgroup$
– Lau
Nov 24 '18 at 11:02
$begingroup$
I would love to have the dataset you are working on. Thanks :)
$endgroup$
– Ali Fessi
2 days ago
$begingroup$
I would love to have the dataset you are working on. Thanks :)
$endgroup$
– Ali Fessi
2 days ago
add a comment |
2 Answers
2
active
oldest
votes
$begingroup$
One thing you could try, would be to add a second loss term that uses also the latent representation of the VAE. The idea being that anomalies should also be outliers in latent space. That way you would have another channel that provides information about your outliers. There was a paper by Zong et al., DEEP AUTOENCODING GAUSSIAN MIXTURE MODEL FOR UNSUPERVISED ANOMALY DETECTION
from the NEC labs at ICLR 2018 that used this approach. Please see
https://openreview.net/forum?id=BJJLHbb0-
I have no idea how good that would work for your images. In the paper they used very small datasets.
$endgroup$
add a comment |
$begingroup$
There seems to be a clear line between samples with anomalies and those without. Label them and run a classifier? e.g SVM. One shouldn't use more complex models than needed.
Also, be a bit careful with trying to detect all kind of anomalies. It's not always realistic and might lead you away from more straightforward, and perhaps better solutions.
You could also try something as simple as a histogram from one part of the image. Looks like it should be able to find the anomalies.
$endgroup$
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
});
});
}, "mathjax-editing");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "557"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdatascience.stackexchange.com%2fquestions%2f29391%2funsupervised-anomaly-detection-in-images%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
One thing you could try, would be to add a second loss term that uses also the latent representation of the VAE. The idea being that anomalies should also be outliers in latent space. That way you would have another channel that provides information about your outliers. There was a paper by Zong et al., DEEP AUTOENCODING GAUSSIAN MIXTURE MODEL FOR UNSUPERVISED ANOMALY DETECTION
from the NEC labs at ICLR 2018 that used this approach. Please see
https://openreview.net/forum?id=BJJLHbb0-
I have no idea how good that would work for your images. In the paper they used very small datasets.
$endgroup$
add a comment |
$begingroup$
One thing you could try, would be to add a second loss term that uses also the latent representation of the VAE. The idea being that anomalies should also be outliers in latent space. That way you would have another channel that provides information about your outliers. There was a paper by Zong et al., DEEP AUTOENCODING GAUSSIAN MIXTURE MODEL FOR UNSUPERVISED ANOMALY DETECTION
from the NEC labs at ICLR 2018 that used this approach. Please see
https://openreview.net/forum?id=BJJLHbb0-
I have no idea how good that would work for your images. In the paper they used very small datasets.
$endgroup$
add a comment |
$begingroup$
One thing you could try, would be to add a second loss term that uses also the latent representation of the VAE. The idea being that anomalies should also be outliers in latent space. That way you would have another channel that provides information about your outliers. There was a paper by Zong et al., DEEP AUTOENCODING GAUSSIAN MIXTURE MODEL FOR UNSUPERVISED ANOMALY DETECTION
from the NEC labs at ICLR 2018 that used this approach. Please see
https://openreview.net/forum?id=BJJLHbb0-
I have no idea how good that would work for your images. In the paper they used very small datasets.
$endgroup$
One thing you could try, would be to add a second loss term that uses also the latent representation of the VAE. The idea being that anomalies should also be outliers in latent space. That way you would have another channel that provides information about your outliers. There was a paper by Zong et al., DEEP AUTOENCODING GAUSSIAN MIXTURE MODEL FOR UNSUPERVISED ANOMALY DETECTION
from the NEC labs at ICLR 2018 that used this approach. Please see
https://openreview.net/forum?id=BJJLHbb0-
I have no idea how good that would work for your images. In the paper they used very small datasets.
answered Jul 8 '18 at 21:07
jkdsjkds
11
11
add a comment |
add a comment |
$begingroup$
There seems to be a clear line between samples with anomalies and those without. Label them and run a classifier? e.g SVM. One shouldn't use more complex models than needed.
Also, be a bit careful with trying to detect all kind of anomalies. It's not always realistic and might lead you away from more straightforward, and perhaps better solutions.
You could also try something as simple as a histogram from one part of the image. Looks like it should be able to find the anomalies.
$endgroup$
add a comment |
$begingroup$
There seems to be a clear line between samples with anomalies and those without. Label them and run a classifier? e.g SVM. One shouldn't use more complex models than needed.
Also, be a bit careful with trying to detect all kind of anomalies. It's not always realistic and might lead you away from more straightforward, and perhaps better solutions.
You could also try something as simple as a histogram from one part of the image. Looks like it should be able to find the anomalies.
$endgroup$
add a comment |
$begingroup$
There seems to be a clear line between samples with anomalies and those without. Label them and run a classifier? e.g SVM. One shouldn't use more complex models than needed.
Also, be a bit careful with trying to detect all kind of anomalies. It's not always realistic and might lead you away from more straightforward, and perhaps better solutions.
You could also try something as simple as a histogram from one part of the image. Looks like it should be able to find the anomalies.
$endgroup$
There seems to be a clear line between samples with anomalies and those without. Label them and run a classifier? e.g SVM. One shouldn't use more complex models than needed.
Also, be a bit careful with trying to detect all kind of anomalies. It's not always realistic and might lead you away from more straightforward, and perhaps better solutions.
You could also try something as simple as a histogram from one part of the image. Looks like it should be able to find the anomalies.
answered Oct 7 '18 at 9:56
Carl RynegardhCarl Rynegardh
30119
30119
add a comment |
add a comment |
Thanks for contributing an answer to Data Science Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdatascience.stackexchange.com%2fquestions%2f29391%2funsupervised-anomaly-detection-in-images%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
$begingroup$
Do you use pooling?
$endgroup$
– Lau
Nov 24 '18 at 11:02
$begingroup$
I would love to have the dataset you are working on. Thanks :)
$endgroup$
– Ali Fessi
2 days ago