Segmentação de imagem não supervisionada


10

Estou tentando implementar um algoritmo em que, dada uma imagem com vários objetos em uma tabela plana, é desejada a saída de máscaras de segmentação para cada objeto. Ao contrário das CNN, o objetivo aqui é detectar objetos em um ambiente desconhecido. Quais são as melhores abordagens para esse problema? Além disso, existem exemplos de implementação disponíveis online?

Edit: me desculpe, a pergunta pode ter sido um pouco enganosa. O que eu quis dizer com "ambiente desconhecido" é que os objetos podem ser desconhecidos para o algoritmo. O algoritmo não precisa entender o que é o objeto, mas deve apenas detectá-lo. Como devo abordar esse problema?


"ao contrário das CNNs" não faz sentido; CNNs são um tipo de modelo, não um tipo de tarefa com um objetivo. Segmentação de imagens sem supervisão pode ser feito usando CNNs também
Nathan

Respostas:


4

Resposta rápida

Mean Shift LSH, que é uma atualização em do famoso algoritmo Mean Shift em bem conhecido por sua capacidade de segmentação de imagensO(n)O(n2)

Algumas explicações

Se você deseja uma verdadeira abordagem não supervisionada para segmentar imagens, use algoritmos de agrupamento . O fato é que existem muitos algoritmos com diferentes complexidade e especificidade de tempo . Pegue o mais famoso, o Mean, que está em tão rápido, mas você precisa especificar quantos clusters você deseja, que não é o que você pretende, explorando uma imagem desconhecida sem qualquer informação sobre quantas formas são presentes nele. Além disso, mesmo que você suponha que sabe quantas formas estão presentes, podemos supor que existem formas aleatórias, que é outro ponto em que os meios falham porque é projetado para encontrar aglomerados elípticos e NÃOO ( n ) KKO(n)K formas aleatórias.

Pelo contrário, temos a Mudança Média que é capaz de encontrar automaticamente o número de clusters - o que é útil quando você não sabe o que está procurando - com formas aleatórias .

É claro que você substitui o parâmetro de Meios por outros parâmetros Mean Shift, que podem ser difíceis de ajustar, mas não existe uma ferramenta que permita fazer mágica se você não estiver se exercitando.KKK

Um conselho para o cluster de segmentação de imagens

Transforme seu espaço de cores de RGB em LUV, o que é melhor para a distância euclidiana.

KComplexidade do tempo Mean vs Mean Shift LSH

  • Desvio médio:O(α.n)
  • K-significa:O(β.n)
  • α>β

O Shift médio LSH é mais lento, mas se adapta melhor às suas necessidades. Ele permanece linear e também é escalável com a implementação mencionada.

PS: Minha foto de perfil é uma aplicação do LSH Mean Shift em mim, se ela puder ajudar a descobrir como funciona.


3

Você pode precisar dar uma olhada neste trabalho enviado e aceito no CVPR 2018: Aprendendo a Segmentar Tudo

Neste trabalho, eles tentam segmentar tudo, até objetos não conhecidos da rede. O Mask R-CNN foi usado, combinado com uma sub-rede de aprendizado de transferência, eles obtêm resultados muito bons ao segmentar quase tudo.


2

O estado da arte (SOTA) para segmentação de imagens seria o Mask-RCNN do Facebook .

Embora seja geralmente treinado em conjuntos de dados como COCO ou Pascal, que apresentam objetos da vida real, você pode treiná-lo novamente em um conjunto de dados de sua escolha, real ou não.

O Facebook fornece uma implementação ( Detectron ) sob a licença Apache2. De uma chance!


Na verdade, acho que fiz a pergunta de uma maneira enganosa, meu mal. Acabei de publicar uma edição, você pode vê-la novamente?
precisa saber é o seguinte

2

Na verdade, sua tarefa é supervisionada. Segnetpode ser uma boa arquitetura para o seu propósito, que uma de suas implementações pode ser acessada aqui . A SegNet aprende a prever etiquetas de classe com base em pixels a partir do aprendizado supervisionado. Portanto, exigimos um conjunto de dados de imagens de entrada com rótulos de verdade do solo correspondentes. Imagens de etiquetas deve ser um único canal, com cada pixel rotulado com sua classe ... .

Além disso, dê uma olhada nas redes totalmente convolucionais, adequadas para sua tarefa.


Com base nas edições da pergunta, adiciono informações extras. Existem vários métodos que podem ser aplicados para esta tarefa. Basicamente, o mais fácil é usar um rótulo de plano de fundo e classificar as classes que você não conhece como plano de fundo, empregando as arquiteturas mencionadas. Ao fazer isso, você terá rótulos que podem se sobrepor à classe de plano de fundo, o que é uma provável desvantagem dessa abordagem, mas sua vantagem é que, nos casos em que seus rótulos treinados são freqüentemente usados ​​nas entradas, você pode ter uma versão relativamente leve da arquitetura que reconhece as classes desconhecidas.


Na verdade, acho que fiz a pergunta de uma maneira enganosa, meu mal. Acabei de publicar uma edição, você pode vê-la novamente?
precisa saber é o seguinte

@MuhsinFatih editada.
Meios

Certamente seria mais fácil e obteria melhor desempenho se essa fosse uma tarefa supervisionada, mas também é possível a segmentação de imagens não supervisionadas.
Nathan

@ Nathan, eu sugeri minha própria opinião na época. Definitivamente, é possível.
Mídia

1

Isso pode ser algo que você está procurando. Como você solicita segmentação de imagem e não semantic / instancesegmentação, presumo que você não exija a identificação de cada segmento na imagem.

É chamado o método scene-cutque segmenta uma imagem em regiões agnósticas de classe de maneira não supervisionada. Isso funciona muito bem no caso de ambientes internos desorganizados.

Artigo : arxiv

Código: código

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.