$$\rightleftharpoonup{xx}$$
$$\longleftharp{xx}$$,
$$\longrightharp{xx}$$,
O conjunto de dados utilizado neste artigo foi adquirido do campo AS/RS do Departamento de Logística da Longyan Tobacco Industry Co., Ltd. Este estudo não envolveu participantes humanos nem animais. Não era necessário aprovar éticamente.
Aquisição e configuração de conjuntos de dados
Configuração de hardware: Instalar uma câmera industrial (por exemplo, MV-CA013-A0GM) equipada com uma lente de distância focal de 8 mm (por exemplo, MVL-HF0828M-6MPE) na plataforma de carga do guindaste empilhador. Conecte a câmera a um PC de controle via cabo GigE e um dispositivo de acesso sem fio (por exemplo, BH-ANT5158S-14HV, BH-MS-AC1600HWH). Posicione uma faixa de luz LED (por exemplo, MV-LLDS-1002-38-W) ao redor da câmera para garantir uma iluminação uniforme.
Configuração dos parâmetros da câmera: Configure a câmera usando o software do fabricante (por exemplo, MVS). Defina a resolução de aquisição para 1280 x 1024 pixels. Defina o modo de gatilho para Gatilho Hardware e sincronize-o com o sistema de posicionamento do guindaste empilhador. Ajuste o tempo de exposição para 100 ms e o ganho para 5 dB para minimizar o desfoque de movimento e o ruído. A distância de trabalho entre a câmera e as caixas de cigarros é de aproximadamente 550 mm.
Coleta de imagens: Uma câmera industrial com gatilho captura uma imagem automaticamente toda vez que uma bandeja é posicionada durante o armazenamento e retirada das caixas de cigarros. Colete um total de 4.835 imagens brutas; imagens típicas são mostradas na Figura 1.
Anotação de imagem: Use a ferramenta de código aberto LabelImg. Para cada imagem, desenhe caixas delimitadoras ao redor de cada característica visível da marca de cigarro. Atribua o nome da marca correto (por exemplo, Hongzhuang, Gutian) como etiqueta de classe para cada caixa delimitadora. Salve as anotações em um formato padrão de detecção de estágio único, com um arquivo txt por imagem.
Controle de qualidade: Um segundo anotador revisa aleatoriamente 20% das imagens anotadas. Quaisquer discrepâncias são discutidas e resolvidas, garantindo a consistência da rotulagem.
Estratégia de aumento de dados
Esta seção detalha tanto técnicas tradicionais quanto avançadas de aumento aplicadas aos conjuntos de dados. Os dados iniciais e os dados aumentados são combinados em um novo conjunto de dados, que então é dividido em conjunto de treinamento, conjunto de validação e conjunto de teste para garantir a justiça na avaliação.
Aumento tradicional de dados32: Essas transformações são aplicadas em tempo real pelo pipeline de treinamento (por exemplo, usando as bibliotecas Albumentations ou PyTorch Transforms) com uma probabilidade definida para cada lote.
Transformações geométricas: Rotação: Gira aleatoriamente as imagens em um ângulo entre -45° e +45°. Escalonamento: Escala aleatoriamente imagens por um fator entre 0,8 e 1,2. Inversão horizontal: Inverta aleatoriamente as imagens horizontalmente com 100% de probabilidade. Recorte aleatório: Recorte aleatoriamente uma seção entre 80% e 100% da área original da imagem.
Transformações fotométricas: Brilho e Contraste: Ajuste o brilho e o contraste por um fator escolhido aleatoriamente entre [0,6, 1,4]. Ruído gaussiano: Adicione ruído gaussiano com um desvio padrão escolhido aleatoriamente entre [0, 0,01 * 255] até 10% das imagens. Desfoque Gaussiano: Aplique um desfoque Gaussiano com tamanho de kernel de 3x3 a 10% das imagens.
Simulação de oclusão: Coloque aleatoriamente de 1 a 3 manchas retangulares de oclusão (cobrindo até 5% da área da imagem cada) nas imagens. Os patches são preenchidos com ruído aleatório ou valores médios de pixels da imagem.
Aumento avançado de dados: copiar e colar específico por região
Motivação e impacto: A principal motivação para esse aumento direcionado foi abordar uma questão crítica de dados: várias marcas de cigarros tiveram pouquíssimas ocorrências (até apenas uma imagem). Uma divisão padrão aleatória de validação de trem poderia potencialmente alocar todas as instâncias de uma marca rara para um único conjunto (por exemplo, todas para o conjunto de teste), resultando em que o modelo não teria oportunidade de aprender ou validar essa marca. Esse método aumentou artificialmente o tamanho da amostra dessas marcas sub-representadas, garantindo que cada marca tenha um número suficiente de instâncias distribuídas entre os conjuntos de treinamento, validação e teste. Essa etapa fundamental previne falhas catastróficas em categorias raras e é pré-requisito para qualquer desempenho significativo do modelo e generalização em todo o conjunto de marcas.
Essa etapa requer um modelo segmental de linha base pré-treinado no conjunto de dados inicial e no Modelo Segment Anything (SAM)33.
Segmentar objetos fonte: Para imagens de caixas de cigarros de marcas sub-representadas, use o modelo SAM para gerar máscaras de segmentação precisas. Use o modo de apontamento, clicando no recurso de marca da Caixa de Cigarros para iniciar a segmentação. Valide e refina manualmente as máscaras geradas para garantir precisão. Salve as imagens segmentadas das caixas de cigarros com fundos transparentes como arquivos PNG. Isso cria uma biblioteca de instâncias isoladas de objetos.
Gerar máscaras de fundo: Use o modelo segmental de linha base pré-treinado para realizar segmentação de instâncias em um conjunto de imagens de fundo (imagens com espaço livre amplo ou fundos simples). O modelo gerará máscaras binárias indicando as regiões já ocupadas por objetos.
Processar máscaras e colar objetos: Para cada máscara de fundo, use a biblioteca OpenCV (função 'cv2.approxPolyDP' com fator épsilon de 0,02 * perímetro de contorno) para realizar ajuste de curvas e linearizar as bordas da máscara, obtendo uma representação poligonal simplificada do espaço livre. Identifique a maior área de polígono contígua dentro da máscara de fundo como a região da pasta alvo. Selecione aleatoriamente um objeto de origem segmentada da biblioteca. Redimensione-a (mantendo a razão de aspecto) e aplique uma transformação afim (rotação menor entre -5° e +5°, e leve cisalhamento) para caber naturalmente na região da pasta de destino, garantindo que ela não se sobreponha aos limites dos objetos existentes. Use o alpha blending para colar o objeto transformado de forma fluida na imagem de fundo no local calculado. O arcabouço geral da tecnologia de aumento de dados baseado na técnica de copiar e colar em áreas específicas é mostrado na Figura 2. Gerar programáticamente um novo arquivo de anotação txt correspondente para o objeto colado, atualizando as coordenadas da caixa delimitadora e o rótulo da classe.
Conjunto de dados final aumentado: Este processo offline gera 600 novas imagens sintéticas. Combine-as com as 4.835 imagens originais e mais 1.167 imagens geradas aplicando as técnicas tradicionais de aumento descritas acima para formar o conjunto final de dados de 6.602 imagens. Divida o conjunto final em conjuntos de treinamento (70%, 4.621 imagens), validação (20%, 1.320 imagens) e teste (10%, 661 imagens), garantindo que as imagens da mesma sequência original sejam mantidas dentro da mesma divisão para evitar vazamento de dados.
Modificação do modelo para construir o detector aprimorado proposto
Algoritmos otimizados de detecção de objetos34 alcançaram progressos notáveis na inspeção industrial nos últimos anos. Esta seção fornece um procedimento detalhado, passo a passo, para modificar a arquitetura do modelo de referência para criar o modelo proposto. As modificações são implementadas editando o arquivo de configuração do modelo (por exemplo, config.yaml) e garantindo que as definições de módulos personalizados correspondentes estejam incluídas na base de código. A justificativa para cada modificação é fornecida para elucidar seu papel no enfrentamento de desafios específicos de detecção. A estrutura do modelo proposto é mostrada na Figura 3.
Substituição dos módulos de downsampling pelo módulo ADown: O módulo padrão Convolution-BatchNorm-SiLU (CBS) usado para downsampling emprega uma única convolução strided (strided), que pode atuar como um gargalode informações 35, potencialmente descartando recursos finos cruciais para reconhecer pequenas caixas de cigarros e logotipos detalhados de marcas. O módulo ADown foi projetado para aliviar isso implementando uma estrutura de duplo ramo que captura e preserva um conjunto mais rico de características durante a redução de resolução espacial. Um ramo prioriza a retenção de detalhes locais de alta frequência, enquanto o outro captura uma visão mais ampla e rica em contexto. A fusão dessas características complementares resulta em uma representação mais robusta e informativa para camadas subsequentes.
Etapas de ação para implementar
Definição do módulo: Garanta que um módulo personalizado do PyTorch chamado ADown esteja definido nos arquivos de definição do modelo do projeto. Este módulo deve conter dois ramos paralelos. O primeiro ramo deve consistir em uma camada de convolução bidimensional com um núcleo 3x3 e um passo de 2. O segundo ramo deve consistir sequencialmente em uma camada de max-pooling 2x2 (com passo 2) seguida por uma camada de convolução 1x1. As saídas desses dois ramos devem ser concatenadas ao longo da dimensão do canal, e o mapa de características resultante é então passado por uma camada final de convolução 1x1 para integrar os canais e produzir a saída. A estrutura do módulo ADown é mostrada na Figura 4.
Edição do arquivo de configuração: Abra o arquivo de configuração do modelo de referência (config.yaml). Identifique sistematicamente cada instância do módulo CBS configurada para amostragem reduzida (ou seja, onde o parâmetro de passo está definido como 2). Substitua cada uma dessas entradas do módulo CBS pelo novo módulo ADown.
Motivação de projeto: O design do ADown é motivado pela necessidade de mitigar a perda de informação em convoluções padrão stridadas, que podem ser prejudiciais para objetos pequenos. Sua estrutura de duplo ramo é inspirada na ideia do processamento paralelo para capturar tanto detalhes espaciais de alta frequência (via convolução) quanto informações contextuais de baixa frequência (via pooling), proporcionando assim uma representação de características multiescala mais rica para camadas subsequentes.
Integração do módulo iEMA
Fundamento e princípio de projeto: Para aprimorar a capacidade do modelo de detectar pequenos alvos e aqueles parcialmente ocultos, é essencial incorporar um mecanismo que possa modelar efetivamente contextos espaciais em múltiplas escalas. O módulo iEMA alcança isso ao incorporar um componente Eficiente de Atenção Multiescala (EMA)36 dentro de uma estrutura de bloco residual invertido (iRMB)37 . O iRMB fornece uma base computacionalmente eficiente usando convoluções separáveis em profundidade, enquanto o componente EMA captura explicitamente interações espaciais em escala cruzada por meio de um projeto paralelo multi-ramo. Essa integração permite que o modelo recalibre dinamicamente os pesos das características, focando a atenção nas regiões espaciais mais discriminatórias em diferentes escalas, melhorando assim o reconhecimento sob oclusão e para objetos pequenos.
Etapas de ação e implementação
Definição do módulo: Certifique-se de que um módulo personalizado do PyTorch chamado iEMA esteja definido. Este módulo deve primeiro implementar um bloco residual invertido. Esse bloco normalmente começa com uma convolução pontual para expansão do canal, seguida por uma convolução em profundidade (por exemplo, 3x3) para extração de características espaciais, e finalmente uma convolução pontual para projeção do canal. Imediatamente após esse bloqueio, o mecanismo de atenção da EMA deve ser implementado. O mecanismo EMA normalmente emprega convoluções agrupadas e interações interdimensionais para gerar eficientemente um mapa de atenção espacial multiescala sem excesso de sobrecarga computacional. A estrutura do módulo iEMA é mostrada na Figura 5.
Edição de arquivos de configuração: No arquivo de configuração config.yaml, localize as seções que definem a rede neck, especificamente as camadas imediatamente após os módulos C2f. Nesses locais estratégicos, insira uma nova camada que chame o módulo iEMA.
Motivação de projeto: O módulo iEMA é baseado no princípio de melhorar a discriminabilidade de características integrando extração local de características (via convolução em profundidade) com um mecanismo de modelagem global de contexto (EMA) leve, porém eficaz. Essa abordagem híbrida permite que o modelo foque de forma adaptativa em regiões informativas em diferentes escalas, o que é crucial para reconhecer logotipos e textos de marcas parcialmente visíveis.
Substituição da cabeça de detecção pelo módulo DynamicHead
Fundamento e princípio de design: A cabeça de detecção original pode não lidar de forma ideal com a variação significativa de escala das caixas de cigarros e a complexa interação entre tarefas de localização e classificação. O módulo DynamicHead aborda isso unificando três formas de atenção em uma estrutura coerente: consciente da escala, consciente do espaço e atenção consciente da tarefa. O componente consciente da escala funde dinamicamente características de diferentes níveis da pirâmide de características, garantindo que objetos de todos os tamanhos sejam representados de forma eficaz. O componente espacialmente consciente emprega uma estratégia de amostragem esparsa para focar recursos computacionais nas regiões mais informativas dentro dos mapas de características. O componente consciente da tarefa adapta a representação de características especificamente para os objetivos distintos da regressão de caixas delimitadoras e classificação de categorias. Essa abordagem unificada leva a previsões mais precisas e robustas.
Etapas de ação e implementação
Definição do módulo: Este é um módulo complexo que abrange os três mecanismos de atenção descritos pelas Equações (1) a (4). Sua estrutura interna incluirá camadas para calcular pesos em escala, realizar atenção espacial deformável e aplicar transformações de características específicas para cada tarefa.
(1)
(2)
(3)
(4)
Onde WL(F) denota o mapa final de características refinado pela atenção, obtido aplicando sequencialmente o πL(F) consciente da escala, o πS(F) consciente da escala e os mecanismos de atenção C(π F) conscientes da tarefa à característica de entrada F. Especificamente, na Eq. (2), πL(F) calcula um peso de atenção em escala primeiro fazendo uma média entre dimensões espaciais (S) e canais (C), passando-o por uma função linear f(⋅) e uma ativação sigmoide dura σ(⋅). Na Eq. (3), πS(F) realiza atenção espacial esparsa ao agregar características de K pontos-chave amostrados pk, cada um com um deslocamento aprendível Δpk para focar em regiões discriminativas e um escalar de importância Δm k. Na Eq. (4), πC(F) implementa uma atenção consciente da tarefa aplicando uma transformação linear (governada por parâmetros aprendidos (α1, β1,α 2,β 2)) a cada canal e selecionando a resposta máxima, permitindo que a cabeça se especialize em tarefas de classificação e regressão. A estrutura do módulo DynamicHead é mostrada na Figura 6.
Edição de arquivo de configuração: No arquivo config.yaml, encontre a seção que define a cabeça do modelo, que originalmente contém o módulo Detect. Substitua por uma nova entrada que chame o módulo DynamicHead.
Motivação de projeto: O módulo DynamicHead se baseia na observação de que as cabeças de detecção de objetos devem ser adaptativas à escala, localização espacial e tarefa. Seu arcabouço unificado de atenção, formalizado em Eqs. (1-4), permite que o modelo recalibre dinamicamente as respostas das características com base nessas três dimensões, levando a previsões mais robustas contra variações de escala e bagunça de fundo.
Treinamento em modelos
Certifique-se de que o PyTorch 2.1.0, CUDA 12.1 e todas as dependências estejam instalados.
Comando de treinamento
Antes de retreinar, prepare os dados da imagem dividida e os dados de anotação em um formato padrão de detecção de estágio único. Crie um arquivo .yaml contendo o caminho da imagem e a categoria de dados. De acordo com a melhoria do modelo, o arquivo .yaml original do detector é substituído pelo arquivo .yaml proposto do modelo. Escreva o arquivo train.py, importe o pacote detector de estágio único, carregue o modelo de treinamento e o caminho de dados, e defina alguns parâmetros de treinamento, incluindo imgze=640, epochs=100, batch=4, workers=0, dispositivo='0', otimizador='SGD', close_mosaic=10, etc.
Hiperparâmetros: Os parâmetros principais são: tamanho da imagem de entrada (640 x 640), tamanho do lote (4), taxa inicial de aprendizado (0,01) com agendador de recozimento cosseno, otimizador SGD com momento (0,937) e decaimento de peso (0,0005). A ampliação em mosaico é ativada por padrão.
Monitoramento do treinamento: O processo de treinamento gerará métricas para cada época. Monitore as curvas para perda de treinamento/validação e mAP em 0,5 para garantir convergência e evitar superajuste. Treinar para 100 épocas geralmente é suficiente.
Avaliação e implantação de modelos
Avaliação: Após o treino, o melhor modelo é salvo como runs/train/exp/weights/best.pt. Avalie no conjunto de vals usando: bash python val.py --data cigarette_dataset.yaml --weights runs/train/exp/weights/best.pt. O script gera Precisão, Recall, mAP em 0,5, etc. Confirme que o mAP atinge o limite exigido (por exemplo, 97,9%).
Inferência para verificação: Execute inferência em imagens de amostra para verificar visualmente os resultados da detecção: bash python detect.py --weights runs/train/exp/weights/best.pt --source path/to/test/images --conf 0.5. Ao verificar o raciocínio, é possível obter os resultados de detecção de cada imagem e a velocidade de detecção do modelo.
Implantação: Para implantação em tempo real no sistema do guindaste empilhador, converta o modelo PyTorch (best.pt, ~4,7 MB) para um formato como TensorRT ou ONNX para otimizar a velocidade de inferência. A saída final são caixas delimitadoras com etiquetas de classe (nomes de marcas) e pontuações de confiança.