Teknologian jakaminen

Kotimainen runko PaddleClas yhdistettynä Swanlabiin rikkakasvien luokitukseen

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Projektin esittely

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

2. Valmisteluosa

2.1 Ympäristöasennus

Asenna seuraavat 3 kirjastoa:

  1. paddle
  2. swanlab
  3. gradio

Asennuskomento:

pip install paddle swanlab gradio

2.2 Lataa tietojoukko

Rikkakasvien luokitusaineisto: DeepWeeds

  1. DeepWeeds
  2. --images
  3. ----1.jpg
  4. ----2.jpg
  5. --train.txt
  6. --val.txt
  7. --test.txt
  8. --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

2.3 Lataa PaddleClas-kehys

Mallin linkki:PaddleClas malli

Purkamisen jälkeen saat PaddleClas-kansion.

2.4 Luo tiedostohakemisto

Luo app.py PaddleClas-kansioon.

Mitä se tekee: Suorita skripti, joka suorittaa Gradio Demon

3. ResNet mallikoulutus

3.1 Muokkaa kokoonpanoa

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.

  1. # global configs
  2. Global:
  3. checkpoints: null
  4. pretrained_model: null
  5. output_dir: ./output/
  6. device: gpu
  7. save_interval: 1
  8. eval_during_train: True
  9. eval_interval: 1
  10. epochs: 100###########################1##############################
  11. print_batch_step: 10
  12. use_visualdl: False
  13. # used for static mode and model export
  14. image_shape: [3, 224, 224]
  15. save_inference_dir: ./inference
  16. # model architecture
  17. Arch:
  18. name: Res2Net50_14w_8s
  19. class_num: 9############################2##############################
  20. # loss function config for traing/eval process
  21. Loss:
  22. Train:
  23. - CELoss:
  24. weight: 1.0
  25. epsilon: 0.1
  26. Eval:
  27. - CELoss:
  28. weight: 1.0
  29. Optimizer:
  30. name: Momentum
  31. momentum: 0.9
  32. lr:
  33. name: Cosine
  34. learning_rate: 0.1
  35. regularizer:
  36. name: 'L2'
  37. coeff: 0.0001
  38. # data loader for train and eval
  39. DataLoader:
  40. Train:
  41. dataset:
  42. name: ImageNetDataset
  43. image_root: ./weeds/images/#################3#######################
  44. cls_label_path: ./weeds/train.txt###########4########################
  45. transform_ops:
  46. - DecodeImage:
  47. to_rgb: True
  48. channel_first: False
  49. - RandCropImage:
  50. size: 224
  51. - RandFlipImage:
  52. flip_code: 1
  53. - NormalizeImage:
  54. scale: 1.0/255.0
  55. mean: [0.485, 0.456, 0.406]
  56. std: [0.229, 0.224, 0.225]
  57. order: ''
  58. batch_transform_ops:
  59. - MixupOperator:
  60. alpha: 0.2
  61. sampler:
  62. name: DistributedBatchSampler
  63. batch_size: 64
  64. drop_last: False
  65. shuffle: True
  66. loader:
  67. num_workers: 4
  68. use_shared_memory: True
  69. Eval:
  70. dataset:
  71. name: ImageNetDataset
  72. image_root: ./DeepWeeds/images/###############5#######################
  73. cls_label_path: ./DeepWeeds/val.txt###########6########################
  74. transform_ops:
  75. - DecodeImage:
  76. to_rgb: True
  77. channel_first: False
  78. - ResizeImage:
  79. resize_short: 256
  80. - CropImage:
  81. size: 224
  82. - NormalizeImage:
  83. scale: 1.0/255.0
  84. mean: [0.485, 0.456, 0.406]
  85. std: [0.229, 0.224, 0.225]
  86. order: ''
  87. sampler:
  88. name: DistributedBatchSampler
  89. batch_size: 64
  90. drop_last: False
  91. shuffle: False
  92. loader:
  93. num_workers: 4
  94. use_shared_memory: True
  95. Infer:
  96. infer_imgs: docs/images/inference_deployment/whl_demo.jpg
  97. batch_size: 10
  98. transforms:
  99. - DecodeImage:
  100. to_rgb: True
  101. channel_first: False
  102. - ResizeImage:
  103. resize_short: 256
  104. - CropImage:
  105. size: 224
  106. - NormalizeImage:
  107. scale: 1.0/255.0
  108. mean: [0.485, 0.456, 0.406]
  109. std: [0.229, 0.224, 0.225]
  110. order: ''
  111. - ToCHWImage:
  112. PostProcess:
  113. name: Topk
  114. topk: 5
  115. class_id_map_file: ./DeepWeeds/classnaems.txt###########7##################
  116. Metric:
  117. Train:
  118. Eval:
  119. - TopkAcc:
  120. topk: [1, 5]

3.2 Swanlabin käyttö

Etsi työkalut-->train.py PaddleClas-kansiosta. Alusta swanlab

  1. # Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License");
  4. # you may not use this file except in compliance with the License.
  5. # You may obtain a copy of the License at
  6. #
  7. # http://www.apache.org/licenses/LICENSE-2.0
  8. #
  9. # Unless required by applicable law or agreed to in writing, software
  10. # distributed under the License is distributed on an "AS IS" BASIS,
  11. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. # See the License for the specific language governing permissions and
  13. # limitations under the License.
  14. from __future__ import absolute_import
  15. from __future__ import division
  16. from __future__ import print_function
  17. import os
  18. import sys
  19. __dir__ = os.path.dirname(os.path.abspath(__file__))
  20. sys.path.append(os.path.abspath(os.path.join(__dir__, '../')))
  21. from ppcls.utils import config
  22. from ppcls.engine.engine import Engine
  23. import swanlab
  24. # -*- coding: utf-8 -*-
  25. if __name__ == "__main__":
  26. args = config.parse_args()
  27. config = config.get_config(
  28. args.config, overrides=args.override, show=False)
  29. config.profiler_options = args.profiler_options
  30. engine = Engine(config, mode="train")
  31. ## 初始化swanlab
  32. swanlab.init(
  33. experiment_name="Swanlab_ResNet50_PaddleClas",
  34. description="Train ResNet50 for weeds classification.",
  35. project="Swanhub_Weeds_Classification",
  36. config={
  37. "model": "ResNet50",
  38. "optim": "Adam",
  39. "lr": 0.001,
  40. "batch_size": 64,
  41. "num_epochs": 100,
  42. "num_class": 9,
  43. }
  44. )
  45. engine.train()

Etsi ppcls-->engine-->train-->utils.py PaddleClasista ja lisää seuraava koodi:

  1. swanlab.log({"train_lr_msg": lr_msg.split(": ")[1]}) #
  2. swanlab.log({"train_CELoss": metric_msg.split(",")[0].split(': ')[1]}) ##
  3. 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')})

3.3 Mallikoulutus

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

3.4 Mallin päättely

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

4. DarkNet53 mallikoulutus

4.1 Muokkaa asetuksia

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.

  1. # global configs
  2. Global:
  3. checkpoints: null
  4. pretrained_model: null
  5. output_dir: ./output/
  6. device: gpu
  7. save_interval: 1
  8. eval_during_train: True
  9. eval_interval: 1
  10. epochs: 100
  11. print_batch_step: 10
  12. use_visualdl: False
  13. # used for static mode and model export
  14. image_shape: [3, 256, 256]
  15. save_inference_dir: ./inference
  16. # model architecture
  17. Arch:
  18. name: DarkNet53
  19. class_num: 9
  20. # loss function config for traing/eval process
  21. Loss:
  22. Train:
  23. - CELoss:
  24. weight: 1.0
  25. epsilon: 0.1
  26. Eval:
  27. - CELoss:
  28. weight: 1.0
  29. Optimizer:
  30. name: Momentum
  31. momentum: 0.9
  32. lr:
  33. name: Cosine
  34. learning_rate: 0.1
  35. regularizer:
  36. name: 'L2'
  37. coeff: 0.0001
  38. # data loader for train and eval
  39. DataLoader:
  40. Train:
  41. dataset:
  42. name: ImageNetDataset
  43. image_root: F:/datasets/DeepWeeds/images
  44. cls_label_path: F:/datasets/DeepWeeds/train.txt
  45. transform_ops:
  46. - DecodeImage:
  47. to_rgb: True
  48. channel_first: False
  49. - RandCropImage:
  50. size: 256
  51. - RandFlipImage:
  52. flip_code: 1
  53. - NormalizeImage:
  54. scale: 1.0/255.0
  55. mean: [0.485, 0.456, 0.406]
  56. std: [0.229, 0.224, 0.225]
  57. order: ''
  58. batch_transform_ops:
  59. - MixupOperator:
  60. alpha: 0.2
  61. sampler:
  62. name: DistributedBatchSampler
  63. batch_size: 64
  64. drop_last: False
  65. shuffle: True
  66. loader:
  67. num_workers: 4
  68. use_shared_memory: True
  69. Eval:
  70. dataset:
  71. name: ImageNetDataset
  72. image_root: F:/datasets/DeepWeeds/images
  73. cls_label_path: F:/datasets/DeepWeeds/val.txt
  74. transform_ops:
  75. - DecodeImage:
  76. to_rgb: True
  77. channel_first: False
  78. - ResizeImage:
  79. resize_short: 292
  80. - CropImage:
  81. size: 256
  82. - NormalizeImage:
  83. scale: 1.0/255.0
  84. mean: [0.485, 0.456, 0.406]
  85. std: [0.229, 0.224, 0.225]
  86. order: ''
  87. sampler:
  88. name: DistributedBatchSampler
  89. batch_size: 64
  90. drop_last: False
  91. shuffle: False
  92. loader:
  93. num_workers: 4
  94. use_shared_memory: True
  95. Infer:
  96. infer_imgs: docs/images/inference_deployment/whl_demo.jpg
  97. batch_size: 10
  98. transforms:
  99. - DecodeImage:
  100. to_rgb: True
  101. channel_first: False
  102. - ResizeImage:
  103. resize_short: 292
  104. - CropImage:
  105. size: 256
  106. - NormalizeImage:
  107. scale: 1.0/255.0
  108. mean: [0.485, 0.456, 0.406]
  109. std: [0.229, 0.224, 0.225]
  110. order: ''
  111. - ToCHWImage:
  112. PostProcess:
  113. name: Topk
  114. topk: 5
  115. class_id_map_file: F:/datasets/DeepWeeds/classnames
  116. Metric:
  117. Train:
  118. Eval:
  119. - TopkAcc:
  120. topk: [1, 5]

4.2 Swanlabin käyttö

Etsi työkalut-->train.py PaddleClas-kansiosta. Muokkaa alustus swanlab

  1. # Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License");
  4. # you may not use this file except in compliance with the License.
  5. # You may obtain a copy of the License at
  6. #
  7. # http://www.apache.org/licenses/LICENSE-2.0
  8. #
  9. # Unless required by applicable law or agreed to in writing, software
  10. # distributed under the License is distributed on an "AS IS" BASIS,
  11. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. # See the License for the specific language governing permissions and
  13. # limitations under the License.
  14. from __future__ import absolute_import
  15. from __future__ import division
  16. from __future__ import print_function
  17. import os
  18. import sys
  19. __dir__ = os.path.dirname(os.path.abspath(__file__))
  20. sys.path.append(os.path.abspath(os.path.join(__dir__, '../')))
  21. from ppcls.utils import config
  22. from ppcls.engine.engine import Engine
  23. import swanlab
  24. # -*- coding: utf-8 -*-
  25. if __name__ == "__main__":
  26. args = config.parse_args()
  27. config = config.get_config(
  28. args.config, overrides=args.override, show=False)
  29. config.profiler_options = args.profiler_options
  30. engine = Engine(config, mode="train")
  31. ## 初始化swanlab
  32. swanlab.init(
  33. experiment_name="Swanlab_DrakNet53_PaddleClas",
  34. description="Train DarkNet53 for weeds classification.",
  35. project="Swanhub_Weeds_Classification",
  36. config={
  37. "model": "DarkNet53",
  38. "optim": "Adam",
  39. "lr": 0.001,
  40. "batch_size": 64,
  41. "num_epochs": 100,
  42. "num_class": 9,
  43. }
  44. )
  45. engine.train()

4.3 Mallikoulutus

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:

4.4 Mallin päättely

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.

5. Gradio-demo

Jatkuu. . .

6. Swanhub lataa ja esittelee demon

Jatkuu. . .