私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
雑草は農業における主要な問題の 1 つであり、作物の成長と収量に深刻な脅威をもたらします。従来の手作業による識別および管理方法は非効率的で不正確であるため、農業生産の効率と品質を向上させるには高度なコンピュータービジョンテクノロジーが必要です。 ResNet は、深層学習モデルとして、複雑な画像分類タスクの処理に優れた性能を発揮します。これにより、農地における多様で複雑な雑草の問題を効果的に解決できるだけでなく、インテリジェント農業の開発を促進し、化学農薬への依存を軽減することもできます。持続可能な農業開発の実現に貢献します。 ResNet を雑草分類に使用することで、よりインテリジェントで正確な農業管理ソリューションを農家に提供し、農業生産効率の向上と農業産業の近代化を促進できます。したがって、このプロジェクトでは、ローカライズされたフレームワーク PaddleClas+Swanlab+Gradio+Swanhub を使用して雑草分類実験を実施します。
PaddlePaddle は、Baidu によって開発されたエンタープライズ レベルのディープ ラーニング プラットフォームで、モデル開発からデプロイメントまでのフルプロセスのディープ ラーニング アプリケーションをサポートするように設計されています。画像処理、自然言語処理、音声認識など、さまざまな深層学習タスクをサポートする豊富なツールとライブラリを提供します。パドルパドル
PaddleClas は、Paddle フレームワークでの画像分類タスクに特に使用されるツール ライブラリです。データ処理、モデル定義、トレーニング、評価、展開を含むエンドツーエンドのソリューションの完全なセットを提供し、開発者が効率的な画像分類モデルを迅速に構築および展開できるように設計されています。パドルクラス
SwanLab は、オープンソースの軽量 AI 実験追跡ツールであり、フレンドリーな API を提供し、ハイパーパラメーター追跡、インジケーター記録、オンライン コラボレーション、その他の機能を組み合わせることで、ML 実験追跡とコラボレーション エクスペリエンスを向上させます。SwanLab へようこそ | SwanLab 公式ドキュメント
Swanhub は、Geek Studio によって開発されたオープンソース モデルのコラボレーションおよび共有コミュニティです。 AI開発者にAIモデルのホスティング、トレーニング記録、モデル結果の表示、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. classnames ファイル: カテゴリラベルを保存するために使用されます。
モデルリンク:PaddleClasモデル
解凍すると、PaddleClas フォルダーが得られます。
PaddleClas フォルダーに app.py を作成します。
実行内容: Gradio デモを実行するスクリプトを実行します。
まず、PaddleClas フォルダーで ppcls-->configs-->ImageNet-->Res2Net-->Res2Net50_14w_8s.yaml を見つけます。
エポックを 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]
PaddleClas フォルダーで tools-->train.py を見つけます。スワンラボの初期化
- # 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()
PaddleClas で ppcls-->engine-->train-->utils.py を見つけて、次のコードを追加します。
- 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]})
PaddleClas フォルダーで ppcls-->engine-->engine.py を見つけて、次のコードを追加します。
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
まず、PaddleClas フォルダーで ppcls-->configs-->ImageNet-->DarkNet-->DarkNet53.yaml を見つけます。
エポックを 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]
PaddleClas フォルダーで tools-->train.py を見つけます。初期化の変更 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 スワンラボの結果表示
図からわかるように、ResNet50 モデルは DarkNet53 モデルよりも優れたパフォーマンスを示しており、swanlab には便利な比較チャート機能が提供されています。
つづく。 。 。
つづく。 。 。