情報詳細・HALCON18.11とそれ以降のHALCONバージョンの画像分類機能の仕様変更についてHALCON19.11以降での画像分類のサンプルプログラムは以下の通りです。前処理プログラム:「classify_pill_defects_deep_learning_1_preprocess.hdev」トレーニングプログラム:「classify_pill_defects_deep_learning_2_train.hdev」評価プログラム:「classify_pill_defects_deep_learning_3_evaluate.hdev」推論プログラム:「classify_pill_defects_deep_learning_4_infer.hdev」++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Q. 画像分類のオペレータ名の変更はありますか。A. HALCON19.11では画像分類のオペレータがmodelというオペレータに統合されます。【変更オペレータ】read_dl_classifier → read_dl_modelset_dl_classifier_param → set_dl_model_paramtrain_dl_classifier_batch → train_dl_modelapply_dl_classifier → apply_dl_model++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Q. 単純に画像を読み込んでhobjファイルへ変換する際の画像サイズは今まで通り224×224なのでしょうか。A. HALCON19.11以降ではhobjファイルではなく、hdictへ変換されます。変換の際は、学習する画像サイズを設定できます。224×224で設定することも可能です。下記のようなプロシージャのImageWidthとImageHeightに値を入れることで画像サイズの変換が出来ます。サンプルプログラムでは、ImageWidthとImageHeightのパラメータが上部で設定できるようになっております。create_dl_preprocess_param ('classification', ImageWidth, ImageHeight, ImageNumChannels, -127, 128, NormalizationType, DomainHandling, [], [], [], [], DLPreprocessParam)++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Q. 従来はパラメータ設定は「set_dl_classifier_param」で行っていましたが、19.11以降ではどのようにすれば設定できますか。A. パラメータ設定はオペレータ「set_dl_model_param」を使用することで設定することが可能です。++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Q. HALCON18.11までの標準サンプル C:\Users\Public\Documents\MVTec\HALCON-18.11-Steady\examples\hdevelop\Deep-Learning\Classification\classify_pill_defects_deep_learning.hdevでは、プロット間隔は変数PlotEveryNthEpoch := 1で設定していましたがHALCON19.11以降ではどのようにすれば設定できますか。A. HALCON19.11ではトレーニングパラメータを生成する外部プロシージャ「create_dl_train_param」が実装されており、本プロシージャのパラメータ EvaluationIntervalEpochs に任意の値を入れることでプロット間隔を指定できます。train_dl_modelを実行することにより自動的に学習過程がプロットされグラフで表示されます。++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Q. 分類結果の内訳確認(Confusion Matrix)はgen_interactive_confusion_matrixでおこなっていましたが、HALCON19.11以降ではどのようにすれば良いでしょうか。A.分類結果の内訳確認を行う場合は下記のdev_display_classification_evaluationにより確認できます。例:dev_display_classification_evaluation (EvaluationResult, EvalParams, GenParamEvalDisplay, WindowHandleDict)++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Q. 分類器の生成・保存を行うにはどのようにすれば良いでしょうか。従来は分類器の読み込みは「read_dl_classifier」、保存は「write_dl_classifier」を使用していましたが、HALCON19.11以降では分類器の生成・保存を行うにはどのようにすれば良いでしょうか。A.分類器はMVTecが生成しているプレトレーニングの.hdlファイルを下記のように読み込みハンドルを生成することによりトレーニングを開始できます。ModelFileName:='pretrained_dl_classifier_compact.hdl'read_dl_model (ModelFileName, DLModelHandle)分類器の保存はtrain_dl_modelプロシージャ内でwrite_dl_modelのオペレータを使用して自動的にスコアが高い分類器が保存されます。'model_best.hdl'という名称で保存されます。明示的に最終結果の分類器を保存したい場合は、下記のようにtrain_dl_modelの後にwrite_dl_modelを使用することで明示的に保存できます。write_dl_model(DLModelHandle,'model_final.hdl')++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Q. 誤分類画像の評価を行うにはどのようにすれば良いでしょうか。A. 誤分類画像の評価を行う場合は、dev_display_dl_interactive_confusion_matrix 下記のオペレータを実行することにより、表示されるMatrixの部分をクリックすると対象の画像を確認することができます。※「Continue」ボタンで終了できます。dev_display_dl_interactive_confusion_matrix (DLDataset, EvaluationResult, [])++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Q. 従来はプロシージャ「dev_display_dl_classifier_heatmap」でヒートマップの評価をしていましたが、HALCON19.11以降ではヒートマップの評価を行うにはどのようにすれば良いでしょうか。A. ヒートマップについても新たなプロシージャが実装されました。ヒートマップ評価は下記のgen_dl_model_classification_heatmapのプロシージャを使用し、 dev_display_dl_dataの「KeyForDisplay」を'heatmap_grad_cam'にすることでヒートマップの画像を表示することができます。※サンプルプログラムではHeatmapMethod := 'heatmap_grad_cam'としております。gen_dl_model_classification_heatmap (DLModelHandle, DLSample, DLResult, HeatmapParam)dev_display_dl_data (DLSample, DLResult, DLDataset, HeatmapMethod, [], WindowHandleDict)++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Q. 作成した分類器で実際の推論評価を行うにはどのようにすれば良いでしょうか。A. 1. 分類器の読み込み作成した分類器を読み込むためには、read_dl_modelを使用してRetrainedModelFileNameに作成した分類器のファイル名を記入します。サンプルプログラムではRetrainedModelFileName:='classify_pill_defects.hdl'というファイル名を読み込んでおります。トレーニングプログラム:「classify_pill_defects_deep_learning_2_train.hdev」のトレーニングで作成したmodel_best.hdlに変更すると学習した分類器を読み込むことができます。read_dl_model (RetrainedModelFileName, DLModelHandle)2. 推論の実行入力画像をapply_dl_modelで実行することにより推論が可能です。apply_dl_model (DLModelHandle, DLSampleBatch, [], DLResultBatch)++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Q. 従来はバッチサイズを分割してGPUに転送するためのサイズをパラメータ「'batch_size_device'」で指定していましたが、HALCON19.11以降ではどのパラメータを調整すれば良いでしょうか。A. HALCON19.11からGPUの転送するためのパラメータが下記のように変更されました。【変更オペレータ/パラメータ】 set_dl_classifier_param / batch_size_device→set_dl_model_param / batch_size_multiplier下記のように、BatchSizeMultiplierに数値を入力することで調整することが可能です。set_dl_model_param (DLModelHandle, 'batch_size_multiplier', BatchSizeMultiplier)サンプルプログラムである「classify_pill_defects_deep_learning_2_train.hdev」の230行目付近にて設定可能です。また、設定時の注意点を下記に記載します。//////////////////////////batch_size:GPUに一度に転送される画像枚数batch_size_multiplier:実際のバッチサイズを計算する際の乗数batch_size * batch_size_multiplier:実際のバッチサイズGPUのメモリの容量によってはbatch_sizeが大きいと画像がGPUに転送しきれずにエラーが発生します。その際はbatch_sizeの値を小さくすることで画像の転送量を小さくすることで解消します。このとき、バッチサイズが小さくなることでトレーニングの結果が変わってしまうことを避けるためにbatch_size_multiplierをご活用ください。例えば、batch_size=128およびbatch_size_multiplier=1と、batch_size=64およびbatch_size_multiplier=2は等価です。一般的にバッチサイズは大きい方がトレーニングが良好な結果となりますが、GPUのメモリ容量が小さいことでバッチサイズを大きく設定できない場合に有効です。////////////////////////// 添付ファイルタイトルHALCON18.11とHALCON19.11以降のHALCONバージョンの画像分類機能の仕様変更についてURL 名000007648公開状況公開済み検証状況公開済み