ソースコンストラクト

ソースコンストラクトには、AI モデルのトレーニングに使われるデータセットに関するすべての情報が含まれます。この情報は、次の例に示すように、4 つのブロックに分割されます。

source:
    bind = "/DM-Dash/sentiment/data.csv" ;
    input:
        x ~ from "Review"
            -> text: [100] -> TextDataGenerator: [nb_words = 20000] ;
    output:
        y ~ from "Label" -> flat: [1] -> FlatDataGenerator: [] ;
    params:
        batch_size = 64,
        shuffle_init = True;

Blocks

ソースコンストラクトには必要なブロックが4つあります。

  • bind トレーニング データを含む .csv ファイルへの完全パス を指定します。csv ファイルの最初の行には、列のラベルが含まれている必要があります。
bind = "/DM-Dash/path/to/my/data.csv" ;
  • input これは、入力データが何であるかを指定し、architecture construct で使用される変数名を割り当ててニューラルフローを定義します。この宣言の構文は次のとおりです。
input: variable ~ from "column_label" -> data_type: [description] -> DataGenerator: [options] ;

有効なdata_typeおよび DataGenerator の値とオプションは [以下で詳しく説明します] (#data)

テキスト入力の例:

input:
    x ~ from "Review"
        -> text: [100]
        -> TextDataGenerator: [nb_words = 20000] ;

注: NML は空白を無視します。同じ宣言を 1 行に表示することができます。

input: x ~ from "Review" -> text: [100] -> TextDataGenerator: [nb_words = 20000] ;
  • output これは入力宣言と同じですが、出力データに対応します。構文は同じです。

ベクトル出力の例:

output:
    y ~ from "Label"
        -> flat: [2]
        -> FlatDataGenerator: [] ;
  • params これは、パラメーターのコンマ区切りのリストです。使用可能なパラメータ(デフォルト値):

    • batch_size = 64 - ミニバッチサイズ
    • validation_split = 0.1 -トレーニングから差し控え、検証に使用するデータの割合。
    • shuffle = True -各トレーニングエポックの後にデータをシャッフルします。
    • shuffle_init = False - 最初のトレーニングエポックの前にデータをシャッフルします。
    • number_validation = None - この数が設定されている場合は、validation_split パラメーターをオーバーライドします。

例:

params: shuffle = False, batch_size = 32 ;

Data

AI Studio は、フラット ベクター、テキスト、画像、オーディオ、およびビデオの 5 つの最も一般的なデータ型と対話するためのシンプルなインターフェイスを提供します。AI Studio では、DataGenerator を使用して、メモリ内のすべてを保持するのではなく、ディスクからデータをストリーミングします。これらの DataGenerator には、異なるデータ型の前処理を実行する機能が制限されています。

Vectors

十分な前処理を使用すると、すべてがの単一ベクトルの数値として表すことができます。

次の入力ブロックについて考えてみましょう。

input: x ~ from "Data" -> flat: [10] -> FlatDataGenerator: [] ;

列 " Data " には、"|" で区切られた 10 個の数値が含まれています。

FlatDataGenerator は、整数値から分類ベクトルを自動的に入力することもできます。

次の出力ブロックについて考えてみましょう。

output: y ~ from "Class" -> flat: [10] -> FlatDataGenerator: [] ;

列 "Class" に 0 ~ 9 の整数が含まれています。

この場合、FlatDataGenerator は自動的に分類整数を正しい列に 1 を持つゼロのベクトルに変換します。

注:現時点では、FlatDataGeneratorは前処理引数を受け取れません。

Text

この入力ブロックについて考えてみましょう。

input:
    x ~ from "Review"
        -> text: [100]
        -> TextDataGenerator: [nb_words = 20000] ;

csv ファイルの "Review"列には、テキストが含まれている必要があります。.

テキスト データ型では、トレーニングに使用される各部分データの単語数を宣言する必要があります。この宣言は、100 ワードのベクトルを期待するようにコンパイラに指示します。

TextDataGenerator は、フィルタリング、トークン化、埋め込み、または切り捨てによって、そのベクターへの生のテキストの前処理を処理します。辞書のサイズを設定する引数 nb_words は必項です。追加の引数は、コンマ区切りリストで追加できます。

  • 既定値を持つ引数:
    • filters = '!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n'- フィルタ処理する文字の単一引用符 (') リスト。
    • lower = True - 大文字と小文字を無視します。
    • split = " " - 単語区切り記号
    • padding = 'pre' または 'post' - データに十分な単語がない場合は、どこに埋め込むか。
    • truncating = 'pre' または 'post' - データ内の単語が多すぎる場合に切り捨てる場所。
    • value = 0.0 - 埋め込みに使用される値
    • char_level = False - 文字または単語をエンコードします。

Images

次の入力ブロックについて考えてみましょう。

input:
    x ~ from "Image"
        -> image: [shape=[32,32],channels=3]
        -> ImageDataGenerator[rescale=0.00392156862];

"Image" 列にはイメージ ファイルへのパスが含まれます。

画像データ型は、形状 = [高さ、幅] とチャネル数 (1 = グレースケールまたは 3 = RGB) を記載する必要があります。

ImageDataGenerator は、イメージを読み込み、前処理して、指定された図形にダウンサンプリングします。ImageDataGenerator は、リアルタイムデータ拡張のための数種類の前処理オプションを提供します。

  • 引数とそのデフォルト値
    • 'featurewise_center = False' - データセットに対する入力平均を 0 に設定します(機能的)。
  • 'samplewise_center = False' - 各サンプル平均を 0 に設定します。
  • 'featurewise_std_normalization = False' - 入力をフィーチャ単位でデータセットの std で除算します。
  • 'samplewise_std_normalization = False' - 各入力を標準偏差で除算
  • 'zca_whitening = False'- ZCA ホワイトニングを適用します。
  • rotation_range = 0 [integer] - ランダム回転の度範囲。
  • width_shift_range = 0.0 float - ランダムな水平シフトの範囲。
  • 'height_shift_range = 0.0` [float] (全高の割合) - ランダムな垂直シフトの範囲。
  • shear_range = 0.0 [float] せん断強度 (ラジアンとして反時計回りのせん断角度)
  • zoom_range = 0.0 [float] or [lower, upper]ランダムズームの範囲。浮動小数点数の場合、[下、上] = [1-zoom_range, 1+zoom_range]。
  • channel_shift_range = 0.0 [float] - ランダムチャネルシフトの範囲。
  • fill_mode = 'nearest'- {"constant", "nearest", "reflect", "wrap"}のいずれか。入力の境界外のポイントは、指定されたモードに従って塗りつぶされます。
  • cval = 0.0 [float or integer]. fill_mode = "定数" の場合に境界外のポイントに使用される値。
  • 'horizontal_flip = False' - 入力をランダムに水平方向に反転します。
  • 'vertical_flip = False' - 入力をランダムに垂直方向に反転します。
  • 'rescale = None' - (他の変換を適用する前に) 指定された値でデータを乗算します。

Audio

NeoPulse® AI Studioバージョン 1.2.0 以降はオーディオファイルを入力として受け取ることができます。次の入力ブロックについて考えてみましょう。

input:
    x ~ from "Audio"
        -> audio: [maxlen = 1366, nbands = 96]
        -> AudioDataGenerator: [];

"オーディオ" 列には、オーディオ ファイル (.mp3、.ogg、.wav、.au、.aiff、.flac、.au) へのパスを含めます。

オーディオ データ型では、maxlen タイムステップ数と nbandsスペクトログラムに含めるフーリエバンドの数の 2 つのパラメータを指定する必要があります。

AudioDataGenerator は、オーディオファイルの前処理と抽出機能を行います。

  • 引数とデフォルト
    • frame_length = None FFT のタイムステップ数の計算に使用される高速フーリエ変換 (秒単位) を実行するウィンドウの長さ。デフォルト値 None は、FFT のタイム ステップ数を 2048 に設定します。
    • frame_stride = None 各 FFT の計算時にストライドするタイムステップの数の計算に使用される時間 (秒単位)。デフォルト値 None は、タイムステップ数を 512 に設定します。

Video

バージョン 1.2.0 以降、NeoPulse® AI Studio はビデオファイルを入力として受け取ることができます。libavcodec ライブラリでサポートされているファイル形式をすべてAI Studio で使用できます。

次の入力ブロックについて考えてみましょう。

input:
    x ~  from "Video"
      -> video: [shape=[80, 80], channels=3, seqlength=32, video_duration=5.0, fps=8.0, framesPerVideo=40]
      -> ImageDataGenerator: [rescale = 0.003921568627451] ;

csv ファイルの列 "Video" には、ビデオ ファイルへのパスが含まれている必要があります。

すべてのビデオはフレームに分割されます。「video」タイプの入力を指定する場合、その形状 = [高さ、幅]、カラーチャンネルの数 (1 = グレースケールまたは 3 = RGB)、およびシーケンスの長さ(ネットワークに入力される選択されたフレームの数)を宣言する必要があります。

リアルタイム データ拡張の3つのダウン サンプル オプションを次に示します。

  • 引数とデフォルト値

    • video_duration = None - 浮動小数点数または None で、生データからランダムにトリミングされるビデオの秒数を設定します。 video_duration = Noneの場合は、未加工の動画の長さに設定され、未加工の動画はトリミングされずに分解されます。
    • framesPerVideo = None - 整数またはNone、トリミングされたビデオから分解するフレーム数を設定します。 seqlengthよりも多くのframesPerVideo の場合、トリミングされたビデオから分解されたすべてのフレームから seqlengthのフレーム数がランダムに順番に選択されます。 framesPerVideo が「None」の場合、fps が設定されている場合、 framesPerVideo は ' fps * video_duration.に設定されます。 fps が設定されていない場合は、 seqlength に設定されます。

    • fps = None - 浮動小数点数または None の場合は、ビデオの 1 秒ごとに分解されたフレームを設定します。 seqlength,よりも多くのフレームがビデオから分解される場合、 seqlength,のフレーム数は、トリミングされたビデオから分解されたすべてのフレームからランダムに順番に選択されます。 fps が「None」の場合は、 framesPerVideo / video_durationに設定されます。

ビデオをフレームに分解した後、ImageDataGenerator を使用して、上記のようにイメージを前処理およびダウンサンプリングします。

注:トレーニングセット内のすべてのビデオがさらに多くのフレームに分解されるので、seqlengthの選択には注意が必要です。ハード ディスクの空き領域が大量に必要になる場合があります。

境界ボックス

次の入力ブロックについて考えてみましょう。

input:
    x ~  from "Label"
      -> bbox: []
      -> BBoxDataGenerator: [num_classes = 20] ;

csv ファイルの列 "Label" には、イメージ内の境界ボックスのリストの文字列が含まれている必要があります。

[境界ボックス] 列は "[[xmin, ymin, xmax, ymax, class_label],...]" の形式の下にする必要があります。ここで、xmin、ymin、xmax、ymax は境界ボックスの正規化された座標です。たとえば、[height=200,width=100] のサイズを持つイメージに[x_min_1=60,y_min_1=20,x_max_1=80,y_max_1=150,class_1=0]、[x_min_2=30,y_min_2=50,x_max_2=70,y_max_2==90,class_2=1]の2つの境界ボックスがあるとします。まず、x,y 座標、xmin = x_min/幅、ymin = y_min/高さ、xmax = x_max/幅、ymax = y_max/高さを正規化する必要があります。よって、"[[0.6, 0.1, 0.8, 0.75, 0],[0.3, 0.25, 0.7, 0.45, 1]]".となります。

BBoxDataGenerator は、境界ボックス ラベルの読み込みと前処理を行います。ユーザーは、引数num_classes のクラス数を宣言する必要があります。

DICOM(医学用デジタルイメージングとコミュニケーション)

次の入力ブロックについて考えてみましょう。

input:
    x ~  from "Data"
      -> dicom: [shape=[64, 64, 64, 1]]
      -> DicomDataGenerator: [spacing=[2.0, 2.0, 2.0], normalise_zero_to_one=True, flip=True] ;

列 "データ" には、DICOM ファイルへのパスを含める必要があります。

Dicom データ型は、3D の場合はシェイプ = [height, width, depth, channels]、2D の場合は [height, width, channels] を宣言する必要があります。

DicomDataGenerator は、DICOM を読み込み、指定された図形にダウンサンプリングするように前処理します。DicomDataGenerator は、リアルタイムデータ拡張のための複数の前処理オプションがあります。 - 引数とデフォルト値

- `spacing = None` - 浮動小数点数またはNoneのリストで、トレーニング用の画像の間隔を設定します。
- `direction = None` - 浮動小数点数またはNoneのリストで、トレーニング用の画像の原点を設定します。
- `origin = None` - 浮動小数点数またはNoneのリストで、トレーニング用の画像の原点を設定します。
- `whitening = False` -ブール、ホワイトニング。画像をゼロ平均と単位分散に正規化します。
- `normalise_zero_to_one = False` - ブール、画像の正規化。[0, 1] の範囲に合わせてイメージを正規化します。
- `normalise_minus_one_to_one = False` -ブール、画像の正規化。[-1, 1] の範囲に合わせてイメージを正規化します。
- `flip = False`- ブール、ランダムに空間寸法を反転します。
- `add_gaussian_offset = False` - ブール、画像にガウスオフセットを追加します。各チャネルに個別にオフセットを追加します。
- `add_gaussian_noise = False`- ブール、画像にガウスノイズを追加します。