指定のデータセットからカスタムモデルを作成し、トレーニングを開始します。
次の表に、この AI タスクを使用する際に設定する必要があるプロパティ (アクセスに必要な資格情報) を示します。
|
PropertyKey |
ProviderType |
キー |
Alibaba |
- |
Amazon |
- |
Baidu |
- |
Google |
Service Account JSON |
IBM |
Visual Recognition キー |
Microsoft |
Custom Vision Training キー |
SAP |
- |
Tencent |
- |
さまざまな種類の花を分類するモデルを作成するとします。
最初に、タグ付きのデータを入手する必要があります。ここでは、Mamaev の Flowers Recognition データセットを使用します。
次に、2 つの条件を満たす GeneXus の「ジェネレーター」オブジェクトを提供する必要があります: 1) Data データタイプのコレクションを返す。 2) ページ番号とページサイズの 2 つの入力パラメーターを通じてページングが可能。
ここでは、次の 2 つの選択肢があります:
- データプロバイダーを使用する
たとえば Transaction オブジェクトにデータセットをロードする場合は、Skip 節と Count 節を使用して Data Provider オブジェクトを作成できます。プロパティ: Output = Data Collection = True ルール: parm(in:&pageNum, in:&pageSize); 変数: &pageSize: Numeric(4.0) &pageNum: Numeric(4.0) &inputMediaBlob: Blob &outputCategory: VarChar(40) ソース: DataCollection [ COUNT = &pageSize ] [ SKIP = (&pageNum - 1) * &pageSize ] { Dummy [ NoOutput ] { // get dataset involved attributes &inputMediaBlob = TransactionImage &outputCaregory = TransactionCategory.ToString() // load item Data { Input { Features { Value = &inputMediaBlob } } Output { Label = &outputCaregory } } } }
- プロシージャーを使用する
たとえばディレクトリーにデータセットがあり、すべての画像が {分類}_{インデックス}.png の形式になっている場合、次の Procedure オブジェクトでディレクトリーをスキャンできます。ルール: parm(in:&pageNum, in:&pageSize, out:&DataCollection); 変数: &pageSize: Numeric(4.0) &pageNum: Numeric(4.0) &i: Numeric(4.0) &BTM: Numeric(4.0) &TOP: Numeric(4.0) &directory: Directory &file: File &mediaFilePath: VarChar(512) &mediaCategory: VarChar(32) &data: Data, GeneXusAI.Custom &DataCollection: Data, GeneXusAI.Custom (collection) ソース: &i = 0 &BTM = (&pageNum - 1) * &pageSize + 1 &TOP = &pageSize * &pageNum &directory.Source = !"{path}/dataset" // ディレクトリ内のすべての画像を検索 for &file in &directory.GetFiles() &i += 1 do case case &i > &TOP // 範囲 [ &BTM,&TOP ] の上位のインデックスを除外 exit case &i < &BTM // 範囲 [ &BTM,&TOP ] の下位のインデックスを除外 // スキップ otherwise // データセットに関連する値の取得 &mediaFilePath = &file.GetAbsoluteName() &mediaCategory = &file.GetName() .ReplaceRegEx(!"_\d+\.png$",!"")// 例 "cat1_0001.png" --> "cat1" // アイテムのロード &data = new() &data.Input.Featrues.Add(&mediaFilePath) &data.Output.Label = &mediaCategory &DataCollection.Add(&data) endCase endFor
最後に、次のようにモデルを定義してトレーニングプロセスを開始できます:
&definition = new()
// モデル名の定義
&definition.Name = !"Flowers model"
// モデルデータセットの定義 (事前に定義した generator オブジェクトにリンク)
&definition.Dataset.Loader = link(MyGeneratorObject)
// モデル入力の定義
&feature = new()
&feature.Name = !"IMAGE"
&feature.Type = DataInputType.Media
&definition.Input.Features.Add(&feature)
// モデル出力の定義
&definition.Output.Type = DataOutputType.Label
// トレーニングプロセスの呼び出し
&Model = GeneXusAI.Custom.Train(&definition, &provider, &Messages)
注: 1 つのクラスに少なくとも 10 個のサンプルを含めるようにします: 8 個はトレーニング用、1 個はテスト用、1 個は検証用です。 データセットに十分なサンプル数がない場合は、指定された条件を満たしていない可能性があります。この場合は、ジェネレーターオブジェクトをコーディングするときに、この目的のために Data データタイプの Purpose フィールドを使用できます。
-
Provider の [ Key ] プロパティにファイルパスを設定する場合は、service-account.json ファイルが Web アプリケーションからアクセス可能である必要があります。
-
OpenSSL コマンドラインツールをインストールする必要があります。
インストールが正常に完了していることを確認するには、コマンドラインインターフェースに次のコマンドを入力します。 > openssl version
Windows OS を使用している場合は、openssl.exe が含まれるディレクトリーを PATH 環境変数に追加することを忘れないでください。
-
[ Storage Provider ] プロパティを「Google Cloud Storage」に設定し、関連するプロパティを service-account.json ファイルに従って設定する必要があります。バケットのリージョンが「us-central1」であることを確認します。リージョンが異なる場合は作成し、service-account.json ファイルを再作成する必要があります。
- このプロセスは (プロバイダーのサーバーで) サイレント実行されます。Check プロシージャーを呼び出すことで、トレーニングのステータスをポーリングできます。
- トレーニングの処理時間は、入力データセットによって異なります。
- ジェネレーターオブジェクトが次の 2 つのルールに従っていることが重要です:
1) Data データタイプのコレクションを返す。 2) ページ番号とページサイズの 2 つの入力パラメーターを通じてページングが可能。 また、ジェネレーターオブジェクトにはメインオブジェクトからもアクセスできる必要があります。このオブジェクトは GeneXusAI から動的に呼び出しされるためです。
プラットフォーム |
Web (.NET、.NET Core、Java)、スマートデバイス (Android、iOS) |
接続 |
オンライン |
このプロシージャーは、GeneXus 16 Upgrade 6 以降で利用できます。
|