2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Unkräuter sind eines der größten Probleme in der Landwirtschaft und stellen eine ernsthafte Bedrohung für das Pflanzenwachstum und den Ertrag dar. Herkömmliche manuelle Identifizierungs- und Managementmethoden sind ineffizient und ungenau. Daher ist fortschrittliche Computer-Vision-Technologie erforderlich, um die Effizienz und Qualität der landwirtschaftlichen Produktion zu verbessern. Als Deep-Learning-Modell eignet sich ResNet gut für die Bewältigung komplexer Bildklassifizierungsaufgaben. Es kann nicht nur das Problem vielfältiger und komplexer Unkräuter in landwirtschaftlichen Flächen effektiv lösen, sondern auch die Entwicklung einer intelligenten Landwirtschaft fördern und die Abhängigkeit von chemischen Pestiziden verringern einer nachhaltigen landwirtschaftlichen Entwicklung. Durch die Verwendung von ResNet zur Unkrautklassifizierung können wir Landwirten intelligentere und genauere landwirtschaftliche Managementlösungen bieten, die Verbesserung der landwirtschaftlichen Produktionseffizienz und die Modernisierung der Agrarindustrie fördern. Daher verwendet dieses Projekt das lokalisierte Framework PaddleClas+Swanlab+Gradio+Swanhub, um Experimente zur Unkrautklassifizierung durchzuführen.
PaddlePaddle ist eine von Baidu entwickelte Deep-Learning-Plattform auf Unternehmensebene, die Deep-Learning-Anwendungen im gesamten Prozess von der Modellentwicklung bis zur Bereitstellung unterstützen soll. Es bietet eine Fülle von Tools und Bibliotheken zur Unterstützung einer Vielzahl von Deep-Learning-Aufgaben, einschließlich Bildverarbeitung, Verarbeitung natürlicher Sprache, Spracherkennung usw.PaddelPaddel
PaddleClas ist eine Werkzeugbibliothek, die speziell für Bildklassifizierungsaufgaben im Paddle-Framework verwendet wird. Es bietet einen vollständigen Satz End-to-End-Lösungen, einschließlich Datenverarbeitung, Modelldefinition, Schulung, Bewertung und Bereitstellung, die Entwicklern dabei helfen sollen, schnell effiziente Bildklassifizierungsmodelle zu erstellen und bereitzustellen.PaddelKlasse
SwanLab ist ein Open-Source-Tool zur Verfolgung von KI-Experimenten, das die Verfolgung und Zusammenarbeit von ML-Experimenten verbessert, indem es eine benutzerfreundliche API bereitstellt und Hyperparameter-Tracking, Indikatoraufzeichnung, Online-Zusammenarbeit und andere Funktionen kombiniert.Willkommen bei der offiziellen SwanLab-Dokumentation
Swanhub ist eine von Geek Studio entwickelte Open-Source-Community für die Zusammenarbeit und den Austausch von Modellen. Es bietet KI-Entwicklern Funktionen wie das Hosten von KI-Modellen, Trainingsaufzeichnungen, die Anzeige von Modellergebnissen und eine schnelle API-Bereitstellung.Willkommen bei Swanhub
Gradio ist eine Open-Source-Python-Bibliothek, die Datenwissenschaftlern, Forschern und Entwicklern, die im Bereich maschinelles Lernen arbeiten, dabei helfen soll, schnell Benutzeroberflächen für Modelle für maschinelles Lernen zu erstellen und zu teilen.Gradio
Installieren Sie die folgenden 3 Bibliotheken:
- paddle
- swanlab
- gradio
Installationsbefehl:
pip install paddle swanlab gradio
Datensatz zur Unkrautklassifizierung: DeepWeeds
- DeepWeeds
- --images
- ----1.jpg
- ----2.jpg
- --train.txt
- --val.txt
- --test.txt
- --classnames.txt
Ihre jeweiligen Funktionen und Bedeutung:
1. DeepWeeds-Ordner: In diesem Ordner werden Bildordnerbilder, Trainingssatz-Testsatz-Verifizierungssatzdateien und Etikettendateien gespeichert
2. Bilderordner: Dieser Ordner wird zum Speichern von Schulungs-, Test- und Verifizierungsbildordnern verwendet.
3. Dateien train.txt, val.txt, test.txt: Diese Datei wird zum Speichern der Bildpfade und Kategorien von Trainings-, Test- und Validierungssätzen verwendet.
4. Klassennamendatei: Wird zum Speichern von Kategoriebezeichnungen verwendet
Modelllink:PaddleClas-Modell
Nach dem Entpacken erhalten Sie den PaddleClas-Ordner.
Erstellen Sie app.py im PaddleClas-Ordner.
Was es tut, ist: Führen Sie das Skript aus, das Gradio Demo ausführt
Suchen Sie zuerst ppcls-->configs-->ImageNet-->Res2Net-->Res2Net50_14w_8s.yaml im PaddleClas-Ordner.
Ändern Sie die Epochen auf 100, die Kategorie class_num auf 9, den Trainingsbildpfad, den Verifizierungsbildpfad bzw. die Etikettendatei. Insgesamt wurden 7 Änderungen vorgenommen.
- # 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]
Suchen Sie tools-->train.py im PaddleClas-Ordner. Swanlab initialisieren
- # 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()
Suchen Sie in PaddleClas nach ppcls-->engine-->train-->utils.py und fügen Sie den folgenden Code hinzu:
- 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]})
Suchen Sie im PaddleClas-Ordner nach ppcls-->engine-->engine.py und fügen Sie den folgenden Code hinzu:
swanlab.log({'best_metric': best_metric.get('metric')})
Geben Sie den folgenden Befehl auf der Konsole ein:
python -m paddle.distributed.launch tools/train.py -c ./ppcls/configs/ImageNet/Res2Net/Res2Net50_14w_8s.yaml
Details zum Experiment in Swanlab anzeigen
Die experimentellen Ergebnisse sind wie folgt:
Sehen Sie sich experimentelle Ergebnisse in Swanlab an
Geben Sie den folgenden Code in die Konsole ein:
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
Suchen Sie zuerst ppcls-->configs-->ImageNet-->DarkNet-->DarkNet53.yaml im PaddleClas-Ordner.
Ändern Sie die Epochen auf 100, die Kategorie class_num auf 9, den Trainingsbildpfad, den Verifizierungsbildpfad bzw. die Etikettendatei. Insgesamt wurden 7 Änderungen vorgenommen.
- # 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]
Suchen Sie tools-->train.py im PaddleClas-Ordner. Ändern Sie die Initialisierung von 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()
Geben Sie den folgenden Befehl auf der Konsole ein:
python -m paddle.distributed.launch tools/train.py -c ./ppcls/configs/ImageNet/DarkNet/DarknetNet53.yaml
Details zum Experiment in Swanlab anzeigen
Die experimentellen Ergebnisse sind wie folgt:
Geben Sie den folgenden Code in die Konsole ein:
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 Swanlab-Ergebnisanzeige
Wie aus der Abbildung ersichtlich ist, ist die Leistung des ResNet50-Modells besser als das DarkNet53-Modell, und Swanlab bietet eine praktische Vergleichsdiagrammfunktion.
Fortgesetzt werden. . .
Fortgesetzt werden. . .