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はゲームオーバーになるのか?ゲイリー・マーカス:道は狭くなっている

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

ブログ    
ブログ    

推薦する

アルトマンのYCスピーチ: ChatGPTを攻撃する者は死ぬ、私ができるからといって、あなたにもできるとは限らない

ウルトラマンのシンプルな言葉はAIスタートアップ企業を震え上がらせた。 「Shelling」Open...

ディープラーニングの本質を探りますか?

[[184749]] 1. 人工知能の波が再び高まっている画期的な出来事:AlphaGoがイ・セド...

ロシアメディア:人工知能は顔認識技術を使って宗教的傾向を判断できる

ロシア新聞は1月19日、「もう隠せないのか?」と題する記事を掲載し、米スタンフォード大学の学者マイケ...

倉庫ロボットは資本の新たなトレンドになるか?オートストアは124億ドルの評価額で資金調達を受ける

最近、ノルウェーのロボット企業オートストアは、新規株式公開(IPO)の価格が1株当たり31ノルウェー...

AIスタートアップで2年間働いて学んだ7つのこと

この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...

...

0 コーパスで「ラベル付け」してより良い多言語翻訳結果を得る方法

[[409976]]今日の多言語翻訳モデルのほとんどは、英語中心のデータセットで統合モデルをトレーニ...

AIがオペレーターにできること、できないこと

人工知能は重要な戦略的基盤技術として、政府、産業界、社会から高い注目を集めています。第19回党大会報...

...

2017 年のトップデータサイエンスと機械学習手法

[51CTO.com クイック翻訳] 統計によると、回答者が現在選択している最も一般的に使用されてい...

因果関係に着想を得た解釈可能なフレームワーク:大規模モデルを説明する効率的な方法

大規模モデルの背後にある科学をより深く理解し、その安全性を確保するためには、解釈可能性がますます重要...

マイクロソフトの英語音声評価機能がアメリカ英語一般版で開始され、教育業界に力を与える

発音は言語学習の重要な部分です。 Microsoft Azure Cognitive Service...

...

人工知能の急速な発展により、どのようなビジネス分野に浸透しているのでしょうか?テレマーケティングの将来はどうなるのでしょうか?

最近、人工知能の開発はますます激しくなってきています。ますます多くの新製品が私たちの生活に入ってきて...