моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Сорняки являются одной из основных проблем в сельском хозяйстве, создавая серьезную угрозу для роста сельскохозяйственных культур и урожайности. Традиционные методы ручной идентификации и управления неэффективны и неточны, поэтому для повышения эффективности и качества сельскохозяйственного производства необходимы передовые технологии компьютерного зрения. Как модель глубокого обучения, ResNet хорошо справляется со сложными задачами классификации изображений. Она может не только эффективно решить проблему разнообразных и сложных сорняков на сельскохозяйственных угодьях, но также способствовать развитию интеллектуального сельского хозяйства и снижению зависимости от химических пестицидов. устойчивого развития сельского хозяйства. Используя ResNet для классификации сорняков, мы можем предоставить фермерам более интеллектуальные и точные решения для управления сельским хозяйством, способствовать повышению эффективности сельскохозяйственного производства и модернизации сельскохозяйственной отрасли. Поэтому в этом проекте используется локализованная платформа PaddleClas+Swanlab+Gradio+Swanhub для проведения экспериментов по классификации сорняков.
PaddlePaddle — это платформа глубокого обучения корпоративного уровня, разработанная Baidu и предназначенная для поддержки полнопроцессных приложений глубокого обучения, от разработки модели до развертывания. Он предоставляет множество инструментов и библиотек для поддержки различных задач глубокого обучения, включая обработку изображений, обработку естественного языка, распознавание речи и т. д.ВеслоВесло
PaddleClas — это библиотека инструментов, специально используемая для задач классификации изображений в платформе Paddle. Он предоставляет полный набор комплексных решений, включая обработку данных, определение моделей, обучение, оценку и развертывание, призванных помочь разработчикам быстро создавать и развертывать эффективные модели классификации изображений.PaddleClas
SwanLab — это легкий инструмент отслеживания экспериментов с искусственным интеллектом с открытым исходным кодом, который улучшает отслеживание экспериментов ML и возможности совместной работы, предоставляя дружественный API и сочетая отслеживание гиперпараметров, запись индикаторов, онлайн-сотрудничество и другие функции.Добро пожаловать в официальную документацию SwanLab |
Swanhub — это сообщество моделей сотрудничества и обмена с открытым исходным кодом, разработанное Geek Studio. Он предоставляет разработчикам ИИ такие функции, как размещение моделей ИИ, записи обучения, отображение результатов модели и быстрое развертывание API.Добро пожаловать в Сванхаб
Gradio — это библиотека Python с открытым исходным кодом, призванная помочь ученым, исследователям и разработчикам, работающим в области машинного обучения, быстро создавать и делиться пользовательскими интерфейсами для моделей машинного обучения.Градио
Установите следующие 3 библиотеки:
- paddle
- swanlab
- gradio
Команда установки:
pip install paddle swanlab gradio
Набор данных классификации сорняков: DeepWeeds
- DeepWeeds
- --images
- ----1.jpg
- ----2.jpg
- --train.txt
- --val.txt
- --test.txt
- --classnames.txt
Их соответствующие функции и значение:
1. Папка DeepWeeds: эта папка используется для хранения изображений папок с изображениями, файлов наборов проверок набора тестов и файлов меток.
2. Папка изображений: эта папка используется для сохранения папок изображений для обучения, тестирования и проверки.
3. Файлы train.txt, val.txt, test.txt: этот файл используется для сохранения путей к изображениям и категорий наборов обучения, тестирования и проверки.
4. Файл имен классов: используется для сохранения меток категорий.
Ссылка на модель:Модель PaddleClas
После распаковки вы получите папку PaddleClas.
Создайте app.py в папке PaddleClas.
Что он делает: запускает скрипт, который запускает Gradio Demo.
Сначала найдите ppcls-->configs-->ImageNet-->Res2Net-->Res2Net50_14w_8s.yaml в папке PaddleClas.
Измените эпохи на 100, категорию class_num на 9, путь к обучающему изображению, путь к проверочному изображению и файл метки соответственно. Всего было внесено 7 изменений.
- # 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]
Найдите инструменты ->train.py в папке PaddleClas. Инициализировать лебединую лабораторию
- # 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()
Найдите ppcls-->engine-->train-->utils.py в PaddleClas и добавьте следующий код:
- 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]})
Найдите ppcls-->engine-->engine.py в папке PaddleClas и добавьте следующий код:
swanlab.log({'best_metric': best_metric.get('metric')})
Введите в консоли следующую команду:
python -m paddle.distributed.launch tools/train.py -c ./ppcls/configs/ImageNet/Res2Net/Res2Net50_14w_8s.yaml
Просмотр подробностей эксперимента в swanlab
Результаты эксперимента следующие:
Посмотреть результаты экспериментов в swanlab
Введите в консоль следующий код:
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
Сначала найдите ppcls-->configs-->ImageNet-->DarkNet-->DarkNet53.yaml в папке PaddleClas.
Измените эпохи на 100, категорию class_num на 9, путь к обучающему изображению, путь к проверочному изображению и файл метки соответственно. Всего было внесено 7 изменений.
- # 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]
Найдите инструменты ->train.py в папке PaddleClas. Изменить инициализацию 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()
Введите в консоли следующую команду:
python -m paddle.distributed.launch tools/train.py -c ./ppcls/configs/ImageNet/DarkNet/DarknetNet53.yaml
Просмотр подробностей эксперимента в swanlab
Результаты эксперимента следующие:
Введите в консоль следующий код:
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
Как видно из рисунка, модель ResNet50 работает лучше, чем модель DarkNet53, а swanlab предоставляет удобную функцию сравнительной диаграммы.
Продолжение следует. . .
Продолжение следует. . .