le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Le erbe infestanti rappresentano uno dei maggiori problemi in agricoltura e rappresentano una seria minaccia per la crescita e la resa dei raccolti. I tradizionali metodi manuali di identificazione e gestione sono inefficienti e imprecisi, pertanto è necessaria una tecnologia avanzata di visione artificiale per migliorare l’efficienza e la qualità della produzione agricola. Come modello di deep learning, ResNet si comporta bene nella gestione di compiti complessi di classificazione delle immagini. Non solo può risolvere efficacemente il problema delle erbe infestanti diverse e complesse nei terreni agricoli, ma anche promuovere lo sviluppo di un'agricoltura intelligente e ridurre la dipendenza dai pesticidi chimici dello sviluppo agricolo sostenibile. Utilizzando ResNet per la classificazione delle infestanti, possiamo fornire agli agricoltori soluzioni di gestione agricola più intelligenti e accurate, promuovere il miglioramento dell'efficienza della produzione agricola e la modernizzazione del settore agricolo. Pertanto, questo progetto utilizza il framework localizzato PaddleClas+Swanlab+Gradio+Swanhub per condurre esperimenti di classificazione delle erbe infestanti.
PaddlePaddle è una piattaforma di deep learning di livello aziendale sviluppata da Baidu, progettata per supportare applicazioni di deep learning a processo completo, dallo sviluppo del modello alla distribuzione. Fornisce una vasta gamma di strumenti e librerie per supportare una varietà di attività di deep learning, tra cui l'elaborazione delle immagini, l'elaborazione del linguaggio naturale, il riconoscimento vocale, ecc.PagaiaPagaia
PaddleClas è una libreria di strumenti utilizzata specificamente per attività di classificazione delle immagini nel framework Paddle. Fornisce un set completo di soluzioni end-to-end, tra cui elaborazione dei dati, definizione di modelli, formazione, valutazione e implementazione, progettate per aiutare gli sviluppatori a creare e implementare rapidamente modelli di classificazione delle immagini efficienti.PagaiaClas
SwanLab è uno strumento di monitoraggio degli esperimenti AI leggero e open source che migliora il monitoraggio degli esperimenti ML e l'esperienza di collaborazione fornendo un'API intuitiva e combinando il monitoraggio degli iperparametri, la registrazione degli indicatori, la collaborazione online e altre funzioni.Benvenuti nella documentazione ufficiale SwanLab |
Swanhub è una comunità di collaborazione e condivisione di modelli open source sviluppata da Geek Studio. Fornisce agli sviluppatori di intelligenza artificiale funzioni come hosting di modelli di intelligenza artificiale, record di formazione, visualizzazione dei risultati dei modelli e distribuzione rapida delle API.Benvenuti su Swanhub
Gradio è una libreria Python open source progettata per aiutare data scientist, ricercatori e sviluppatori che lavorano nel campo del machine learning a creare e condividere rapidamente interfacce utente per modelli di machine learning.Grado
Installa le seguenti 3 librerie:
- paddle
- swanlab
- gradio
Comando di installazione:
pip install paddle swanlab gradio
Set di dati sulla classificazione delle infestanti: DeepWeeds
- DeepWeeds
- --images
- ----1.jpg
- ----2.jpg
- --train.txt
- --val.txt
- --test.txt
- --classnames.txt
Le loro rispettive funzioni e significato:
1. Cartella DeepWeeds: questa cartella viene utilizzata per archiviare le immagini delle cartelle di immagini, i file dei set di convalida dei set di test dei set di training e i file delle etichette
2. cartella immagini: questa cartella viene utilizzata per salvare le cartelle di immagini di formazione, test e verifica.
3. File train.txt, val.txt, test.txt: questo file viene utilizzato per salvare i percorsi delle immagini e le categorie dei set di training, test e convalida.
4. file dei nomi delle classi: utilizzato per salvare le etichette delle categorie
Collegamento al modello:Modello PaddleClas
Dopo aver decompresso, otterrai la cartella PaddleClas.
Crea app.py nella cartella PaddleClas.
Ciò che fa è: eseguire lo script che esegue Gradio Demo
Per prima cosa trova ppcls-->configs-->ImageNet-->Res2Net-->Res2Net50_14w_8s.yaml nella cartella PaddleClas.
Modifica le epoche su 100, la categoria class_num su 9, il percorso dell'immagine di training, il percorso dell'immagine di verifica e il file di etichetta rispettivamente. Sono state apportate 7 modifiche in totale.
- # 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]
Trova tools-->train.py nella cartella PaddleClas. Inizializza 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()
Trova ppcls-->engine-->train-->utils.py in PaddleClas e aggiungi il seguente codice:
- 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]})
Trova ppcls-->engine-->engine.py nella cartella PaddleClas e aggiungi il seguente codice:
swanlab.log({'best_metric': best_metric.get('metric')})
Immettere il seguente comando sulla console:
python -m paddle.distributed.launch tools/train.py -c ./ppcls/configs/ImageNet/Res2Net/Res2Net50_14w_8s.yaml
Visualizza i dettagli dell'esperimento in swanlab
I risultati sperimentali sono i seguenti:
Visualizza i risultati sperimentali in swanlab
Inserisci il seguente codice nella 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
Per prima cosa trova ppcls-->configs-->ImageNet-->DarkNet-->DarkNet53.yaml nella cartella PaddleClas.
Modifica le epoche su 100, la categoria class_num su 9, il percorso dell'immagine di training, il percorso dell'immagine di verifica e il file di etichetta rispettivamente. Sono state apportate 7 modifiche in totale.
- # 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]
Trova tools-->train.py nella cartella PaddleClas. Modifica l'inizializzazione 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()
Immettere il seguente comando sulla console:
python -m paddle.distributed.launch tools/train.py -c ./ppcls/configs/ImageNet/DarkNet/DarknetNet53.yaml
Visualizza i dettagli dell'esperimento in swanlab
I risultati sperimentali sono i seguenti:
Inserisci il seguente codice nella 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 Visualizzazione dei risultati Swanlab
Come si può vedere dalla figura, il modello ResNet50 funziona meglio del modello DarkNet53 e swanlab fornisce una comoda funzione di grafico di confronto.
Continua. . .
Continua. . .