Detecção de alvo de imagem de sensoriamento remoto com base em yolov5 (NWPU VHR-10)

Recentemente, estou fazendo um projeto final, e sinto que as informações na Internet não são muito completas, escrevi meu processo de treinamento para amigos que estão fazendo esse caminho para aprender. Apenas recorrência simples, o resto não foi explorado.

1. Conjunto de dados e pré-processamento de dados

O primeiro é o conjunto de dados: o conjunto de dados que uso é o conjunto de dados divulgado pela NWPU, NWPU VHR-10

Link: https://pan.baidu.com/s/1vfhDU2ORWUpL-aGM1PllGw 
Código de extração: d5au

O conjunto de dados Xigongda tem dez categorias e três pastas, ou seja, conjunto de imagens positivas (650 fotos), conjunto de imagens negativas (150 fotos) e verdade de campo (650 arquivos txt).

As imagens no conjunto de imagens negativas não possuem objetos terrestres correspondentes,
as imagens no conjunto de imagens positivas incluem um ou mais objetos terrestres correspondentes, e
o txt na verdade fundamental corresponde ao retângulo circunscrito dos objetos terrestres no conjunto de imagens positivas
Image Informação:

  • tamanho da imagem: 500~1100 * 500~1100 * 3
  • número da imagem: 800
  • número do objeto: 3.651

Informações de rotulagem:
10 categorias, um total de 3.651 objetos;

  • avião
  • enviar
  • tanque de armazenamento, tanque de armazenamento
  • campo de beisebol, campo de beisebol
  • quadra de tênis
  • quadra de basquete, quadra de basquete
  • campo de pista de chão, campo de pista de chão
  • Porto
  • ponte
  • veículo

 A primeira é converter o NWPU VHR-10 em um formato semelhante ao conjunto de dados voc e, em seguida, convertê-lo no formato yolo.

O formato de arquivo voc inclui anotações de arquivo para armazenar informações de imagem, imagens para armazenar imagens de treinamento e ImageSets para armazenar informações de treinamento de imagem.

Reordene as imagens no conjunto de imagens negativas e as imagens positivas definidas em 000001.jpg-000800.jpg, as imagens no conjunto de imagens positivas são 000001.jpg-000650.jpg e as imagens no conjunto de imagens negativas são 000651.jpg- 000800.jpg e armazenados na pasta de imagens.

Um arquivo xml com o mesmo formato que o arquivo xml de informações de anotação na pasta de anotações do conjunto de dados. Como as imagens no conjunto de imagens negativas não possuem informações de rótulo correspondentes, apenas o arquivo xml contendo o tamanho da imagem é gerado.

A pasta ImageSets é dividida em quatro arquivos: train.txt, val.txt, trainval.txt e test.txt. train representa as informações do conjunto de treinamento, val representa as informações do conjunto de verificação, trainval representa as informações de dados combinadas do conjunto de treinamento e do conjunto de verificação , e test Representa as informações do conjunto de teste.

Em seguida, converta o formato voc para o formato yolo, gere uma nova labelspasta no diretório, importe o caminho do conjunto de dados para o arquivo txt, extraia e converta cada informação de anotação xml para o formato txt e cada imagem corresponde a um arquivo txt.

Anexe meu programa, no qual main.py, 1.py, 2.py, 3.py são executados em ordem , pois o último pode usar o endereço da coisa gerada pelo anterior , basta alterar o endereço para o seu próprio endereço .

Link: https://pan.baidu.com/s/1C04y16LIdyby5vhNEzsYSA 
Código de extração: iz0r

Há algo errado. Altere a linha em 3.py para a frase abaixo. Há uma classe de ponte faltando, uma faltando entre o porto e o veículo, e tênis está escrito incorretamente.

classes = ['airplane','ship','storage tank','baseball diamond','tennis court','basketball court','ground track field','harbor','bridge','vehicle']  # class names

! ! ! Muitos endereços ! ! ! E deve ser executado em ordem. Se você não tem certeza se a pasta pode ser gerada , você pode criá-la com antecedência e executá-la diretamente. Você não precisa alterar nada, exceto o endereço! ! ! ! !

 

2. Construção do ambiente

Em primeiro lugar, anexe o código-fonte oficial do yolov5, você pode baixá-lo no Github sozinho, pesquise yolov5 diretamente no Github e baixe aquele com mais curtidas. Eu baixei para o meu disco de rede, aqui está o link do meu disco de rede.

Link: https://pan.baidu.com/s/1BENXIeyKgjwyAhnXA_n9Uw 
Código de extração: 3r9o

yolov5 precisa de pytorch e cuda para executar, porque eu executei alguns algoritmos de aprendizado profundo de rede neural antes, então meu ambiente já foi configurado. Além disso, se você quiser melhorar a velocidade de execução, você precisa baixar a GPU e o velocidade de execução apenas com a CPU é muito rápida. Lento, mas funciona. A melhor versão do python é 3.7 ou 3.8. Se for muito alta, um erro será relatado. Você pode diminuir a versão do python com antecedência antes de executar. Estou usando o conda versão 3.8.

Se for branco puro, leia este blog, ambiente de instalação

Grave todo o processo de configuração do ambiente Yolov5 usando Anaconda e Pycharm

Após a configuração do ambiente, o próximo passo é instalar as bibliotecas necessárias

pip install -r requirements.txt

yolov5 vem com um arquivo requirements.txt, que contém todas as bibliotecas que podem ser usadas no tempo de execução. Basta executá-lo no terminal de acordo com a instrução acima. Embora não seja concluído sem problemas em circunstâncias normais, se você não puder instalar você mesmo pode fazer o pip manualmente. Win+r digite cmd para entrar na janela do prompt de comando, digite pip list, você pode ver todas as bibliotecas e versões, compare a instalação da versão fornecida em requirements.txt e a desinstalação do Desinstalar.

3. Execute o programa

Primeiro, você precisa criar um mydata.yaml na pasta de dados. Assim, mydata.yaml é um subarquivo de dados.

 O programa mydata.yaml, o formato yaml é bem rígido, deve ter um espaço após os dois pontos exceto o endereço, senão será reportado um erro (pois mudei esse espaço por duas horas), e mais ! ! !

Os endereços de val, train e test são os endereços gerados na última etapa do nosso pré-processamento de dados.

Aqui, é o mesmo arquivo de nível da pasta. Quanto aos dois arquivos .cache, não se preocupe. Isso é gerado durante o treinamento. É normal que não haja ninguém agora, então não se engane.

 

 Este é um programa, sugiro que você apenas copie e altere o endereço diretamente. Resumidamente, as três primeiras linhas são o endereço, a segunda é a categoria e a última é o número de categorias, que também podem ser modificadas de acordo com o seu próprio conjunto de dados.

val: G:/csdn/yolov5/nwpu vhr-10/val.txt
train: G:/csdn/yolov5/nwpu vhr-10/train.txt
test: G:/csdn/yolov5/nwpu vhr-10/test.txt
names:
- airplane
- ship
- storage tank
- baseball diamond
- tennis court
- basketball court
- ground track field
- harbor
- bridge
- vehicle
nc: 10

Em seguida, modifique o programa principal, train.py, no arquivo utils

 As principais partes que precisam ser modificadas são estas 5. Se você estiver usando o código-fonte, basta alterar o arquivo yaml na terceira linha para Mydata. O arquivo .pt na primeira linha é um arquivo de peso, que pode ser alterado, e será mencionado mais adiante.

O próximo passo é modificar o arquivo yaml.Na segunda linha, usamos yolo5s.yaml, então modifique-o em model/yolov5s.yaml.

 Basta alterar o número nc para o mesmo que acima, porque o conjunto de dados Xigongda tem apenas dez categorias, então meu nc é 10.

Então você pode executá-lo.

Se houver um problema de não conseguir se conectar à rede ou a outra parte não responder, ele fará o download do arquivo de peso sozinho durante a operação, que é o arquivo pt de yolov5s.pt na primeira linha acima. Não importa se há um problema, você pode simplesmente baixar o arquivo de peso e colocá-lo em uma pasta.

Link: https://pan.baidu.com/s/1p7_v_Wlicw_7oBUv-QNv_w 
Código de extração: uarf

Este é o link para o arquivo de peso, coloque-o no diretório raiz, ou seja, é o mesmo arquivo de nível do modelo, paralelo! !

O arquivo de peso fica assim, quanto maior a memória, maior o peso, melhor o efeito do treino, não absoluto! ! ! Cuidado com o overfitting, e a velocidade de execução zun é muito lenta. Usei o conjunto de big data Xigong rodando em 5s, 100 épocas, rodei por dez horas, mudei o arquivo de peso, 5x, e não consegui terminar uma época em uma hora.

Isso não é problema, o resultado da corrida será salvo em runs\train\exp

 Quatro, detectar

Também na pasta utils, modifique esses três arquivos, o primeiro é o arquivo de peso que usamos, o segundo é o endereço da imagem que precisamos detectar (certifique-se de substituí-lo por sua própria imagem!!!), o terceiro as velhas regras. Então ele pode ser executado, o resultado gerado está em runs\test\exp, esqueci de tirar uma captura de tela.

 5. Altere o arquivo de peso

A primeira etapa é modificar as cinco caixas no trem e alterar 5s para outra coisa. É recomendável alterar a época e o tamanho do lote para um tamanho menor se um arquivo de peso grande for usado, caso contrário, o tempo limite será esgotado. Segundo , não, altere-o de acordo O número nc no arquivo pt, você tem uma impressão e pode executá-lo.Se um erro for relatado, você pode usar diretamente uma linha de código para executá-lo no terminal. (Porque eu reportei um erro inexplicável quando eu mesmo executei, então usei esse método, é relativamente simples, não precisa alterar o código fonte, nada precisa ser alterado.

python train.py --batch-size 2 --epochs 100 --data G:\bishe\bishe1\yolov5-master\data\mydata.yaml --weights D:\BaiduNetdiskDownload\yolov5-weights\yolov5x.pt

Quatro elementos, batchsize, epochs, o endereço de mydata.yaml e o endereço do peso file.pt. Este método não precisa alterar o código e não precisa mover nada. Não importa o que você altere nas poucas caixas que acabei de circular, apenas esta linha fará.

Da mesma forma, detectar também pode usar esse método.

python .\detect.py --source C:\Users\Administrator\PycharmProjects\yolov5\imgs\valid\images --weights C:\Users\Administrator\PycharmProjects\yolov5\runs\train\exp8\weights\best.pt

Dois elementos, um é o endereço da imagem que você precisa testar, o outro é o arquivo pt, esse arquivo é o que treinamos, em runs\train\exp\weights\best.pt

Isso é o mesmo, você não precisa alterar o código-fonte e não precisa alterar o quadro do código-fonte para que tipo de quadro, você pode usar este método.

 Coloque uma foto de detectar.

Este é todo o processo de uso do yolov5 para treinar o conjunto de big data Xigong. Eu descobri um pouco. Se houver algo errado, deixe uma mensagem e me corrija. Se você tiver alguma dúvida, também pode me enviar uma mensagem privada Eu vou responder sim, não só posso sentir pena, e postarei se houver melhorias no futuro. obrigado a todos! ! !

Acho que você gosta

Origin blog.csdn.net/weixin_51467037/article/details/129737966
Recomendado
Clasificación