Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Las malezas son uno de los principales problemas en la agricultura y representan una seria amenaza para el crecimiento y el rendimiento de los cultivos. Los métodos tradicionales de identificación y gestión manuales son ineficientes e inexactos, por lo que se necesita tecnología avanzada de visión por computadora para mejorar la eficiencia y la calidad de la producción agrícola. Como modelo de aprendizaje profundo, ResNet tiene un buen desempeño en el manejo de tareas complejas de clasificación de imágenes. No solo puede resolver eficazmente el problema de las malezas diversas y complejas en las tierras agrícolas, sino que también promueve el desarrollo de la agricultura inteligente y reduce la dependencia de los pesticidas químicos. del desarrollo agrícola sostenible. Al utilizar ResNet para la clasificación de malezas, podemos brindar a los agricultores soluciones de manejo agrícola más inteligentes y precisas, promover la mejora de la eficiencia de la producción agrícola y la modernización de la industria agrícola. Por lo tanto, este proyecto utiliza el marco localizado PaddleClas+Swanlab+Gradio+Swanhub para realizar experimentos de clasificación de malezas.
PaddlePaddle es una plataforma de aprendizaje profundo de nivel empresarial desarrollada por Baidu, diseñada para respaldar todo el proceso de aplicaciones de aprendizaje profundo, desde el desarrollo del modelo hasta la implementación. Proporciona una gran cantidad de herramientas y bibliotecas para respaldar una variedad de tareas de aprendizaje profundo, incluido el procesamiento de imágenes, el procesamiento del lenguaje natural, el reconocimiento de voz, etc.RemoRemo
PaddleClas es una biblioteca de herramientas que se utiliza específicamente para tareas de clasificación de imágenes en el marco Paddle. Proporciona un conjunto completo de soluciones de extremo a extremo, que incluyen procesamiento de datos, definición de modelos, capacitación, evaluación e implementación, diseñadas para ayudar a los desarrolladores a construir e implementar rápidamente modelos de clasificación de imágenes eficientes.Clase de pádel
SwanLab es una herramienta de seguimiento de experimentos de IA liviana y de código abierto que mejora el seguimiento de experimentos de aprendizaje automático y la experiencia de colaboración al proporcionar una API amigable y combinar seguimiento de hiperparámetros, registro de indicadores, colaboración en línea y otras funciones.Bienvenido a SwanLab | Documentación oficial de SwanLab
Swanhub es una comunidad de colaboración e intercambio de modelos de código abierto desarrollada por Geek Studio. Proporciona a los desarrolladores de IA funciones como alojamiento de modelos de IA, registros de capacitación, visualización de resultados de modelos e implementación rápida de API.Bienvenido a Swanhub
Gradio es una biblioteca Python de código abierto diseñada para ayudar a los científicos, investigadores y desarrolladores de datos que trabajan en el campo del aprendizaje automático a crear y compartir rápidamente interfaces de usuario para modelos de aprendizaje automático.Grado
Instale las siguientes 3 bibliotecas:
- paddle
- swanlab
- gradio
Comando de instalación:
pip install paddle swanlab gradio
Conjunto de datos de clasificación de malezas: DeepWeeds
- DeepWeeds
- --images
- ----1.jpg
- ----2.jpg
- --train.txt
- --val.txt
- --test.txt
- --classnames.txt
Sus respectivas funciones y significado:
1. Carpeta DeepWeeds: esta carpeta se utiliza para almacenar imágenes de carpetas de imágenes, archivos de conjuntos de pruebas de conjuntos de entrenamiento y archivos de etiquetas.
2. Carpeta de imágenes: esta carpeta se utiliza para guardar carpetas de imágenes de capacitación, pruebas y verificación.
3. Archivos train.txt, val.txt, test.txt: este archivo se utiliza para guardar las rutas de imágenes y las categorías de los conjuntos de entrenamiento, prueba y validación.
4. archivo de nombres de clases: se utiliza para guardar etiquetas de categorías
Enlace del modelo:Modelo PaddleClas
Después de descomprimir, obtendrás la carpeta PaddleClas.
Cree app.py en la carpeta PaddleClas.
Lo que hace es: ejecutar el script que ejecuta Gradio Demo
Primero busque ppcls-->configs-->ImageNet-->Res2Net-->Res2Net50_14w_8s.yaml en la carpeta PaddleClas.
Modifique las épocas a 100, la categoría class_num a 9, la ruta de la imagen de entrenamiento, la ruta de la imagen de verificación y el archivo de etiqueta respectivamente. Se realizaron un total de 7 cambios.
- # 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]
Busque herramientas-->train.py en la carpeta PaddleClas. Inicializar 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()
Busque ppcls-->engine-->train-->utils.py en PaddleClas y agregue el siguiente 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]})
Busque ppcls-->engine-->engine.py en la carpeta PaddleClas y agregue el siguiente código:
swanlab.log({'best_metric': best_metric.get('metric')})
Ingrese el siguiente comando en la consola:
python -m paddle.distributed.launch tools/train.py -c ./ppcls/configs/ImageNet/Res2Net/Res2Net50_14w_8s.yaml
Ver detalles del experimento en swanlab
Los resultados experimentales son los siguientes:
Ver resultados experimentales en swanlab
Ingrese el siguiente código en la consola:
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
Primero busque ppcls-->configs-->ImageNet-->DarkNet-->DarkNet53.yaml en la carpeta PaddleClas.
Modifique las épocas a 100, la categoría class_num a 9, la ruta de la imagen de entrenamiento, la ruta de la imagen de verificación y el archivo de etiqueta respectivamente. Se realizaron un total de 7 cambios.
- # 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]
Busque herramientas-->train.py en la carpeta PaddleClas. Modificar inicialización 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()
Ingrese el siguiente comando en la consola:
python -m paddle.distributed.launch tools/train.py -c ./ppcls/configs/ImageNet/DarkNet/DarknetNet53.yaml
Ver detalles del experimento en swanlab
Los resultados experimentales son los siguientes:
Ingrese el siguiente código en la consola:
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 Visualización de resultados de Swanlab
Como se puede ver en la figura, el modelo ResNet50 funciona mejor que el modelo DarkNet53 y swanlab proporciona una función de gráfico comparativo conveniente.
Continuará. . .
Continuará. . .