PaddleX はカスタム データセットの画像分類モデルをトレーニングし、プロセス全体がオープンになります (環境構築から推論展開まで)。
ナビゲーションバー
上部に書かれています: PaddleX は、paddlepaddle によって立ち上げられたウェアハウスであり、開始するのがそれほど難しくなく、導入が容易です。モデルは 1 つの部分にまとめられており、特に迷いやすいです。このチュートリアルは、PaddleX についてあまり知らない人が PaddleX を使用するためのものです。
1. 環境整備
データトレーニングを開始する前に、使用する機器に合わせたディープラーニング環境を構築する必要がありますが、ここでは例としてubuntu20.04システムを使用します。
1. グラフィックス カード ドライバーのインストール チュートリアル。ワンクリックでインストールするには、ソフトウェア アップデートの追加ドライバーを使用することをお勧めします。 2.
Cuda と cudnn のインストール。cuda と cudnn のバージョンが対応している必要があることに注意してください。
3. Anaconda のインストール
4. Anaconda を使用して仮想環境を作成する
5. 新しく作成した仮想環境に入り、paddlepaddle のインストールを開始します。cuda のバージョンとオペレーティング システムは、インストールしたばかりのものと同じである必要があることに注意してください。ソースを変更した pip を使用することをお勧めします。 6.
PaddleXをインストールする
pip install paddlex==2.1.0 -i https://mirror.baidu.com/pypi/simple
paddlepaddle には pycocotools パッケージが統合されていますが、paddlepaddle で pycocotools を正常にインストールできない場合があります。PaddleX は pycocotools パッケージに依存しているため、pycocotools のインストールが失敗した場合は、次のようにして pycocotools をインストールできます。
pip install cython
pip install pycocotools
ここまでで大まかな環境は構築できました。
2. データの準備
画像分類モデルをトレーニングするときは、データ セットを ImageNet の形式で準備する必要があります。形式の要件は次のとおりです。カテゴリが N 個ある場合は、N 個のフォルダーを使用します。
dataset/ # 图像分类数据集根目录
|--dog/ # 当前文件夹所有图片属于dog类别
| |--d1.jpg
| |--d2.jpg
| |--...
| |--...
|
|--...
|
|--snake/ # 当前文件夹所有图片属于snake类别
| |--s1.jpg
| |--s2.jpg
| |--...
| |--...
PaddleX コマンドを使用して、データセットを 70% のトレーニング セット、20% の検証セット、10% のテスト セットにランダムに分割します。 –dataset_dir はここでの相対パスです。エラーが報告され、フォルダーが見つからない場合は、使用することをお勧めします。絶対パス; –val_value 0.2 および –test_value 0.1 は、独自のアイデアに従って適切に調整できます。
paddlex --split_dataset --format ImageNet --dataset_dir dataset --val_value 0.2 --test_value 0.1
3. モデルのトレーニング
dataset/same-level ディレクトリに新しい train.py を作成し、次のコードをそこにコピーし、python train.py を実行してトレーニングを開始します。
import paddlex as pdx
from paddlex import transforms as T
# 定义训练和验证时的transforms
# API说明:https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/apis/transforms/transforms.md
train_transforms = T.Compose(
[T.RandomCrop(crop_size=224), T.RandomHorizontalFlip(), T.Normalize()])
eval_transforms = T.Compose([
T.ResizeByShort(short_size=256), T.CenterCrop(crop_size=224), T.Normalize()
])
# 定义训练和验证所用的数据集
# API说明:https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/apis/datasets.md
train_dataset = pdx.datasets.ImageNet(
data_dir='dataset',
file_list='dataset/train_list.txt',
label_list='dataset/labels.txt',
transforms=train_transforms,
shuffle=True)
eval_dataset = pdx.datasets.ImageNet(
data_dir='dataset',
file_list='dataset/val_list.txt',
label_list='dataset/labels.txt',
transforms=eval_transforms)
# 初始化模型,并进行训练
num_classes = len(train_dataset.labels)
model = pdx.cls.MobileNetV3_small(num_classes=num_classes)
# 模型训练参数
# 各参数介绍与调整说明:https://github.com/PaddlePaddle/PaddleX/tree/develop/docs/parameters.md
model.train(
num_epochs=200,
train_dataset=train_dataset,
train_batch_size=32,
eval_dataset=eval_dataset,
lr_decay_epochs=[130, 160, 180],
learning_rate=0.01,
save_dir='output/mobilenetv3_small',
use_vdl=True)
トレーニングに複数の GPU カードを使用する必要がある場合 (たとえば、2 枚のカードを使用する場合)、次を実行します。
python -m paddle.distributed.launch --gpus 0,1 train.py
4. 視覚的なインジケーター
トレーニング コードで use_vdl が True に設定されている場合、トレーニング プロセスはトレーニング ログを VisualDL 形式で save_dir (ユーザーが指定したパス) の下の vdl_log ディレクトリに自動的に保存します。ユーザーは次のコマンドを使用して、視覚化インジケーターを表示する VisualDL サービス
visualdl --logdir output/mobilenetv3_small/vdl_log --port 6001
サービスが開始されたら、ブラウザを使用して https://0.0.0.0:6001 または https://localhost:6001 を開きます。
5. モデル予測
PaddleX の組み込み予測インターフェイスを使用して結果を予測します
import paddlex as pdx
test_jpg = 'test.jpg'
model = pdx.load_model('output/mobilenetv3_small/best_model')
result = model.predict(test_jpg)
print("Predict Result: ", result)
6. モデルの展開
トレーニング モデルの形式
PaddleX トレーニングによって保存されたモデル フォルダーには、主に 4 つのファイルがあります。
model.pdopt、モデルパラメータ学習用オプティマイザ
model.pdparams、モデルパラメータ
model.yml、モデル設定ファイル(前処理パラメータ、モデル定義などを含む)
eval_details.json、モデル評価時の予測結果と真の値
トレーニング中に保存されたモデルは、デプロイメントに直接使用することはできず、デプロイメントに使用する前にデプロイメント形式にエクスポートする必要があることに注意してください。
コマンド ライン ターミナルで次のコマンドを使用して、トレーニングされたモデルをデプロイに必要な形式にエクスポートします。
paddlex --export_inference --model_dir=./output/mobilenetv3_small/best_model/ --save_dir=./inference_model
デプロイメント モデルの形式
サーバー側にモデルをデプロイする場合、トレーニング プロセス中に保存されたモデルを推論形式モデルとしてエクスポートする必要があります。PaddleX 2.0 を使用してエクスポートされた推論形式モデルには、次の 5 つのファイルが含まれています。
model.pdmodel、モデルのネットワーク構造
model.pdiparams、モデルの重み
model.pdiparams.info、モデルの重み名model.yml 、PaddleXで使用できる
モデル設定ファイル(前処理パラメータ、モデル定義などを含む) pipeline.yml
SDKプロセス設定ファイルの作成
デプロイメント モデルをエクスポートした後、PaddleX 高性能推論インターフェイスを使用してデプロイできます。コードは次のとおりです。
import paddlex as pdx
predictor = pdx.deploy.Predictor('./inference_model')
result = predictor.predict(img_file='test.jpg')