La detección de bordes anidada holísticamente (HED) es un modelo de aprendizaje profundo que utiliza redes neuronales totalmente convolucionales y redes supervisadas en profundidad para realizar predicciones de imagen a imagen. HED desarrolla automáticamente ricas representaciones jerárquicas (dirigidas por una supervisión profunda en las respuestas laterales) que son fundamentales para resolver la ambigüedad en la detección de bordes y límites de objetos.
Arquitectura modelo
El modelo es VGGNet con pocas modificaciones-
- La capa de salida lateral está conectada a la última capa convolucional de cada etapa, respectivamente conv1_2, conv2_2, conv3_3, conv4_3, conv5_3. El tamaño del campo receptivo de cada una de estas capas convolucionales es idéntico al de la capa de salida lateral correspondiente.
- Se elimina la última etapa de VGGNet, incluida la quinta capa de agrupación y todas las capas completamente conectadas.
La arquitectura final de la red HED tiene 5 etapas, con pasos 1, 2, 4, 8 y 16, respectivamente, y con diferentes tamaños de campo receptivo, todos anidados en VGGNet.
¿Por qué HED?
El detector de bordes anidado holísticamente (HED) propuesto aborda dos problemas críticos:
- Entrenamiento y predicción holísticos de imágenes, inspirados en redes neuronales totalmente convolucionales para la clasificación de imagen a imagen (el sistema toma una imagen como entrada y produce directamente la imagen del mapa de bordes como salida)
- Aprendizaje de características multiescala anidado, inspirado en redes de supervisión profunda que realiza una supervisión de capa profunda para «guiar» los primeros resultados de clasificación.
Pasos a implementar
- Importe todas las bibliotecas necesarias.
- Lee la imagen.
img = cv2.imread(“ruta”)
- Crear la gota
blob = cv2.dnn.blobFromImage(img, scalefactor=1.0, size=(W, H),swapRB=False, crop=False)
- Cargue el modelo Caffe preentrenado
- Este marco se basa en las implementaciones disponibles públicamente de FCN y DSN y se implementa utilizando la biblioteca Caffe disponible públicamente. A partir de una inicialización con el modelo de red VGG-16 preentrenado, se ajusta toda la red en nuestro sistema HED.
- Este modelo de Caffe está codificado en dos archivos
- Un archivo prototxt : un archivo Caffe JSON de texto que incluye la definición del modelo (implementación) (es decir, capas, entrada esperada, …..)
- El modelo Caffe pre-entrenado : Pesos de redes neuronales.
net = cv2.dnn.readNetFromCaffe(“ruta al archivo prototxt”, “ruta al archivo de pesos del modelo”)
- Pase la mancha de la imagen al modelo y encuentre la salida.
net.setInput(blob)
hed = net.adelante()
- Formatee los datos en el formato correcto para mostrar (si es necesario)
hed = cv2.resize(hed[0, 0], (An, Al))
hed = (255 * hed).astype(“uint8”)
- Mostrar la salida
cv2.imshow(“HED”, hed)
Ejemplo 1
Aporte :
Python3
import cv2 img = cv2.imread("input.webp") (H, W) = img.shape[:2] blob = cv2.dnn.blobFromImage(img, scalefactor=1.0, size=(W, H), swapRB=False, crop=False) net = cv2.dnn.readNetFromCaffe("deploy.prototxt", "hed_pretrained_bsds.caffemodel") net.setInput(blob) hed = net.forward() hed = cv2.resize(hed[0, 0], (W, H)) hed = (255 * hed).astype("uint8") cv2.imshow("Input", img) cv2.imshow("HED", hed) cv2.waitKey(0)
Producción:
Ejemplo 2.
Aporte
Python3
import cv2 img = cv2.imread("pexels-ylanite-koppens-2343170(1).jpg") (H, W) = img.shape[:2] blob = cv2.dnn.blobFromImage(img, scalefactor=1.0, size=(W, H), swapRB=False, crop=False) net = cv2.dnn.readNetFromCaffe("deploy.prototxt", "hed_pretrained_bsds.caffemodel") net.setInput(blob) hed = net.forward() hed = cv2.resize(hed[0, 0], (W, H)) hed = (255 * hed).astype("uint8") cv2.imshow("Input", img) cv2.imshow("HED", hed) cv2.waitKey(0)
Producción
Publicación traducida automáticamente
Artículo escrito por bhavyajain4641 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA