Berbagi teknologi

Kerangka domestik PaddleClas dikombinasikan dengan Swanlab untuk klasifikasi gulma

2024-07-12

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

1. Pengenalan proyek

Gulma merupakan salah satu masalah utama di bidang pertanian, yang merupakan ancaman serius terhadap pertumbuhan dan hasil tanaman. Identifikasi manual dan metode pengelolaan tradisional tidak efisien dan akurat, sehingga diperlukan teknologi visi komputer yang canggih untuk meningkatkan efisiensi dan kualitas produksi pertanian. Sebagai model pembelajaran mendalam, ResNet berkinerja baik dalam menangani tugas klasifikasi gambar yang kompleks. Model ini tidak hanya dapat secara efektif menyelesaikan masalah gulma yang beragam dan kompleks di lahan pertanian, tetapi juga mendorong pengembangan pertanian cerdas dan mengurangi ketergantungan pada pestisida kimia untuk mencapai tujuan tersebut pembangunan pertanian berkelanjutan. Dengan menggunakan ResNet untuk klasifikasi gulma, kami dapat memberikan solusi pengelolaan pertanian yang lebih cerdas dan akurat kepada petani, mendorong peningkatan efisiensi produksi pertanian, dan modernisasi industri pertanian. Oleh karena itu, proyek ini menggunakan kerangka kerja lokal PaddleClas+Swanlab+Gradio+Swanhub untuk melakukan eksperimen klasifikasi gulma.

PaddlePaddle adalah platform pembelajaran mendalam tingkat perusahaan yang dikembangkan oleh Baidu, dirancang untuk mendukung aplikasi pembelajaran mendalam dengan proses penuh mulai dari pengembangan model hingga penerapan. Ini menyediakan banyak alat dan perpustakaan untuk mendukung berbagai tugas pembelajaran mendalam, termasuk pemrosesan gambar, pemrosesan bahasa alami, pengenalan suara, dll.DayungDayung

PaddleClas adalah pustaka alat yang khusus digunakan untuk tugas klasifikasi gambar dalam kerangka Paddle. Ini memberikan serangkaian solusi menyeluruh yang lengkap, termasuk pemrosesan data, definisi model, pelatihan, evaluasi, dan penerapan, yang dirancang untuk membantu pengembang dengan cepat membangun dan menerapkan model klasifikasi gambar yang efisien.Kelas Dayung

SwanLab adalah alat pelacakan eksperimen AI bersumber terbuka dan ringan yang meningkatkan pengalaman pelacakan dan kolaborasi eksperimen ML dengan menyediakan API yang mudah digunakan dan menggabungkan pelacakan hyperparameter, perekaman indikator, kolaborasi online, dan fungsi lainnya.Selamat datang di dokumentasi resmi SwanLab |

Swanhub adalah komunitas kolaborasi dan berbagi model sumber terbuka yang dikembangkan oleh Geek Studio. Ini memberi pengembang AI fungsi seperti hosting model AI, catatan pelatihan, tampilan hasil model, dan penerapan API cepat.Selamat datang di Swanhub

Gradio adalah pustaka Python sumber terbuka yang dirancang untuk membantu ilmuwan data, peneliti, dan pengembang yang bekerja di bidang pembelajaran mesin dengan cepat membuat dan berbagi antarmuka pengguna untuk model pembelajaran mesin.Gradasi

2. Bagian persiapan

2.1 Instalasi lingkungan

Instal 3 perpustakaan berikut:

  1. paddle
  2. swanlab
  3. gradio

Perintah instalasi:

pip install paddle swanlab gradio

2.2 Unduh kumpulan data

Kumpulan data klasifikasi gulma: DeepWeeds

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

Fungsi dan arti masing-masing:

1. Folder DeepWeeds: Folder ini digunakan untuk menyimpan gambar folder gambar, file set verifikasi set pengujian, dan file label

2. folder gambar: Folder ini digunakan untuk menyimpan folder gambar pelatihan, pengujian, dan verifikasi.

3. file train.txt, val.txt, test.txt: File ini digunakan untuk menyimpan jalur gambar dan kategori set pelatihan, pengujian, dan validasi.

4. file nama kelas: digunakan untuk menyimpan label kategori

2.3 Unduh kerangka PaddleClas

Tautan model:Model PaddleClas

Setelah unzip, Anda akan mendapatkan folder PaddleClas.

2.4 Buat direktori file

Buat app.py di folder PaddleClas.

Fungsinya adalah: menjalankan skrip yang menjalankan Gradio Demo

3. Pelatihan model ResNet

3.1 Ubah konfigurasi

Pertama temukan ppcls-->configs-->ImageNet-->Res2Net-->Res2Net50_14w_8s.yaml di folder PaddleClas.

Ubah masing-masing epoch menjadi 100, kategori class_num menjadi 9, jalur gambar pelatihan, jalur gambar verifikasi, dan file label. Sebanyak 7 perubahan dilakukan.

  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 Menggunakan Swanlab

Temukan alat-->train.py di folder PaddleClas. Inisialisasi 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()

Temukan ppcls-->engine-->train-->utils.py di PaddleClas dan tambahkan kode berikut:

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

Temukan ppcls-->engine-->engine.py di folder PaddleClas dan tambahkan kode berikut:

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

3.3 Pelatihan model

Masukkan perintah berikut di konsol:

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

Lihat detail eksperimen di swanlab

Hasil percobaannya adalah sebagai berikut:

Lihat hasil eksperimen di swanlab

3.4 Model penalaran

Masukkan kode berikut ke konsol:

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. Pelatihan model DarkNet53

4.1 Ubah konfigurasi

Pertama temukan ppcls-->configs-->ImageNet-->DarkNet-->DarkNet53.yaml di folder PaddleClas.

Ubah masing-masing epoch menjadi 100, kategori class_num menjadi 9, jalur gambar pelatihan, jalur gambar verifikasi, dan file label. Sebanyak 7 perubahan dilakukan.

  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 Menggunakan Swanlab

Temukan alat-->train.py di folder PaddleClas. Ubah inisialisasi 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 Pelatihan model

Masukkan perintah berikut di konsol:

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

Lihat detail eksperimen di swanlab

Hasil percobaannya adalah sebagai berikut:

4.4 Model penalaran

Masukkan kode berikut ke konsol:

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 Tampilan hasil Swanlab

Seperti dapat dilihat dari gambar, kinerja model ResNet50 lebih baik daripada model DarkNet53, dan swanlab menyediakan fungsi bagan perbandingan yang nyaman.

5. Demo gradio

Bersambung. . .

6. Swanhub mengunggah dan mendemonstrasikan demonya

Bersambung. . .