他の人からより良く学び、
より良いものになりますように。
—— 「ウェイカ・ジーシャン」
この記事の長さは 1974ワードで、読むのにかかる時間は 5分です。
序文
普段は独学で時間が限られているので、ディープラーニングを学びたいと思っていて、pyTorch の入門記事をいくつか読んだことがありますが、どれも断片的なものばかりで、接続することができませんでした。最近、ちょうど疫病の流行で出張が減ったので、ステーションBでpyTorchのビデオを見たら、Liu Er氏の「pyTorch Deep Learning Practice」がよく教えられているというコメントがありました。チュートリアル全体がとても分かりやすかったです 2つ目のブランチを一人で担当するのは入門編と言えます。
pyTorch を使い始めるために最も重要なことは実際にそれを使用することです. OpenCV の DNN モジュールは推論に使用されます, そのため、この記事ではその効果を検証するための最も簡単な例に専念します. ソース コードの Github アドレスは最後にあります記事の。
# | 実現方法 |
---|---|
1 | pyTorch トレーニング データ |
2 | pyTorch でトレーニングされたデータ モデルを onnx ファイルに転送します |
3 | C++ OpenCV DNN を使用した推論 |
構成環境
OS:Windows11ホーム
pyTorch 関連: Miniconda + pyTorch1.12.1(cpu) + python3.9.12、IDE は Visual Studio Code を使用します
OpenCV 関連: OpenCV 4.5.1 + C++、IDE は Visual Studio 2022 を使用
元の環境は Anaconda ファミリ バケットにインストールされており、大きなリソース領域を必要とします。Miniconda は最小の conda インストール環境であるため、ここでは Miniconda を使用することをお勧めします。具体的な環境構成やインストール方法は、動画も含めてインターネット上にかなりたくさん公開されているので、自分で探してみると良いでしょう。
普段は大画面モニターをオフィスに接続していますが、仕事の関係で出張が多くなりました。大画面を使いたいというニーズに応え、出張時にも持ち歩きやすいようにするために、ノートパソコンを次の機種に変更しました。オリジナルの ASUS Lingyao X DUO から ASUS Lingyao X Fold までの折りたたみスクリーン。これに対応して、元々は個別のグラフィックス カードを搭載していましたが、現在は統合グラフィックス カードのみになり、pyTorch は CPU バージョンでもインストールされます。2 つのノートブックの最後の比較写真
コード
マイクロカード志祥
最も単純なトレーニングと推論を行うには、画像を使用せず、次の図に示すように単純な操作だけを行います。
上の図の赤いボックスは、必要なトレーニング セットを表しています。その効果は、入力値を 2 で乗算して出力結果を取得することであることが一目でわかります。次の 2 つの 4.0 と 100.0 は、結果の推論に使用されます。結果も 8.0 と 200.0 になるはずです
pyトーチトレーニング
01
トレーニングセットを定義する
torch パッケージをインポートした後、入力 x_data を [1, 2, 3] として、出力 y_data を [2, 4, 6] として直接定義します。入力結果は次のように出力されます。
02
トレーニングされたネットワーク モデル、損失関数、およびオプティマイザーを定義する
学習モデルも非常にシンプルで、Linear full connection 層は 1 層のみで、フィードフォワード関数では活性化関数は使用されず、直接出力されます。損失関数の MSE、オプティマイザー SGD、学習率パラメーターは 0.02 (lr=0.02) に設定されます。
03
トレーニングモデル
トレーニングに関しては、主に次の 4 つのステップがあります。
前方
loss (損失関数を計算)
逆方向(逆方向伝播)
ステップ (最適化の反復)
上記では、学習回数を 1000 回に設定し、100 回ごとに損失を出力し、最後に重みの値を出力しました。
04
NXモデルの検証テストと出力
トレーニングが完了したら、テスト結果を確認しましょう。4 つの値、4、8、10、15 を入力しました。出力された結果は次のとおりです。
上の図からわかるように、予測結果は完全に正確です。次に、OpenCV 推論のためにトレーニング済みモデルを onnx ファイルにエクスポートします。
モデルmodelをeval()に変更すると推論モードに設定されます。
入力パラメトリック モデルを定義する dummy_input
出力、出力パラメータ名inputとoutput、onnxのファイル名を設定します。
torch.onnx.export を使用してエクスポートします。verbose=True は、エクスポートされた軌跡を出力するデバッグの説明です。
成功すると、現在のディレクトリに test.onnx モデル ファイルが生成され、pyTorch でトレーニングされたモデルが完成します。次のステップでは、推論に OpenCV の DNN が使用されているかどうかを確認します。
C++ OpenCV 推論
C++ OpenCV DNN 推論のコードも非常に単純で、主なことは dnn::Net を定義し、次に onnx モデル ファイルのディレクトリを指定し、readNetfromOnnx を使用してモデル ファイルをロードすることです。
入力パラメーターは引き続き OpenCV の Mat を使用します。入力パラメーターが 1 つだけであるため、ここでの定義は 1X1 で、入力データ型は float 型であるため、定義も CV_32F で、Mat が入力パラメーター net に渡されます。 setInput(Mat Value, 入力パラメータ名)、2 番目のパラメータはエクスポートしたパラメータ名と同じであり、net.forward (出力パラメータ名) を通じて返された結果を取得します。
コードでは 1024 と入力したので、予測結果は 2048 となり、完全に正解です。 このような単純な pyTorch 学習モデルを onnx に転送すると、C++ OpenCV 推論のデモが完成します。
以上
マイクロカード志祥
送信元アドレス
https://github.com/Vaccae/OpenCVDemoCpp.git
クリックして原文を読むと「Code Cloud」のコードアドレスが表示されます
過去の素晴らしいレビュー
Kotlin はコルーチンで Select 式を使用して最速の結果を選択します
C++ OpenCV は透視変換のために画像を手動でインターセプトします