GitHubオープンソース130+スター:PPYOLOシリーズをベースにターゲット検出アルゴリズムを再現する方法をHand in handで教える

GitHubオープンソース130+スター:PPYOLOシリーズをベースにターゲット検出アルゴリズムを再現する方法をHand in handで教える

物体検出は、コンピューター ビジョンの分野における基本的なタスクです。適切な Model Zoo なしで物体検出を実行するにはどうすればよいでしょうか?

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

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

Miemiedetection は、二次開発用の YOLOX ベースの個人検出ライブラリです。PPYOLO、PPYOLOv2、PPYOLOE、FCOS などのアルゴリズムもサポートしています。

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

コード開発に使用したディープラーニングフレームワークは、変形可能畳み込みDCNv2やMatrix NMSなどの高難易度演算子を実装したpyTorchです。シングルマシンシングルカード、シングルマシンマルチカード、マルチマシンマルチカードのトレーニングモード(マルチカードトレーニングモードにはLinuxシステムを推奨)をサポートしており、WindowsとLinuxシステムをサポートしています。

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

作者は、今後さらに多くのアルゴリズムのサポート(女性服を含む)が追加される予定であると述べました。

アルゴリズムは本物です

モデルを再現する上で最も重要なことは、その精度が基本的に元のモデルと同じであることです。

まず、PPYOLO、PPYOLOv2、PPYOLOE の 3 つのモデルを見てみましょう。著者らはいずれも、損失アライメントと勾配アライメントに関する実験を行っています。

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

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

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

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

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

元の実装と同様に、同じ学習率、同じ学習率減衰戦略 warm_piecewisedecay (PPYOLO および PPYOLOv2 で使用) および warm_cosinedecay (PPYOLOE で使用)、同じ指数移動平均 EMA、同じデータ前処理方法、同じパラメーター L2 重み減衰、同じ損失、同じ勾配、同じ事前トレーニング済みモデル、および転移学習により、同じ精度が達成されました。

私たちは、誰もが素晴らしいユーザー エクスペリエンスを得られるように、十分な実験と多くのテストを行ってきました。

998 や 98 の費用はかかりません。星をクリックするだけで、すべてのオブジェクト検出アルゴリズムを無料でお持ち帰りいただけます。

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

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

リンク: https://pan.baidu.com/s/1ehEqnNYKb9Nz0XNeqAcwDw

抽出コード: qe3i

または、以下の手順に従って入手してください。

最初のステップは、ウェイト ファイルをダウンロードし、プロジェクトのルート ディレクトリで実行することです (つまり、ファイルをダウンロードします。Windows ユーザーは、Thunder またはブラウザーを使用して、wget の背後にあるリンクをダウンロードできます。ここでは、見栄えを良くするために、ppyoloe_crn_l_300e_coco のみを例として使用します)。

なお、「事前トレーニング済み」という単語が付いたモデルは、ImageNet で事前トレーニングされたバックボーン ネットワークです。PPYOLO、PPYOLOv2、および PPYOLOE は、これらの重みを読み込んで COCO データセットをトレーニングします。残りは COCO で事前トレーニングされたモデルです。

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

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

- -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 の設定項目は次のとおりです。

で、

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

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

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

- self.ann_folder はデータセットの注釈ファイルのルート ディレクトリを示します。このディレクトリは self.data_dir ディレクトリに配置する必要があります。

- self.train_ann はデータセットのトレーニング セットの注釈ファイル名を表し、self.ann_folder ディレクトリに配置する必要があります。

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

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

- self.val_image_folder は、データセットの検証セットの画像フォルダの名前を示します。このフォルダは、self.data_dir ディレクトリに配置する必要があります。

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

また、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 データセット、およびこのプロジェクトは次のように配置する必要があります。

データセットのルート ディレクトリは、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_Method_Exp を継承する PPYOLO アルゴリズムの Resnet50Vd モデルの最終構成クラスです。

PPYOLOE の設定ファイルも同様の構造になっています。

予測する

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

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

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

- -c は重みファイルが読み取られることを意味します。

- --path はイメージのパスを示します。

- --conf はスコアのしきい値を表し、このしきい値を超える予測ボックスのみが描画されます。

- --tsize は予測中に画像を --tsize の解像度にサイズ変更することを意味します。

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

フォルダー内のすべての画像を予測する場合は、プロジェクトのルート ディレクトリで次のコマンドを実行します。

--path を対応する画像フォルダのパスに変更するだけです。

COCO2017データセットのトレーニング

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

1 つのコマンドで、スタンドアロンの 8 カード トレーニングを直接開始できます。もちろん、前提として、実際にスタンドアロンの 8 カード スーパーコンピューターを持っている必要があります。

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

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

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

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

-eb は評価中のバッチ サイズを示します (すべてのカードに対して)。

-c は重みファイルが読み取られることを意味します。

--fp16、自動混合精度トレーニング。

--num_machines、マシンの数。1 台のマシンで複数の GPU を使用してトレーニングすることをお勧めします。

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

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

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

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

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

マシンが 2 台あり、カードが 2 枚ある場合 (つまり、各マシンにカードが 1 枚ずつある場合)、マシ​​ン 0 で次のコマンドを入力します。

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

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

マシンが 1 台、カードが 2 枚ある場合は、次のコマンドを入力してトレーニングを開始します。

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

転移学習中に、PaddleDetection と同じ精度と収束速度が達成されました。両方のトレーニング ログは、train_ppyolo_in_voc2012 フォルダーにあります。

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

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

評価する

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

プロジェクトのルート ディレクトリで実行した結果は次のようになります。

重量を切り替えた後、精度がわずかに低下します (約 0.4%)。

<<:  超大型モデルの登場でAIはゲームオーバーになるのか?ゲイリー・マーカス:道は狭くなっている

>>:  ロボットが石油・ガス生産をより安全にする方法

ブログ    
ブログ    

推薦する

デジタルマーケティングにおけるAI革命

ほんの数年前までは、マーケティングに特化した AI エンジンがマーケティングの未来につながると信じて...

グラフ最適化のためのエンドツーエンドの転送可能な深層強化学習

[[425806]]多様なアクセラレータ セットでトレーニングされた大規模で複雑なニューラル ネット...

舌先にAI

世界中の食べ物は、まさに世界の花火のボウルに過ぎません。人工知能は、新しい技術科学として、日常生活に...

企業は人工知能の可能性に目がくらんでいるのでしょうか?

多くの企業が AI イニシアチブの導入に意欲的に取り組んでいる一方で、AI が自社のビジネスにどのよ...

AIが小売業の顧客体験に革命を起こす

人工知能はすでに多くの業界に大きな影響を与えています。調査会社IDCの調査によると、2019年の人工...

...

...

地球外文明は人間ではなく、人工知能かもしれません!なぜ科学者はこう言うのでしょうか?

地球外文明が存在するかどうかという疑問は、常に科学者たちを深く悩ませてきました。現在に至るまで、私た...

...

...

...

会話型AIを導入する際に考慮すべき6つの質問

会話型人工知能 (AI) プロジェクトを正常に展開することは、他のデジタル ビジネス プロセスのアッ...