深層学習を使用したビデオとオプティカル フロー データのアクティビティ認識について

深層学習を使用したビデオとオプティカル フロー データのアクティビティ認識 - MATLAB & Simulink - MathWorks 日本の例を試しているのですが,「I3D ビデオ分類器の評価」の項の2つ目の例文にて,
numOutputs = 3;
mbq = createMiniBatchQueue(params.ValidationData, numOutputs, params);
を実行すると,次のようなエラーが出ます。なぜこのようなエラーが出るか教えていただきたいです。
次を使用中のエラー: matlab.io.datastore.FileDatastore/read (行 29)
次のファイルに ReadFcn @(f,u)readVideo(f,u,numFrames,numChannels,classes,isDataForTraining) の使い方によるエラー
です:
C:\Users\Harada\AppData\Local\Temp\hmdb51\hmdb51_org\kiss\The_Matrix_Revolutions_5_kiss_h_nm_np2_le_med_0.avi
関数 @(f,u)readVideo(f,u,numFrames,numChannels,classes,isDataForTraining)
(C:\Users\Harada\Documents\MATLAB\Examples\R2022a\deeplearning_shared\ActionRecognitionFromVideoOpticalFlowUsingDeepLearningExample\untitled.m
内) が見つかりません。
エラー: matlab.io.datastore.TransformedDatastore/read (行 232)
[data, info] = read(ds.UnderlyingDatastores{1});
エラー: getPreviewFromDatastore (行 9)
previewData = read(inputDatastore);
エラー: minibatchqueue (行 159)
numVariables = numel(getPreviewFromDatastore(originalDatastore));
エラー: untitled>createMiniBatchQueue (行 119)
mbq = minibatchqueue(datastore, numOutputs, ...
エラー: untitled (行 19)
mbq = createMiniBatchQueue(shuffled, numOutputs, params);

 Accepted Answer

Kojiro Saito
Kojiro Saito on 8 Jul 2024

0 votes

関数readVideoが見つからないというエラーが出ています。
readVideoは例題の下の方のサポート関数 (Supporting Functions)の中にありますが、例題のコードをコマンドウィンドウで実行すると末尾の関数が見つからないというエラーが出ます。
下記のコマンドで例題のライブスクリプトを開き、「ライブエディター」タブの「セクションの実行」や「実行して次に進む」のボタンを押して実行してみたら問題なくできると思います。
openExample('deeplearning_shared/ActionRecognitionFromVideoOpticalFlowUsingDeepLearningExample')

12 Comments

雄平
雄平 on 8 Jul 2024
ご回答いただきありがとうございます。
教えていただいた通りに試したところ、うまく実行できました。
本当にありがとうございました。
加えて質問なのですが、コマンドウィンドウではなく、エディターにexsampleをコピー&ペーストして実行した場合に上記のエラーが発生してしまいました(サポート関数も記入しています)。
この場合でもエラーは出てしまうのでしょうか?
Kojiro Saito
Kojiro Saito on 8 Jul 2024
コピー&ペーストして実行する際にエディタータブの「セクションの実行」や「実行して次に進む」で実行されていますか? それともコードを選択してF9で実行されていますか?
雄平
雄平 on 8 Jul 2024
「全てのセクションを実行します(F5)」で実行しています。
Kojiro Saito
Kojiro Saito on 8 Jul 2024
全てのセクションを実行する、だとスクリプトの末尾にあるローカル関数を認識するはずのですが変ですね。エディターにコピー&ペーストする際に元のライブスクリプト (ActionRecognitionFromVideoOpticalFlowUsingDeepLearningExample.mlx)から変更されたところは特にないでしょうか?
雄平
雄平 on 10 Jul 2024
Edited: 雄平 on 10 Jul 2024
返信遅くなり申し訳ありません。
元のライブスクリプトから変更した点はありません。
Kojiro Saito
Kojiro Saito on 11 Jul 2024
@雄平さん
私の環境ではライブスクリプトをmファイルにコピー&ペーストして、コード以外のコメント行を「%」でくくって全てを実行して問題なく実行できました。
念のため、お使いのuntitled.mを共有いただけますでしょうか。
雄平
雄平 on 16 Jul 2024
お待たせてして申し訳ありません。
コードを添付させていただきます。よろしくお願いいたします。
Kojiro Saito
Kojiro Saito on 16 Jul 2024
paramsが定義されていなくuntitled.mだけでは実行できないので、R2022aで元の例題のActionRecognitionFromVideoOpticalFlowUsingDeepLearningExample.mlxの「Evaluate Trained Network」の217行目までを実行してからuntitled.mを実行しましたが、エラーが出ず最後まで実行できました。
そもそもreadVideo関数が呼ばれていないので、質問のエラーを再現することができません。
雄平
雄平 on 1 Aug 2024
Moved: Kojiro Saito on 1 Aug 2024
サポート関数を必要としない例文はコマンドウィンドウで、必要とする例文はエディターでと実行していたのですが、この行為がエラーにつながるといったことはありますか?
また、加えて質問なのですが、51種類の動作を学習させたい場合、doTraining = falseをtrueにすることで学習可能になるのでしょうか?
無知で申し訳ありません。よろしくお願いいたします。
> サポート関数を必要としない例文はコマンドウィンドウで、必要とする例文はエディターでと
> 実行していたのですが、この行為がエラーにつながるといったことはありますか?
コマンドウィンドウとエディターの使い分けはエラーには関係ないです。
サポート関数、正確に言うとスクリプト内のローカル関数はコマンドウィンドウで実行すると定義されていないというエラーになるのでエディターで実行するのが正しいです。
ただ、添付いただいたuntitled.mのスクリプトではドキュメントの例題からのコピー漏れがあるので、実行結果が異なっているのではと推測されます。
> また、加えて質問なのですが、51種類の動作を学習させたい場合、doTraining = falseをtrueにすることで
> 学習可能になるのでしょうか?
doTraining = true;
にすると学習可能ですが、例題に
この例では、学習時間を短縮するために、データ セットに含まれる 51 のすべてのクラスではなく、5 つのアクション クラスを分類するようにアクティビティ認識ネットワークに学習させます。51 のすべてのクラスについて学習させる場合は useAllData を true に設定します。
と書いてありますので、51クラスを学習させるにはuseAllDatatrueにする必要があります。
useAllData = true;
雄平
雄平 on 1 Aug 2024
ご返答ありがとうございます。サポート関数の件についてはもう一度見直します。
また、学習の件についてですが、ライブエディター内にてご教授いただいた2つの変数をTrueにして実行したところ、下記のようなエラーが発生しました。catchというフォルダ名が使えないということでしょうか。
'catch' is not a valid class name. The input classes must be valid MATLAB variable names. For more details, see ISVARNAME.
classes = iValidateClasses(classes);
params = iParseInputs(classifierName,classes,nvp{:});
Kojiro Saito
Kojiro Saito on 2 Aug 2024
そのようですね。
hmdb51をダウンロードされたフォルダーのhmdb51_org\catch のフォルダー名をcatch2 などに変更し、サポート関数checkForHMDB51Folderclassesの文字列のcatch も合わせてcatch2 などに変更してみてください。

Sign in to comment.

More Answers (0)

Products

Release

R2024a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!