2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Rikkaruohot ovat yksi suurimmista ongelmista maataloudessa, ja ne uhkaavat vakavasti sadon kasvua ja satoa. Perinteiset manuaaliset tunnistus- ja hallintamenetelmät ovat tehottomia ja epätarkkoja, joten maatalouden tuotannon tehokkuuden ja laadun parantamiseksi tarvitaan kehittynyttä tietokonenäkötekniikkaa. Syväoppimismallina ResNet hoitaa hyvin monimutkaisia kuvaluokitustehtäviä. Se ei ainoastaan ratkaise tehokkaasti monimuotoisten ja monimutkaisten rikkakasvien ongelmaa viljelysmailla, vaan myös edistää älykkään maatalouden kehitystä ja vähentää riippuvuutta kemiallisista torjunta-aineista kestävää maatalouden kehitystä. Käyttämällä ResNetiä rikkakasvien luokittelussa voimme tarjota viljelijöille älykkäämpiä ja tarkempia maatalouden hallintaratkaisuja, edistää maataloustuotannon tehokkuutta ja maatalousteollisuuden modernisointia. Siksi tämä projekti käyttää paikallistettua viitekehystä PaddleClas+Swanlab+Gradio+Swanhub rikkakasvien luokituskokeiden suorittamiseen.
PaddlePaddle on Baidun kehittämä yritystason syväoppimisalusta, joka on suunniteltu tukemaan koko prosessin syväoppimissovelluksia mallinkehityksestä käyttöönottoon. Se tarjoaa runsaasti työkaluja ja kirjastoja tukemaan erilaisia syvällisiä oppimistehtäviä, kuten kuvankäsittelyä, luonnollisen kielen käsittelyä, puheentunnistusta jne.Mela Mela
PaddleClas on työkalukirjasto, jota käytetään erityisesti kuvan luokittelutehtäviin Paddle-kehyksessä. Se tarjoaa täydellisen joukon päästä päähän -ratkaisuja, mukaan lukien tietojenkäsittelyn, mallin määrittelyn, koulutuksen, arvioinnin ja käyttöönoton, jotka on suunniteltu auttamaan kehittäjiä nopeasti rakentamaan ja ottamaan käyttöön tehokkaita kuvien luokitusmalleja.PaddleClas
SwanLab on avoimen lähdekoodin kevyt tekoälykokeilujen seurantatyökalu, joka parantaa ML-kokeilujen seurantaa ja yhteistyökokemusta tarjoamalla ystävällisen API:n ja yhdistämällä hyperparametrien seurannan, indikaattorien tallennuksen, online-yhteistyön ja muita toimintoja.Tervetuloa SwanLabin viralliseen dokumentaatioon
Swanhub on Geek Studion kehittämä avoimen lähdekoodin yhteistyö- ja jakamisyhteisö. Se tarjoaa tekoälykehittäjille toimintoja, kuten tekoälymallin isännöinnin, koulutustiedot, mallitulosten näyttämisen ja nopean API-käyttöönoton.Tervetuloa Swanhubiin
Gradio on avoimen lähdekoodin Python-kirjasto, joka on suunniteltu auttamaan koneoppimisen parissa työskenteleviä datatieteilijöitä, tutkijoita ja kehittäjiä luomaan ja jakamaan nopeasti käyttöliittymiä koneoppimismalleille.Gradio
Asenna seuraavat 3 kirjastoa:
- paddle
- swanlab
- gradio
Asennuskomento:
pip install paddle swanlab gradio
Rikkakasvien luokitusaineisto: DeepWeeds
- DeepWeeds
- --images
- ----1.jpg
- ----2.jpg
- --train.txt
- --val.txt
- --test.txt
- --classnames.txt
Niiden tehtävät ja merkitys:
1. DeepWeeds-kansio: tähän kansioon tallennetaan kuvakansiokuvia, harjoitussarjan testisarjan vahvistussarjatiedostoja ja tarratiedostoja
2. Images-kansio: Tätä kansiota käytetään koulutus-, testaus- ja vahvistuskuvakansioiden tallentamiseen.
3. train.txt-, val.txt-, test.txt-tiedostot: Tätä tiedostoa käytetään koulutus-, testaus- ja vahvistusjoukkojen kuvapolkujen ja luokat tallentamiseen.
4. luokkanimitiedosto: käytetään luokkatarrojen tallentamiseen
Mallin linkki:PaddleClas malli
Purkamisen jälkeen saat PaddleClas-kansion.
Luo app.py PaddleClas-kansioon.
Mitä se tekee: Suorita skripti, joka suorittaa Gradio Demon
Etsi ensin ppcls-->configs-->ImageNet-->Res2Net-->Res2Net50_14w_8s.yaml PaddleClas-kansiosta.
Muuta epookit arvoon 100, kategorian luokan_numero arvoon 9, koulutuskuvapolkua, vahvistuskuvapolkua ja tarratiedostoa. Muutoksia tehtiin yhteensä 7 kappaletta.
- # 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]
Etsi työkalut-->train.py PaddleClas-kansiosta. Alusta 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()
Etsi ppcls-->engine-->train-->utils.py PaddleClasista ja lisää seuraava koodi:
- 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]})
Etsi ppcls-->engine-->engine.py PaddleClas-kansiosta ja lisää seuraava koodi:
swanlab.log({'best_metric': best_metric.get('metric')})
Kirjoita konsoliin seuraava komento:
python -m paddle.distributed.launch tools/train.py -c ./ppcls/configs/ImageNet/Res2Net/Res2Net50_14w_8s.yaml
Katso kokeen tiedot swanlabissa
Kokeen tulokset ovat seuraavat:
Katso kokeelliset tulokset swanlabissa
Syötä seuraava koodi konsoliin:
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
Etsi ensin ppcls-->configs-->ImageNet-->DarkNet-->DarkNet53.yaml PaddleClas-kansiosta.
Muuta epookit arvoon 100, kategorian luokan_numero arvoon 9, koulutuskuvapolkua, vahvistuskuvapolkua ja tarratiedostoa. Muutoksia tehtiin yhteensä 7 kappaletta.
- # 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]
Etsi työkalut-->train.py PaddleClas-kansiosta. Muokkaa alustus 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()
Kirjoita konsoliin seuraava komento:
python -m paddle.distributed.launch tools/train.py -c ./ppcls/configs/ImageNet/DarkNet/DarknetNet53.yaml
Katso kokeen tiedot swanlabissa
Kokeen tulokset ovat seuraavat:
Syötä seuraava koodi konsoliin:
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 Swanlabin tulosnäyttö
Kuten kuvasta näkyy, ResNet50-malli toimii paremmin kuin DarkNet53-malli, ja swanlab tarjoaa kätevän vertailukaaviotoiminnon.
Jatkuu. . .
Jatkuu. . .