ホームページ  >  記事  >  テクノロジー周辺機器  >  GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます

GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます

WBOY
WBOY転載
2023-04-09 18:41:101152ブラウズ

物体検出はコンピュータ ビジョンの分野における基本的なタスクですが、適切な Model Zoo がなければどうやってそれを行うことができるでしょうか?

今日は、シンプルで使いやすいターゲット検出アルゴリズム モデル ライブラリ miemiedetection を紹介します。現在、GitHub で 130 個のスターを獲得しています

GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます

コードリンク: https://github.com/miemie2013/miemiedetection

miemiedetection は、YOLOX をベースに開発された個人検出ライブラリで、PPYOLO、PPYOLOv2、PPYOLOE、FCOS などのアルゴリズムもサポートしています。

YOLOX の優れたアーキテクチャのおかげで、miemiedetection でのアルゴリズムのトレーニング速度は非常に速く、データの読み取りがトレーニング速度のボトルネックになることはなくなりました。

コード開発で使用される深層学習フレームワークは pyTorch です。これは、変形可能な畳み込み DCNv2、行列 NMS、およびその他の難しい演算子を実装し、単一マシンのシングルカード、単一マシンのマルチカード、およびマルチマシン マルチカード トレーニング モード (マルチカード トレーニング モードには Linux システムを推奨)、Windows および Linux システムをサポートします。

miemiedetection はインストール不要の検出ライブラリであるため、コードを直接変更して実行ロジックを変更できるため、ライブラリに新しいアルゴリズムを追加することも簡単です。

著者は、将来的にはさらに多くのアルゴリズムのサポート (および女性用の衣類) が追加される予定であると述べています。

GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます

#アルゴリズムは本物であることが保証されています

モデルを再現するために最も重要なことは、基本的に精度がオリジナルのものと同じです。

まず、PPYOLO、PPYOLOv2、PPYOLOE の 3 つのモデルを見てみましょう。著者はすべて、損失アライメントと勾配アライメントの実験を受けています。

GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます

証拠を保存するために、ソース コード内の *.npz の読み取りと書き込みの部分がコメント化されており、すべて残されています。アライメント実験のコードから。

また、著者はパフォーマンス調整のプロセスを詳細に記録しました。初心者にとって、この道に従うことは良い学習プロセスでもあります。

GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます

すべてのトレーニング ログも記録され、ウェアハウスに保存されます。これは、PPYOLO シリーズ アルゴリズムの再現が正確であることを証明するのに十分です。

GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます

最終的なトレーニング結果は、再現された PPYOLO アルゴリズムが元のウェアハウスと同じ損失と勾配を持っていることを示しています。

さらに、著者は、元のウェアハウスと miemiedetection 転移学習 voc2012 データセットの使用も試みましたが、(同じハイパーパラメータを使用して) 同じ精度も得られました。

元の実装と同じで、同じ学習率、同じ学習率減衰戦略 Warm_piecewisedecay (PPYOLO および PPYOLOv2 で使用) および Warm_cosinedecay (PPYOLOE で使用) を使用し、同じ指数移動平均 EMA 、同じデータ前処理方法、同じパラメータ L2 重み減衰、同じ損失、同じ勾配、同じ事前学習モデル、同じ精度が得られた転移学習。

誰もが素晴らしい体験をできるよう、十分な実験を行い、多くのテストを行いました。

998 または 98 はありません。スターをクリックするだけで、すべてのターゲット検出アルゴリズムを無料で持ち帰ることができます。

モデルのダウンロードと変換

モデルを実行したい場合、パラメーターは非常に重要です。作成者は、変換された事前トレーニング pth 重みファイルを提供します。 Baidu Netdisk から直接ダウンロードできます。

GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えますリンク: https://pan.baidu.com/s/1ehEqnNYKb9Nz0XNeqAcwDw

抽出コード: qe3i

または、以下の手順に従って取得します。

最初の手順では、重みファイルをダウンロードし、プロジェクトのルート ディレクトリで実行します (つまり、ファイルをダウンロードします。Windows ユーザーは次の手順を使用できます)。 wget をダウンロードするには Thunder またはブラウザを使用します。リンクは、美しさを示すためにここにあります。ppyoloe_crn_l_300e_coco のみが例として使用されています):

GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます

# word pretrained は ImageNet バックボーン ネットワークで事前にトレーニングされており、PPYOLO、PPYOLOv2、PPYOLOE はこれらの重みをロードして COCO データ セットをトレーニングします。残りは COCO で事前トレーニングされたモデルです。

2 番目のステップである重みの変換は、プロジェクトのルート ディレクトリで実行します:

GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えますGitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます

各パラメータの意味は次のとおりです:

- -f は使用される構成ファイルを表します。

- -c は読み取りソース重みファイルを表します;

- -oc は出力 (保存された) pytorch 重みファイルを表します;

- -nc はデータ セット内のカテゴリの数を表します;

- --only_backbone True の場合、バックボーン ネットワークの重みのみを変換することを意味します ;

実行後、変換された *.pth 重みファイルがプロジェクトのルート ディレクトリに取得されます。

ステップバイステップ チュートリアル

次のコマンドのほとんどはモデルの構成ファイルを使用するため、最初に構成ファイルについて詳しく説明する必要があります。 。

mmdet.exp.base_exp.BaseExp は構成ファイルの基本クラスであり、モデルの取得方法を示す get_model() などの一連の抽象メソッドを宣言する抽象クラスです。モデルの取得方法を示すget_data_loader()、学習済みデータローダの取得方法、オプティマイザの取得方法を示すget_optimizer()など。

mmdet.exp.datasets.coco_base.COCOBaseExp はデータ セットの構成であり、BaseExp を継承しており、データ セットの構成のみを提供します。このウェアハウスは、COCO アノテーション形式のデータセットのトレーニングのみをサポートしています。

他のアノテーション形式のデータセットは、トレーニング前に COCO アノテーション形式に変換する必要があります (サポートされるアノテーション形式が多すぎると、作業負荷が大きくなりすぎます)。カスタマイズされたデータセットは、miemieLabels を通じて COCO ラベル形式に変換できます。すべての検出アルゴリズム構成クラスは COCOBaseExp を継承します。これは、すべての検出アルゴリズムが同じデータ セット構成を共有することを意味します。

COCOBaseExp の設定項目は次のとおりです。

GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます

このうち

- self.num_classes はデータ セット内のカテゴリの数を表します;

- self.data_dir はデータ セットのルート ディレクトリを表します;

- self.cls_names はデータセットのカテゴリ名ファイルパスを表し、txt ファイルで 1 行がカテゴリ名を表します。カスタム データ セットの場合は、新しい txt ファイルを作成してカテゴリ名を編集し、それを指すように self.cls_names を変更する必要があります。

- self.ann_folder は次のことを表します。データセットのアノテーションファイル ルートディレクトリは self.data_dir ディレクトリにある必要があります;

- self.train_ann はデータセットのトレーニングセットのアノテーションファイル名を表します

- self.val_ann は、データ セットの検証セットのアノテーション ファイル名を表し、self.ann_folder ディレクトリに配置する必要があります。 .ann_folder ディレクトリ;

- self.train_image_folder は、データ セットのトレーニング セットの画像フォルダー名を表し、self.data_dir ディレクトリに配置する必要があります。

- self.val_image_folder は、データ セットの検証セットのイメージ ファイルを表します。フォルダー名は self.data_dir ディレクトリにある必要があります。

VOC 2012 データ セットの場合、データ セットの構成を次のように変更する必要があります。

GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます

さらに、次の構成も変更できます。 exps/ppyoloe/ppyoloe_crn_l_voc2012.py のようにサブクラスの self.num_classes と self.data_dir が削除され、COCOBaseExp の設定が上書きされてしまいます(無効)。

前述のモデルをダウンロードした後、VOC2012 データ セットの self.data_dir ディレクトリに新しいフォルダー annotations2 を作成し、voc2012_train.json と voc2012_val.json をこのファイル フォルダーに配置します。

最後に、COCO データ セット、VOC2012 データ セット、およびこのプロジェクトの配置場所は次のようになります。

GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます

データ セットのルート ディレクトリと miemiedetection-master は同じレベルのディレクトリです。個人的には、データ セットを miemiedetection-master に置くことはお勧めしません。そうしないと、PyCharm を開くときに非常に遅くなります。さらに、複数のプロジェクト (mmdetection、PaddleDetection、AdelaiDet など) がデータ セットを共有する場合、データ セットのパスを設定し、プロジェクト 名前は関係ありません。

mmdet.exp.ppyolo.ppyolo_method_base.PPYOLO_Method_Exp は、特定のアルゴリズムのすべての抽象メソッドを実装するクラスで、すべての抽象メソッドを実装する COCOBaseExp を継承します。

exp.ppyolo.ppyolo_r50vd_2x.Exp は、PPYOLO アルゴリズムの Resnet50Vd モデルの最終構成クラスであり、PPYOLO_Method_Exp を継承します。

# PPYOLOE設定ファイルも同様の構造です。

予測

まず、入力データが画像の場合は、プロジェクトのルート ディレクトリで実行します。

GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます

各パラメータの意味は次のとおりです:

- -f は使用される構成ファイルを表します;

- -c は重みファイルを表します読み取り;

- --path は画像のパスを表します;

- --conf はスコアのしきい値を表し、予測ボックスのみがそれより高くなりますこのしきい値よりも描画されます;

##- --tsize は、予測中に画像を --tsize にサイズ変更する解像度を表します。予測が完了すると、コンソールには結果画像の保存パスが出力され、ユーザーはそれを開いて表示できます。トレーニング カスタム データ セットに保存されたモデルを予測用に使用している場合は、-c をモデルのパスに変更するだけです。

予測がフォルダー内のすべての画像を対象とする場合は、プロジェクトのルート ディレクトリで実行します:

--path を、対応する画像フォルダーのパスに変更します。

GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます#トレーニング COCO2017 データ セット

ImageNet 事前トレーニング バックボーン ネットワーク トレーニング COCO データ セットを読み取った場合は、プロジェクトのルート ディレクトリで実行します。

1 つのコマンドで、単一マシン 8 カードのトレーニングが直接開始されます もちろん、実際に単一マシン 8 カードのスーパーコンピューターがあることが前提となります。

GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます

各パラメータの意味は次のとおりです:

-f は使用される構成ファイルを表します;

-d はグラフィックス カードの数を表します。

#-b はトレーニング中のバッチ サイズ (すべてのカード) を表します。

-eb評価中のバッチ サイズ (すべてのカード) を表します;

-c は読み取り重みファイルを表します;

--fp16、自動混合精密トレーニング;

--num_machines、マシンの数。単一マシン上で複数のカードを使用してトレーニングすることをお勧めします;

- - 再開はトレーニングを再開するかどうかを示します;

トレーニング カスタム データ セット

収束が速いため、トレーニングのために COCO 事前トレーニング重みを読み取ることをお勧めします。

上記の VOC2012 データセットを例として、ppyolo_r50vd モデルの場合、マシン 1 台とカード 1 枚の場合、次のコマンドを入力してトレーニングを開始します。

トレーニングが何らかの理由で中断され、以前に保存したモデルを読み取ってトレーニングを再開したい場合は、 -c を読みたいモデルへのパスに変更するだけです。 --resume パラメータを追加できます。

2 台のマシンと 2 枚のカード、つまり各マシンに 1 枚のカードがある場合は、マシン 0 で次のコマンドを入力します。 GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます

そして、マシン 1 で次のコマンドを入力します。

GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます

上記の 192.168.0.107 を変更するだけです。 0 への 2 つのコマンド マシンの LAN IP で十分です。

マシン 1 台とカード 2 枚の場合は、次のコマンドを入力してトレーニングを開始します: GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます

転移学習 VOC2012 データセットでは、ppyolo_r50vd_2x の測定 AP (0.50:0.95) は 0.59、AP (0.50) は 0.82、AP (小) は 0.18 に達する可能性があります。一枚のカードでも複数のカードでもこの結果が得られます。

GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます 転移学習中は PaddleDetection と同等の精度と収束速度を実現しており、両方の学習ログは train_ppyolo_in_voc2012 フォルダーにあります。 GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます

ppyoloe_l モデルの場合は、単一マシンで次のコマンドを入力してトレーニングを開始します (バックボーン ネットワークがフリーズします)

転移学習 VOC2012 データセットでは、ppyoloe_l の測定 AP (0.50:0.95) は 0.66、AP (0.50) は 0.85、AP (小) は 0.28 に達する可能性があります。

評価

GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます

コマンドと具体的なパラメータは以下のとおりです。

GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます

プロジェクトのルート ディレクトリで実行した結果は次のとおりです。

GitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えます

実行後の精度重みに換算すると0.4%程度の若干のロスになります。

以上がGitHub オープンソース 130+Stars: PPYOLO シリーズに基づいたターゲット検出アルゴリズムを再現する方法を段階的に教えますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。