minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
As ervas daninhas são um dos principais problemas na agricultura, representando uma séria ameaça ao crescimento e rendimento das culturas. Os métodos tradicionais de identificação e gestão manuais são ineficientes e imprecisos, pelo que é necessária tecnologia avançada de visão computacional para melhorar a eficiência e a qualidade da produção agrícola. Como um modelo de aprendizagem profunda, o ResNet tem um bom desempenho no tratamento de tarefas complexas de classificação de imagens. Ele pode não apenas resolver efetivamente o problema de ervas daninhas diversas e complexas em terras agrícolas, mas também promover o desenvolvimento da agricultura inteligente e reduzir a dependência de pesticidas químicos para atingir o objetivo. do desenvolvimento agrícola sustentável. Ao utilizar o ResNet para classificação de ervas daninhas, podemos fornecer aos agricultores soluções de gestão agrícola mais inteligentes e precisas, promover a melhoria da eficiência da produção agrícola e a modernização da indústria agrícola. Portanto, este projeto utiliza a estrutura localizada PaddleClas+Swanlab+Gradio+Swanhub para conduzir experimentos de classificação de ervas daninhas.
PaddlePaddle é uma plataforma de aprendizado profundo de nível empresarial desenvolvida pela Baidu, projetada para oferecer suporte a aplicativos de aprendizado profundo de processo completo, desde o desenvolvimento do modelo até a implantação. Ele fornece uma variedade de ferramentas e bibliotecas para oferecer suporte a uma variedade de tarefas de aprendizagem profunda, incluindo processamento de imagens, processamento de linguagem natural, reconhecimento de fala, etc.RemoRemo
PaddleClas é uma biblioteca de ferramentas usada especificamente para tarefas de classificação de imagens na estrutura Paddle. Ele fornece um conjunto completo de soluções ponta a ponta, incluindo processamento de dados, definição de modelo, treinamento, avaliação e implantação, projetadas para ajudar os desenvolvedores a construir e implantar rapidamente modelos eficientes de classificação de imagens.Classes de remo
SwanLab é uma ferramenta leve e de código aberto de rastreamento de experimentos de IA que melhora o rastreamento de experimentos de ML e a experiência de colaboração, fornecendo uma API amigável e combinando rastreamento de hiperparâmetros, registro de indicadores, colaboração online e outras funções.Bem-vindo à documentação oficial do SwanLab |
Swanhub é uma comunidade de colaboração e compartilhamento de modelos de código aberto desenvolvida pelo Geek Studio. Ele fornece aos desenvolvedores de IA funções como hospedagem de modelo de IA, registros de treinamento, exibição de resultados de modelo e implantação rápida de API.Bem vindo ao Swanhub
Gradio é uma biblioteca Python de código aberto projetada para ajudar cientistas de dados, pesquisadores e desenvolvedores que trabalham na área de aprendizado de máquina a criar e compartilhar rapidamente interfaces de usuário para modelos de aprendizado de máquina.Gradio
Instale as três bibliotecas a seguir:
- paddle
- swanlab
- gradio
Comando de instalação:
pip install paddle swanlab gradio
Conjunto de dados de classificação de ervas daninhas: DeepWeeds
- DeepWeeds
- --images
- ----1.jpg
- ----2.jpg
- --train.txt
- --val.txt
- --test.txt
- --classnames.txt
Suas respectivas funções e significados:
1. Pasta DeepWeeds: esta pasta é usada para armazenar imagens de pastas de imagens, arquivos de conjunto de verificação de conjunto de teste de conjunto de treinamento e arquivos de rótulo
2. pasta de imagens: esta pasta é usada para salvar pastas de imagens de treinamento, teste e verificação.
3. Arquivos train.txt, val.txt, test.txt: Este arquivo é usado para salvar os caminhos de imagem e categorias de conjuntos de treinamento, teste e validação.
4. arquivo de nomes de classe: usado para salvar rótulos de categoria
Link do modelo:Modelo PaddleClas
Após descompactar, você obterá a pasta PaddleClas.
Crie app.py na pasta PaddleClas.
O que faz é: executar o script que executa o Gradio Demo
Primeiro encontre ppcls-->configs-->ImageNet-->Res2Net-->Res2Net50_14w_8s.yaml na pasta PaddleClas.
Modifique épocas para 100, categoria class_num para 9, caminho da imagem de treinamento, caminho da imagem de verificação e arquivo de rótulo, respectivamente. Um total de 7 alterações foram feitas.
- # global configs
- Global:
- checkpoints: null
- pretrained_model: null
- output_dir: ./output/
- device: gpu
- save_interval: 1
- eval_during_train: True
- eval_interval: 1
- epochs: 100###########################1##############################
- print_batch_step: 10
- use_visualdl: False
- # used for static mode and model export
- image_shape: [3, 224, 224]
- save_inference_dir: ./inference
-
- # model architecture
- Arch:
- name: Res2Net50_14w_8s
- class_num: 9############################2##############################
-
- # loss function config for traing/eval process
- Loss:
- Train:
- - CELoss:
- weight: 1.0
- epsilon: 0.1
- Eval:
- - CELoss:
- weight: 1.0
-
-
- Optimizer:
- name: Momentum
- momentum: 0.9
- lr:
- name: Cosine
- learning_rate: 0.1
- regularizer:
- name: 'L2'
- coeff: 0.0001
-
-
- # data loader for train and eval
- DataLoader:
- Train:
- dataset:
- name: ImageNetDataset
- image_root: ./weeds/images/#################3#######################
- cls_label_path: ./weeds/train.txt###########4########################
- transform_ops:
- - DecodeImage:
- to_rgb: True
- channel_first: False
- - RandCropImage:
- size: 224
- - RandFlipImage:
- flip_code: 1
- - NormalizeImage:
- scale: 1.0/255.0
- mean: [0.485, 0.456, 0.406]
- std: [0.229, 0.224, 0.225]
- order: ''
- batch_transform_ops:
- - MixupOperator:
- alpha: 0.2
-
- sampler:
- name: DistributedBatchSampler
- batch_size: 64
- drop_last: False
- shuffle: True
- loader:
- num_workers: 4
- use_shared_memory: True
-
- Eval:
- dataset:
- name: ImageNetDataset
- image_root: ./DeepWeeds/images/###############5#######################
- cls_label_path: ./DeepWeeds/val.txt###########6########################
- transform_ops:
- - DecodeImage:
- to_rgb: True
- channel_first: False
- - ResizeImage:
- resize_short: 256
- - CropImage:
- size: 224
- - NormalizeImage:
- scale: 1.0/255.0
- mean: [0.485, 0.456, 0.406]
- std: [0.229, 0.224, 0.225]
- order: ''
- sampler:
- name: DistributedBatchSampler
- batch_size: 64
- drop_last: False
- shuffle: False
- loader:
- num_workers: 4
- use_shared_memory: True
-
- Infer:
- infer_imgs: docs/images/inference_deployment/whl_demo.jpg
- batch_size: 10
- transforms:
- - DecodeImage:
- to_rgb: True
- channel_first: False
- - ResizeImage:
- resize_short: 256
- - CropImage:
- size: 224
- - NormalizeImage:
- scale: 1.0/255.0
- mean: [0.485, 0.456, 0.406]
- std: [0.229, 0.224, 0.225]
- order: ''
- - ToCHWImage:
- PostProcess:
- name: Topk
- topk: 5
- class_id_map_file: ./DeepWeeds/classnaems.txt###########7##################
-
- Metric:
- Train:
- Eval:
- - TopkAcc:
- topk: [1, 5]
Encontre ferramentas -> train.py na pasta PaddleClas. Inicializar o Swanlab
- # Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
-
- from __future__ import absolute_import
- from __future__ import division
- from __future__ import print_function
- import os
- import sys
-
- __dir__ = os.path.dirname(os.path.abspath(__file__))
- sys.path.append(os.path.abspath(os.path.join(__dir__, '../')))
-
- from ppcls.utils import config
- from ppcls.engine.engine import Engine
- import swanlab
- # -*- coding: utf-8 -*-
-
- if __name__ == "__main__":
- args = config.parse_args()
- config = config.get_config(
- args.config, overrides=args.override, show=False)
- config.profiler_options = args.profiler_options
- engine = Engine(config, mode="train")
-
- ## 初始化swanlab
- swanlab.init(
- experiment_name="Swanlab_ResNet50_PaddleClas",
- description="Train ResNet50 for weeds classification.",
- project="Swanhub_Weeds_Classification",
- config={
- "model": "ResNet50",
- "optim": "Adam",
- "lr": 0.001,
- "batch_size": 64,
- "num_epochs": 100,
- "num_class": 9,
- }
- )
- engine.train()
Encontre ppcls-->engine-->train-->utils.py em PaddleClas e adicione o seguinte código:
- swanlab.log({"train_lr_msg": lr_msg.split(": ")[1]}) #
- swanlab.log({"train_CELoss": metric_msg.split(",")[0].split(': ')[1]}) ##
- swanlab.log({'train_loss': metric_msg.split(",")[1].split(': ')[1]})
Encontre ppcls-->engine-->engine.py na pasta PaddleClas e adicione o seguinte código:
swanlab.log({'best_metric': best_metric.get('metric')})
Digite o seguinte comando no console:
python -m paddle.distributed.launch tools/train.py -c ./ppcls/configs/ImageNet/Res2Net/Res2Net50_14w_8s.yaml
Veja detalhes do experimento no swanlab
Os resultados experimentais são os seguintes:
Veja resultados experimentais no swanlab
Digite o seguinte código no console:
python tools/infer.py -c ./ppcls/configs/ImageNet/Res2Net/Res2Net50_14w_8s.yaml -o Infer.infer_imgs=./DeepWeeds/infer/01.jpg -o Global.pretrained_model=./output/Res2Net50_14w_8s/best_model
Primeiro encontre ppcls-->configs-->ImageNet-->DarkNet-->DarkNet53.yaml na pasta PaddleClas.
Modifique épocas para 100, categoria class_num para 9, caminho da imagem de treinamento, caminho da imagem de verificação e arquivo de rótulo, respectivamente. Um total de 7 alterações foram feitas.
- # global configs
- Global:
- checkpoints: null
- pretrained_model: null
- output_dir: ./output/
- device: gpu
- save_interval: 1
- eval_during_train: True
- eval_interval: 1
- epochs: 100
- print_batch_step: 10
- use_visualdl: False
- # used for static mode and model export
- image_shape: [3, 256, 256]
- save_inference_dir: ./inference
-
- # model architecture
- Arch:
- name: DarkNet53
- class_num: 9
-
- # loss function config for traing/eval process
- Loss:
- Train:
- - CELoss:
- weight: 1.0
- epsilon: 0.1
- Eval:
- - CELoss:
- weight: 1.0
-
-
- Optimizer:
- name: Momentum
- momentum: 0.9
- lr:
- name: Cosine
- learning_rate: 0.1
- regularizer:
- name: 'L2'
- coeff: 0.0001
-
-
- # data loader for train and eval
- DataLoader:
- Train:
- dataset:
- name: ImageNetDataset
- image_root: F:/datasets/DeepWeeds/images
- cls_label_path: F:/datasets/DeepWeeds/train.txt
- transform_ops:
- - DecodeImage:
- to_rgb: True
- channel_first: False
- - RandCropImage:
- size: 256
- - RandFlipImage:
- flip_code: 1
- - NormalizeImage:
- scale: 1.0/255.0
- mean: [0.485, 0.456, 0.406]
- std: [0.229, 0.224, 0.225]
- order: ''
- batch_transform_ops:
- - MixupOperator:
- alpha: 0.2
-
- sampler:
- name: DistributedBatchSampler
- batch_size: 64
- drop_last: False
- shuffle: True
- loader:
- num_workers: 4
- use_shared_memory: True
-
- Eval:
- dataset:
- name: ImageNetDataset
- image_root: F:/datasets/DeepWeeds/images
- cls_label_path: F:/datasets/DeepWeeds/val.txt
- transform_ops:
- - DecodeImage:
- to_rgb: True
- channel_first: False
- - ResizeImage:
- resize_short: 292
- - CropImage:
- size: 256
- - NormalizeImage:
- scale: 1.0/255.0
- mean: [0.485, 0.456, 0.406]
- std: [0.229, 0.224, 0.225]
- order: ''
- sampler:
- name: DistributedBatchSampler
- batch_size: 64
- drop_last: False
- shuffle: False
- loader:
- num_workers: 4
- use_shared_memory: True
-
- Infer:
- infer_imgs: docs/images/inference_deployment/whl_demo.jpg
- batch_size: 10
- transforms:
- - DecodeImage:
- to_rgb: True
- channel_first: False
- - ResizeImage:
- resize_short: 292
- - CropImage:
- size: 256
- - NormalizeImage:
- scale: 1.0/255.0
- mean: [0.485, 0.456, 0.406]
- std: [0.229, 0.224, 0.225]
- order: ''
- - ToCHWImage:
- PostProcess:
- name: Topk
- topk: 5
- class_id_map_file: F:/datasets/DeepWeeds/classnames
-
- Metric:
- Train:
- Eval:
- - TopkAcc:
- topk: [1, 5]
Encontre ferramentas -> train.py na pasta PaddleClas. Modificar inicialização do swanlab
- # Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
-
- from __future__ import absolute_import
- from __future__ import division
- from __future__ import print_function
- import os
- import sys
-
- __dir__ = os.path.dirname(os.path.abspath(__file__))
- sys.path.append(os.path.abspath(os.path.join(__dir__, '../')))
-
- from ppcls.utils import config
- from ppcls.engine.engine import Engine
- import swanlab
- # -*- coding: utf-8 -*-
-
- if __name__ == "__main__":
- args = config.parse_args()
- config = config.get_config(
- args.config, overrides=args.override, show=False)
- config.profiler_options = args.profiler_options
- engine = Engine(config, mode="train")
-
- ## 初始化swanlab
- swanlab.init(
- experiment_name="Swanlab_DrakNet53_PaddleClas",
- description="Train DarkNet53 for weeds classification.",
- project="Swanhub_Weeds_Classification",
- config={
- "model": "DarkNet53",
- "optim": "Adam",
- "lr": 0.001,
- "batch_size": 64,
- "num_epochs": 100,
- "num_class": 9,
- }
- )
- engine.train()
Digite o seguinte comando no console:
python -m paddle.distributed.launch tools/train.py -c ./ppcls/configs/ImageNet/DarkNet/DarknetNet53.yaml
Veja detalhes do experimento no swanlab
Os resultados experimentais são os seguintes:
Digite o seguinte código no console:
python tools/infer.py -c ./ppcls/configs/ImageNet/DarkNet/DarkNet53.yaml -o Infer.infer_imgs=./DeepWeeds/infer/01.jpg -o Global.pretrained_model=./output/DarkNet53/best_model
4.5 Exibição de resultados do Swanlab
Como pode ser visto na figura, o modelo ResNet50 tem desempenho melhor que o modelo DarkNet53, e o swanlab fornece uma função de gráfico de comparação conveniente.
Continua. . .
Continua. . .