Una pregunta crítica que surge después de identificar los objetos (o etiquetas de clase) en una base de datos de imágenes es: “¿Cómo se correlacionan entre sí los diversos objetos descubiertos en una base de datos de imágenes?” Este artículo intenta responder a esta pregunta proporcionando un marco genérico que puede ayudar a los lectores a descubrir correlaciones ocultas entre objetos en la base de datos de imágenes. (El propósito de este artículo es alentar a los futuros investigadores a publicar artículos de investigación de calidad en las principales conferencias y revistas. La parte de este artículo se extrae de nuestro trabajo publicado en IEEE BIGDATA 2021 [1].) El marco para descubrir la correlación entre los objetos en una base de datos de imágenes se muestra en la Figura 1. Implica los siguientes tres pasos: Extraiga los objetos (o etiquetas de clase) y sus puntajes de probabilidad para cada imagen en el repositorio. Los usuarios pueden extraer objetos utilizando técnicas de detección de objetos/segmentación de instancias/segmentación semántica. Transforme los objetos y sus puntajes de probabilidad en una base de datos de su elección. (Si es necesario, elimine los objetos poco interesantes que tengan puntajes de probabilidad bajos para reducir el ruido). Según la base de datos generada y el conocimiento necesario, aplique la técnica de minería de patrones correspondiente para descubrir correlaciones emocionantes entre los objetos en los datos de imágenes.
importar sistema operativo
importar csv
importar antorcha visión
de las transformaciones de importación de torchvision
antorcha de importación
de antorcha importar no_grad
importar cv2
de imagen de importación PIL
importar numpy como np
sistema de importación
importar matplotlib.pyplot como plt
desde IPython.display importar imagen como Imagedisplay
de PAMI.extras.imageProcessing import imagery2Databases as obclass objectDetection:
def __init__(uno mismo):
self.model_ = torchvision.models.detection.fasterrcnn_resnet50_fpn(preentrenado=Verdadero)
self.model_.eval()
para nombre, parámetro en self.model_.named_parameters():
param.requires_grad = Falsedef modelo(self, x):
con antorcha.no_grad():
self.y_sombrero = self.modelo_(x)
return self.y_hatdef model_train(self, image_path):
# nombres de etiquetas
self.coco_instance_category_names = [
‘__background__’, ‘person’, ‘bicycle’, ‘car’, ‘motorcycle’, ‘airplane’, ‘bus’,
‘train’, ‘truck’, ‘boat’, ‘traffic light’, ‘fire hydrant’, ‘N/A’, ‘stop sign’,
‘parking meter’, ‘bench’, ‘bird’, ‘cat’, ‘dog’, ‘horse’, ‘sheep’, ‘cow’,
‘elephant’, ‘bear’, ‘zebra’, ‘giraffe’, ‘N/A’, ‘backpack’, ‘umbrella’, ‘N/A’, ‘N/A’,
‘handbag’, ‘tie’, ‘suitcase’, ‘frisbee’, ‘skis’, ‘snowboard’, ‘sports ball’,
‘kite’, ‘baseball bat’, ‘baseball glove’, ‘skateboard’, ‘surfboard’, ‘tennis racket’,
‘bottle’, ‘N/A’, ‘wine glass’, ‘cup’, ‘fork’, ‘knife’, ‘spoon’, ‘bowl’,
‘banana’, ‘apple’, ‘sandwich’, ‘orange’, ‘broccoli’, ‘carrot’, ‘hot dog’, ‘pizza’,
‘donut’, ‘cake’, ‘chair’, ‘couch’, ‘potted plant’, ‘bed’, ‘N/A’, ‘dining table’,
‘N/A’, ‘N/A’, ‘toilet’, ‘N/A’, ‘tv’, ‘laptop’, ‘mouse’, ‘remote’, ‘keyboard’, ‘cell phone’,
‘microwave’, ‘oven’, ‘toaster’, ‘sink’, ‘refrigerator’, ‘N/A’, ‘book’,
‘clock’, ‘vase’, ‘scissors’, ‘teddy bear’, ‘hair drier’, ‘toothbrush’
]
self.transform = transforma.Compose([transforms.ToTensor()])
self.image_path = image_path
self.imagen = Imagen.open(self.image_path)
# redimensionar y trazar la imagen
auto.imagen.redimensionar([int(0.5 * s) for s in self.image.size])
del self.image_path
self.image = self.transform(self.image)# predicciones sin ningún umbral
self.predecir = self.modelo([self.image])
self.predicted_classes = [(self.coco_instance_category_names[i]pag) para
yo, p en
zip(lista(self.predict[0][‘labels’].numpy()),
auto.predecir[0][‘scores’].separar().numpy())]devolver self.predicted_classesPaso 1.2: Detectar objetos de cada imagenEl siguiente código identifica varios objetos en cada imagen y los agrega a una lista llamada lista_de_objetos_detectados. Esta lista se transformará en una base de datos transaccional en el siguiente paso. from PAMI.extras.imageProcessing import imagery2Databases as ob
# carpeta de ruta de imágenes de entrada
images_path = ‘aizu_dataset’# lista para almacenar elementos de salida
lista_objetos_detectados = []# abriendo la carpeta de imágenes y leyendo cada imagen
para nombre de archivo en glob.glob(os.path.join(images_path,’*.JPG’)):
con open(os.path.join(os.getcwd(),filename),’r’) como f:# cargando el modelo resnet-50 preentrenado para entrenar en nuestro conjunto de datos
model_predict = objectDetection()# ingrese cada imagen al modelo pre-entrenado
# modelo devuelve objetos detectados
objetos_detectados = model_predict.model_train(nombre de archivo)
lista_objetos_detectados.append(objetos_detectados)Paso 2: crear una base de datos transaccionalElimine las etiquetas de clase poco interesantes utilizando el siguiente código. Guarde los datos restantes como una base de datos transaccional. #Elimine los objetos poco interesantes cuya puntuación de probabilidad sea menor que un valor particular, digamos 0.2
obj2db = ob.createDatabase(detected_objects_list,0.2)#guardar los objetos identificados en las imágenes como una base de datos transaccional
obj2db.saveAsTransactionalDB(‘aizu_dataset0.2.txt’,’,’)Vea el archivo de base de datos transaccional generado escribiendo el siguiente comando:!head -10 aizu_dataset0.2.txtEl resultado será el siguiente:motocicleta,mochila,persona
libro,bate de béisbol,nevera,taza,tostadora
botella, tazón, televisor, inodoro, silla, mouse, refrigerador, teléfono celular, microondas, control remoto, fregadero
microondas,refrigerador,tazón,botella,celular,horno,coche,persona
mesa de trabajo
planta en maceta
botella,bolso,maleta,libro
libro, laptop, tv, paraguas
horno
parquímetro, cochePaso 3: Extraer patrones en la base de datos transaccional.Aplique el algoritmo de crecimiento de patrón frecuente máximo en la base de datos transaccional generada para descubrir los patrones ocultos. En el siguiente código, encontramos patrones (es decir, los conjuntos de etiquetas de clase) que han ocurrido al menos diez veces en la base de datos de imágenes. from PAMI.frequentPattern.maximal import MaxFPGrowth as algobj = alg.MaxFPGrowth(‘aizu_dataset0.2. texto’,10, ‘,’)
obj.startMine()
imprimir(obj.obtenerPatrones())
obj.savePatterns(‘aizuDatasetPatterns.txt’)
print(‘Tiempo de ejecución: ‘ + str(obj.getRuntime()))
print(‘Memory: ‘ + str(obj.getMemoryRSS()))Vea los patrones generados escribiendo el siguiente comando:
!head -10 aizuDatasetPatterns.txtLa salida será la siguiente:refrigerador microondas :11
baño: 10
celular :11
semáforo :12
camión: 12
planta en maceta :12
reloj :15
banco :17
horno :17
coche: 18 El primer patrón/línea dice que las 11 imágenes en el depósito de imágenes contenían las etiquetas de clase del refrigerador y el microondas. Se pueden hacer afirmaciones similares con los patrones/líneas restantes. Conocer la correlación entre las diferentes etiquetas de objetos/clases puede beneficiar a los usuarios a la hora de tomar decisiones.Conclusión:La identificación eficiente de objetos en datos de imágenes ha sido ampliamente estudiada en la industria y la academia. Una pregunta clave después de identificar los objetos es, ¿cuál es la correlación subyacente entre los diversos objetos en los datos de las imágenes? Este blog intenta responder a esta pregunta crucial proporcionando una metodología genérica para transformar los objetos descubiertos en los datos de imagen en una base de datos transaccional, aplicando técnicas de minería de patrones y descubriendo patrones interesantes.Descargo de responsabilidad:Todas las imágenes que se muestran en esta página fueron dibujadas por el autor. La base de datos de imágenes fue creada por el propio autor y es de código abierto para ser utilizada con fines comerciales y no comerciales.Referencias:[1] Tuan-Vinh La, Minh-Son Dao, Kazuki Tejima, Rage Uday Kiran, Koji Zettsu: Mejorar la conciencia de las ciudades inteligentes sostenibles mediante el análisis de imágenes de Lifelog y datos de contaminación del aire de IoT. Datos masivos de IEEE 2021: 3589–3594[2] Conjunto de datos de imágenes: aizu_dataset.zip
Los días felices de la PDA y Blackberry han quedado definitivamente atrás, pero el factor…
Tutorial sobre cómo pronosticar usando un modelo autorregresivo en PythonFoto de Aron Visuals en UnsplashForecasting…
Si tienes un iPhone, los AirPods Pro son la opción obvia para escuchar música, ¡aunque…
Ilustración de Alex Castro / The Verge Plus nuevos rumores sobre el quinto Galaxy Fold.…
Se rumorea que los auriculares premium de próxima generación de Apple, los AirPods Max 2,…
El desarrollador Motive Studio y el editor EA han lanzado un nuevo tráiler de la…