Estoy tratando de implementar un algoritmo donde, dada una imagen con varios objetos en una tabla plana, se desea la salida de máscaras de segmentación para cada objeto. A diferencia de las CNN, el objetivo aquí es detectar objetos en un entorno desconocido. ¿Cuáles son los mejores enfoques para este problema? Además, ¿hay ejemplos de implementación disponibles en línea?
Editar: lo siento, la pregunta puede haber sido un poco engañosa. Lo que quise decir con "entorno desconocido" es que los objetos pueden ser desconocidos para el algoritmo. El algoritmo no debería necesitar comprender qué es el objeto, sino que solo debe detectarlo. ¿Cómo debería abordar este problema?
Respuestas:
Answear rápido
Mean Shift LSH, que es una actualización enO ( n ) del famoso algoritmo Mean Shift en bien conocido por su capacidad de segmentación de imagenO ( n2)
Algunas explicaciones
En el lado opuesto tenemos el Desplazamiento medio que puede encontrar automáticamente el número de clúster, que es útil cuando no sabes lo que estás buscando, con formas aleatorias .
Un consejo para la agrupación de segmentación de imágenes
Transforme su espacio de color de RGB a LUV, que es mejor para la distancia euclidiana.
Mean Shift LSH es más lento pero se adapta mejor a tus necesidades. Sigue siendo lineal y también es escalable con la implementación mencionada.
PD: Mi foto de perfil es una aplicación de Mean Shift LSH en mí mismo si puede ayudar a descubrir cómo funciona.
fuente
Es posible que deba echar un vistazo a este trabajo presentado y aceptado para CVPR 2018: Aprendiendo a segmentar cada cosa
En este trabajo, intentan segmentar todo, incluso los objetos que la red no conoce. Se ha utilizado la máscara R-CNN, combinada con una subred de transferencia de aprendizaje, obtienen muy buenos resultados al segmentar casi todo.
fuente
El estado del arte (SOTA) para la segmentación de imágenes sería el Mask-RCNN de Facebook .
Si bien generalmente está entrenado en un conjunto de datos como COCO o Pascal que presentan objetos de la vida real, puede volver a entrenarlo en un conjunto de datos de su elección, real o no.
Facebook proporciona una implementación ( Detectron ) bajo la licencia Apache2. ¡Darle una oportunidad!
fuente
En realidad, su tarea es supervisada.
Segnet
Puede ser una buena arquitectura para su propósito a cuál de sus implementaciones se puede acceder aquí . SegNet aprende a predecir las etiquetas de clase en píxeles a partir del aprendizaje supervisado. Por lo tanto, requerimos un conjunto de datos de imágenes de entrada con las correspondientes etiquetas de verdad del terreno. Etiqueta las imágenes deben ser de un solo canal, con cada píxel etiquetado con su clase ... .Además, eche un vistazo a las redes totalmente convolucionales que son adecuadas para su tarea.
Según las ediciones de la pregunta, agrego información adicional. Existen numerosos métodos que se pueden aplicar para esta tarea. Básicamente, la más fácil es usar una etiqueta de fondo y clasificar aquellas clases que no conoces como fondo empleando las arquitecturas mencionadas. Al hacerlo, tendrá etiquetas que pueden superponerse para la clase de fondo, lo cual es una desventaja probable de este enfoque, pero su ventaja es que en los casos en que sus etiquetas entrenadas se usan con frecuencia en las entradas, puede tener una versión relativamente ligera de la arquitectura que reconoce las clases desconocidas
fuente
Esto podría ser algo que estás buscando. Como solicita segmentación de imagen y no
semantic / instance
segmentación, supongo que no requiere el etiquetado para cada segmento de la imagen.Se llama al método
scene-cut
que segmenta una imagen en regiones agnósticas de clase de manera no supervisada. Esto funciona muy bien en caso de ambiente interior desordenado.Enlace de papel: arxiv
Código: código
fuente