Deteção de objectos
Shiyu Chen, engenheira de dados na Zilliz, licenciou-se em Ciências Informáticas na Universidade de Xidian. Desde que se juntou à Zilliz, tem vindo a explorar soluções para o Milvus em vários domínios, como a análise de áudio e vídeo, a recuperação de fórmulas de moléculas, etc., o que enriqueceu bastante os cenários de aplicação da comunidade. Atualmente, está a explorar mais soluções interessantes. No seu tempo livre, adora desporto e leitura.
Quando estava a ver o Free Guy no fim de semana passado, senti que já tinha visto o ator que faz de Buddy, o segurança, algures, mas não me lembrava de nenhum dos seus trabalhos. A minha cabeça estava cheia de "quem é este gajo?". Tinha a certeza de ter visto aquela cara e estava a esforçar-me por me lembrar do seu nome. Um caso semelhante é o de uma vez que vi o ator principal de um vídeo a beber uma bebida de que gostava muito, mas acabei por não me lembrar do nome da marca.
A resposta estava na ponta da língua, mas o meu cérebro estava completamente bloqueado.
O fenómeno da ponta da língua (TOT) deixa-me louco quando vejo filmes. Se ao menos existisse um motor de pesquisa de imagens invertido para vídeos que me permitisse encontrar vídeos e analisar o seu conteúdo. Antes, criei um motor de pesquisa de imagens invertido utilizando o Milvus. Considerando que a análise de conteúdos de vídeo se assemelha de alguma forma à análise de imagens, decidi criar um motor de análise de conteúdos de vídeo com base no Milvus.
Deteção de objectos
Visão geral
Antes de serem analisados, os objectos de um vídeo devem ser detectados. Detetar objectos num vídeo de forma eficaz e precisa é o principal desafio da tarefa. É também uma tarefa importante para aplicações como o piloto automático, dispositivos portáteis e IoT.
Desenvolvidos a partir de algoritmos tradicionais de processamento de imagem para redes neurais profundas (DNN), os principais modelos actuais para deteção de objectos incluem R-CNN, FRCNN, SSD e YOLO. O sistema de análise de vídeo de aprendizagem profunda baseado em Milvus apresentado neste tópico pode detetar objectos de forma inteligente e rápida.
Implementação
Para detetar e reconhecer objectos num vídeo, o sistema deve, em primeiro lugar, extrair fotogramas de um vídeo e detetar objectos nas imagens dos fotogramas utilizando a deteção de objectos; em segundo lugar, extrair vectores de caraterísticas dos objectos detectados e, por último, analisar o objeto com base nos vectores de caraterísticas.
- Extração de fotogramas
A análise de vídeo é convertida em análise de imagem através da extração de fotogramas. Atualmente, a tecnologia de extração de fotogramas está muito madura. Programas como o FFmpeg e o OpenCV suportam a extração de fotogramas em intervalos específicos. Este artigo apresenta como extrair fotogramas de um vídeo a cada segundo utilizando o OpenCV.
- Deteção de objectos
A deteção de objectos consiste em encontrar objectos nos fotogramas extraídos e extrair imagens dos objectos de acordo com as suas posições. Como se pode ver nas figuras seguintes, foram detectados uma bicicleta, um cão e um carro. Este tópico apresenta a forma de detetar objectos utilizando o YOLOv3, que é normalmente utilizado para a deteção de objectos.
- Extração de caraterísticas
A extração de caraterísticas refere-se à conversão de dados não estruturados, que são difíceis de reconhecer pelas máquinas, em vectores de caraterísticas. Por exemplo, as imagens podem ser convertidas em vectores de caraterísticas multidimensionais utilizando modelos de aprendizagem profunda. Atualmente, os modelos de IA de reconhecimento de imagem mais populares incluem VGG, GNN e ResNet. Este tópico apresenta como extrair caraterísticas de objectos detectados utilizando o ResNet-50.
- Análise de vectores
Os vectores de caraterísticas extraídos são comparados com os vectores da biblioteca, sendo devolvidas as informações correspondentes aos vectores mais semelhantes. Para conjuntos de dados de vectores de caraterísticas em grande escala, o cálculo é um enorme desafio. Este tópico apresenta a forma de analisar vectores de caraterísticas utilizando o Milvus.
Tecnologias-chave
OpenCV
A Open Source Computer Vision Library (OpenCV) é uma biblioteca de visão computacional multiplataforma que fornece muitos algoritmos universais para processamento de imagem e visão computacional. O OpenCV é normalmente utilizado no domínio da visão computacional.
O exemplo seguinte mostra como capturar fotogramas de vídeo em intervalos especificados e guardá-los como imagens utilizando o OpenCV com Python.
import cv2
cap = cv2.VideoCapture(file_path)
framerate = cap.get(cv2.CAP_PROP_FPS)
allframes = int(cv2.VideoCapture.get(cap, int(cv2.CAP_PROP_FRAME_COUNT)))
success, image = cap.read()
cv2.imwrite(file_name, image)
YOLOv3
You Only Look Once, Version 3 (YOLOv3 [5]) é um algoritmo de deteção de objectos de uma fase proposto nos últimos anos. Em comparação com os algoritmos tradicionais de deteção de objectos com a mesma precisão, o YOLOv3 é duas vezes mais rápido. O YOLOv3 mencionado neste tópico é a versão melhorada do PaddlePaddle [6]. Utiliza múltiplos métodos de otimização com uma maior velocidade de inferência.
ResNet-50
A ResNet [7] é a vencedora do ILSVRC 2015 na classificação de imagens devido à sua simplicidade e praticidade. Como base de muitos métodos de análise de imagens, o ResNet prova ser um modelo popular especializado em deteção, segmentação e reconhecimento de imagens.
Milvus
O Milvus é uma base de dados vetorial de código aberto, nativa da nuvem, criada para gerir vectores de incorporação gerados por modelos de aprendizagem automática e redes neurais. Ele é amplamente usado em cenários como visão computacional, processamento de linguagem natural, química computacional, sistemas de recomendação personalizados e muito mais.
Os procedimentos seguintes descrevem o funcionamento do Milvus.
- Os dados não estruturados são convertidos em vectores de caraterísticas utilizando modelos de aprendizagem profunda e são importados para o Milvus.
- O Milvus armazena e indexa os vectores de caraterísticas.
- O Milvus devolve os vectores mais semelhantes ao vetor consultado pelos utilizadores.
Implementação
Agora já sabe o que são os sistemas de análise de vídeo baseados em Milvus. O sistema é composto principalmente por duas partes, como mostra a figura seguinte.
As setas vermelhas indicam o processo de importação de dados. Utilize o ResNet-50 para extrair vectores de caraterísticas do conjunto de dados de imagens e importe os vectores de caraterísticas para o Milvus.
As setas pretas indicam o processo de análise de vídeo. Em primeiro lugar, extrair fotogramas de um vídeo e guardar os fotogramas como imagens. Em segundo lugar, detetar e extrair objectos nas imagens utilizando o YOLOv3. Em seguida, utiliza o ResNet-50 para extrair vectores de caraterísticas das imagens. Por fim, o Milvus procura e devolve as informações dos objectos com os vectores de caraterísticas correspondentes.
Para mais informações, consulte Milvus Bootcamp: Sistema de deteção de objectos de vídeo.
Importação de dados
O processo de importação de dados é simples. Converta os dados em vectores de 2.048 dimensões e importe os vectores para o Milvus.
vector = image_encoder.execute(filename)
entities = [vector]
collection.insert(data=entities)
Análise de vídeo
Tal como referido anteriormente, o processo de análise de vídeo inclui a captura de fotogramas de vídeo, a deteção de objectos em cada fotograma, a extração de vectores dos objectos, o cálculo da similaridade dos vectores com a métrica da distância euclidiana (L2) e a pesquisa de resultados utilizando o Milvus.
images = extract_frame(filename, 1, prefix)
detector = Detector()
run(detector, DATA_PATH)
vectors = get_object_vector(image_encoder, DATA_PATH)
search_params = {"metric_type": "L2", "params": {"nprobe": 10}}
results = collection.search(vectors, param=search_params, limit=10)
Conclusão
Atualmente, mais de 80% dos dados não estão estruturados. Com o rápido desenvolvimento da IA, foi desenvolvido um número crescente de modelos de aprendizagem profunda para analisar dados não estruturados. Tecnologias como a deteção de objectos e o processamento de imagens alcançaram grandes avanços tanto no meio académico como na indústria. Graças a estas tecnologias, cada vez mais plataformas de IA satisfazem requisitos práticos.
O sistema de análise de vídeo abordado neste tópico foi criado com o Milvus, que pode analisar rapidamente conteúdos de vídeo.
Sendo uma base de dados vetorial de código aberto, o Milvus suporta vectores de caraterísticas extraídos através de vários modelos de aprendizagem profunda. Integrado com bibliotecas como Faiss, NMSLIB e Annoy, o Milvus fornece um conjunto de APIs intuitivas, suportando a mudança de tipos de índice de acordo com os cenários. Além disso, o Milvus suporta filtragem escalar, o que aumenta a taxa de recuperação e a flexibilidade da pesquisa. O Milvus tem sido aplicado em muitas áreas, como processamento de imagem, visão computacional, processamento de linguagem natural, reconhecimento de fala, sistema de recomendação e descoberta de novos medicamentos.
Referências
[1] A. D. Bagdanov, L. Ballan, M. Bertini, A. Del Bimbo. "Correspondência e recuperação de marcas comerciais em bases de dados de vídeos desportivos". Actas do workshop internacional sobre Workshop sobre recuperação de informação multimédia, ACM, 2007. https://www.researchgate.net/publication/210113141_Trademark_matching_and_retrieval_in_sports_video_databases
[2] J. Kleban, X. Xie, W.-Y. Ma. "Spatial pyramid mining for logo detection in natural scenes" [Extração de pirâmides espaciais para deteção de logótipos em cenas naturais]. Conferência Internacional do IEEE, 2008. https://ieeexplore.ieee.org/document/4607625
[3] R. Boia, C. Florea, L. Florea, R. Dogaru. "Localização e reconhecimento de logótipos em imagens naturais utilizando gráficos de classes homográficas". Machine Vision and Applications 27 (2), 2016. https://link.springer.com/article/10.1007/s00138-015-0741-7
[4] R. Boia, C. Florea, L. Florea. "Aglomeração de asift elíptico em protótipo de classe para deteção de logotipo". BMVC, 2015. http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=5C87F52DE38AB0C90F8340DFEBB841F7?doi=10.1.1.707.9371&rep=rep1&type=pdf
[5] https://arxiv.org/abs/1804.02767
[6] https://paddlepaddle.org.cn/modelbasedetail/yolov3
[7] https://arxiv.org/abs/1512.03385
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word