Κοινή χρήση τεχνολογίας

Εγχώριο πλαίσιο PaddleClas σε συνδυασμό με Swanlab για ταξινόμηση ζιζανίων

2024-07-12

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

1. Εισαγωγή έργου

Τα ζιζάνια είναι ένα από τα σημαντικότερα προβλήματα στη γεωργία, που αποτελούν σοβαρή απειλή για την ανάπτυξη και την απόδοση των καλλιεργειών. Οι παραδοσιακές χειροκίνητες μέθοδοι αναγνώρισης και διαχείρισης είναι αναποτελεσματικές και ανακριβείς, επομένως απαιτείται προηγμένη τεχνολογία υπολογιστικής όρασης για τη βελτίωση της αποτελεσματικότητας και της ποιότητας της γεωργικής παραγωγής. Ως μοντέλο βαθιάς μάθησης, το ResNet έχει καλή απόδοση στο χειρισμό σύνθετων εργασιών ταξινόμησης εικόνων. Μπορεί όχι μόνο να λύσει αποτελεσματικά το πρόβλημα των διαφορετικών και πολύπλοκων ζιζανίων σε γεωργικές εκτάσεις, αλλά και να προωθήσει την ανάπτυξη έξυπνης γεωργίας και να μειώσει την εξάρτηση από τα χημικά φυτοφάρμακα αειφόρου αγροτικής ανάπτυξης. Χρησιμοποιώντας το ResNet για ταξινόμηση ζιζανίων, μπορούμε να παρέχουμε στους αγρότες πιο έξυπνες και ακριβείς λύσεις γεωργικής διαχείρισης, να προωθήσουμε τη βελτίωση της αποδοτικότητας της γεωργικής παραγωγής και τον εκσυγχρονισμό της γεωργικής βιομηχανίας. Επομένως, αυτό το έργο χρησιμοποιεί το τοπικό πλαίσιο PaddleClas+Swanlab+Gradio+Swanhub για τη διεξαγωγή πειραμάτων ταξινόμησης ζιζανίων.

Το PaddlePaddle είναι μια πλατφόρμα βαθιάς μάθησης σε επίπεδο επιχείρησης που αναπτύχθηκε από την Baidu, σχεδιασμένη για να υποστηρίζει εφαρμογές βαθιάς μάθησης πλήρους διαδικασίας από την ανάπτυξη μοντέλων έως την ανάπτυξη. Παρέχει πληθώρα εργαλείων και βιβλιοθηκών για την υποστήριξη μιας ποικιλίας εργασιών βαθιάς μάθησης, συμπεριλαμβανομένης της επεξεργασίας εικόνας, της επεξεργασίας φυσικής γλώσσας, της αναγνώρισης ομιλίας κ.λπ.PaddlePaddle

Το PaddleClas είναι μια βιβλιοθήκη εργαλείων που χρησιμοποιείται ειδικά για εργασίες ταξινόμησης εικόνων στο πλαίσιο Paddle. Παρέχει ένα πλήρες σύνολο λύσεων από άκρο σε άκρο, συμπεριλαμβανομένης της επεξεργασίας δεδομένων, του ορισμού μοντέλου, της εκπαίδευσης, της αξιολόγησης και της ανάπτυξης, που έχουν σχεδιαστεί για να βοηθούν τους προγραμματιστές να δημιουργήσουν και να αναπτύξουν γρήγορα αποτελεσματικά μοντέλα ταξινόμησης εικόνων.PaddleClas

Το SwanLab είναι ένα ανοιχτού κώδικα, ελαφρύ εργαλείο παρακολούθησης πειράματος τεχνητής νοημοσύνης που βελτιώνει την παρακολούθηση πειράματος ML και την εμπειρία συνεργασίας παρέχοντας ένα φιλικό API και συνδυάζοντας παρακολούθηση υπερπαραμέτρων, καταγραφή δεικτών, διαδικτυακή συνεργασία και άλλες λειτουργίες.Καλώς ήρθατε στην επίσημη τεκμηρίωση SwanLab |

Το Swanhub είναι μια κοινότητα συνεργασίας και κοινής χρήσης μοντέλου ανοιχτού κώδικα που αναπτύχθηκε από το Geek Studio. Παρέχει στους προγραμματιστές τεχνητής νοημοσύνης λειτουργίες όπως φιλοξενία μοντέλων τεχνητής νοημοσύνης, αρχεία εκπαίδευσης, εμφάνιση αποτελεσμάτων μοντέλων και ταχεία ανάπτυξη API.Καλώς ήρθατε στο Swanhub

Η Gradio είναι μια βιβλιοθήκη Python ανοιχτού κώδικα που έχει σχεδιαστεί για να βοηθά τους επιστήμονες δεδομένων, τους ερευνητές και τους προγραμματιστές που εργάζονται στον τομέα της μηχανικής μάθησης να δημιουργούν γρήγορα και να μοιράζονται διεπαφές χρήστη για μοντέλα μηχανικής μάθησης.Gradio

2. Μέρος προετοιμασίας

2.1 Εγκατάσταση περιβάλλοντος

Εγκαταστήστε τις ακόλουθες 3 βιβλιοθήκες:

  1. paddle
  2. swanlab
  3. gradio

Εντολή εγκατάστασης:

pip install paddle swanlab gradio

2.2 Λήψη συνόλου δεδομένων

Δεδομένα ταξινόμησης ζιζανίων: DeepWeeds

  1. DeepWeeds
  2. --images
  3. ----1.jpg
  4. ----2.jpg
  5. --train.txt
  6. --val.txt
  7. --test.txt
  8. --classnames.txt

Οι αντίστοιχες λειτουργίες και η σημασία τους:

1. Φάκελος DeepWeeds: Αυτός ο φάκελος χρησιμοποιείται για την αποθήκευση εικόνων φακέλων εικόνων, αρχείων συνόλου επικύρωσης δοκιμαστικών συνόλων εκπαίδευσης και αρχείων ετικετών

2. φάκελος εικόνων: Αυτός ο φάκελος χρησιμοποιείται για την αποθήκευση φακέλων εικόνων εκπαίδευσης, δοκιμών και επαλήθευσης.

3. Αρχεία train.txt, val.txt, test.txt: Αυτό το αρχείο χρησιμοποιείται για την αποθήκευση των διαδρομών εικόνας και των κατηγοριών συνόλων εκπαίδευσης, δοκιμών και επικύρωσης.

4. Αρχείο ονομάτων κλάσεων: χρησιμοποιείται για την αποθήκευση ετικετών κατηγοριών

2.3 Κάντε λήψη του πλαισίου PaddleClas

Σύνδεσμος μοντέλου:Μοντέλο PaddleClas

Μετά την αποσυμπίεση, θα λάβετε τον φάκελο PaddleClas.

2.4 Δημιουργία καταλόγου αρχείων

Δημιουργήστε το app.py στο φάκελο PaddleClas.

Αυτό που κάνει είναι: εκτελέστε το σενάριο που εκτελεί το Gradio Demo

3. Εκπαίδευση μοντέλου ResNet

3.1 Τροποποίηση διαμόρφωσης

Βρείτε πρώτα ppcls-->configs-->ImageNet-->Res2Net-->Res2Net50_14w_8s.yaml στον φάκελο PaddleClas.

Τροποποιήστε τις εποχές σε 100, την κατηγορία class_num σε 9, τη διαδρομή εικόνας εκπαίδευσης, τη διαδρομή εικόνας επαλήθευσης και το αρχείο ετικέτας αντίστοιχα. Συνολικά έγιναν 7 αλλαγές.

  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 Χρήση Swanlab

Βρείτε εργαλεία-->train.py στο φάκελο PaddleClas. Αρχικοποιήστε το 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()

Βρείτε το ppcls-->engine-->train-->utils.py στο PaddleClas και προσθέστε τον ακόλουθο κώδικα:

  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]})

Βρείτε το ppcls-->engine-->engine.py στο φάκελο PaddleClas και προσθέστε τον ακόλουθο κώδικα:

swanlab.log({'best_metric': best_metric.get('metric')})

3.3 Πρότυπη εκπαίδευση

Εισαγάγετε την ακόλουθη εντολή στην κονσόλα:

python -m paddle.distributed.launch tools/train.py -c ./ppcls/configs/ImageNet/Res2Net/Res2Net50_14w_8s.yaml

Δείτε λεπτομέρειες πειράματος στο swanlab

Τα πειραματικά αποτελέσματα έχουν ως εξής:

Δείτε πειραματικά αποτελέσματα στο swanlab

3.4 Υπόδειγμα συλλογισμού

Εισαγάγετε τον ακόλουθο κωδικό στην κονσόλα:

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

4.1 Τροποποίηση διαμόρφωσης

Βρείτε πρώτα το ppcls-->configs-->ImageNet-->DarkNet-->DarkNet53.yaml στον φάκελο PaddleClas.

Τροποποιήστε τις εποχές σε 100, την κατηγορία class_num σε 9, τη διαδρομή εικόνας εκπαίδευσης, τη διαδρομή εικόνας επαλήθευσης και το αρχείο ετικέτας αντίστοιχα. Συνολικά έγιναν 7 αλλαγές.

  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 Χρήση του Swanlab

Βρείτε εργαλεία-->train.py στο φάκελο PaddleClas. Τροποποίηση αρχικοποίησης 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 Πρότυπη εκπαίδευση

Εισαγάγετε την ακόλουθη εντολή στην κονσόλα:

python -m paddle.distributed.launch tools/train.py -c ./ppcls/configs/ImageNet/DarkNet/DarknetNet53.yaml

Δείτε λεπτομέρειες πειράματος στο swanlab

Τα πειραματικά αποτελέσματα έχουν ως εξής:

4.4 Υπόδειγμα συλλογισμού

Εισαγάγετε τον ακόλουθο κωδικό στην κονσόλα:

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 παρέχει μια βολική λειτουργία γραφήματος σύγκρισης.

5. Επίδειξη Gradio

Συνεχίζεται. . .

6. Το Swanhub ανεβάζει και επιδεικνύει την επίδειξη

Συνεχίζεται. . .