情報メディア基礎ゼミ/2019/第5回
をテンプレートにして作成
開始行:
**機械学習による図形推定 [#e2875e85]
機械学習ライブラリ[[ML.net:https://docs.microsoft.com/ja-...
その前段階として,推定結果をテキストで表示する.
今回は,楕円と四角どちらかを推定する,二項分類を行う.
#ref(./predicttext.gif,50%);
**ML.netのインストール [#sf3d923f]
ML.netは.NET standard 2.0に依存している.UWPで.NET standa...
ソリューションエクスプローラーから,Kisozemiプロジェクト...
#ref(./target.png,50%);
再起動後,[プロジェクト]-[NuGetパッケージの管理]を開き,[...
#ref(./nuget.png,50%);
**学習モデルの読み込み [#r5ec9fc9]
本来,今回のような分類の機械学習を行う場合,学習データの...
しかし,時間も限られているため,今回はすでに作成されてい...
以下のmodel.zipは,楕円と四角の1ストロークで描いた図形を...
#ref(./model.zip);
model.zipは,プロジェクトのAssetsフォルダにドラッグ&ドロ...
#ref(./modelzip.png);
適当なButtonを用意し,Clickイベントでmodel.zipを読み込む.
ML.netを使用するため,usingに以下を追加:
using Microsoft.ML;
using Microsoft.ML.Data;
クラスのメンバに以下を追加:
MLContext mlContext = null;
ITransformer strokePredictModel = null;
クリックイベント内で実際にmodel.zipを読み込む,''非同期処...
Windows.Storage.StorageFolder installedFolder...
Windows.Storage.StorageFolder assetsFolder = ...
Windows.Storage.StorageFile modelFile = await...
mlContext = new MLContext();
//Define DataViewSchema for data preparation ...
DataViewSchema modelSchema;
// Load trained model
using (System.IO.Stream stream = await modelF...
{
strokePredictModel = mlContext.Model.Load...
stream.Flush();
}
''注意''
UWPで作成されるアプリはiOSやAndroidのアプリ同様に,端末内...
そのため,
Windows.Storage.StorageFolder installedFolder...
Windows.Storage.StorageFolder assetsFolder = ...
によって,プロジェクトのAssetsフォルダの場所を取得し,そ...
Windows.Storage.StorageFolder storageFolder ...
また上記では,アプリが自由に使えるフォルダを取得できる.
**図形の推定 [#ab8dd1e6]
以下の.csファイルをプロジェクトに追加する.中には機械学習...
#ref(./StrokeData.cs);
学習モデルを読み込んだ状態であれば,ストロークを描き終え...
以下のdrawingStrokeは描画中のWindows.UI.Xaml.Shapes.Path...
private void MainCanvas_PointerReleased(object sen...
{
//drawingStrokeがnullでなければ,描き終わった...
if (drawingStroke != null)
{
if (strokePredictModel != null)
{
var predEngine = mlContext.Model.Creat...
var result = predEngine.Predict(GetStr...
if (result.Prediction)
{
AddMessage("Ellipse");
}
else
{
AddMessage("Rect");
}
}
drawingStroke = null;
}
}
private void AddMessage(string str)
{
StatusBlock.Text += str + System.Environment....
StatusBlockScroll.ChangeView(0, StatusBlockSc...
}
StrokeData GetStrokeData(Windows.UI.Xaml.Shapes.P...
{
StrokeData data = new StrokeData();
data.DirCount = new float[360];
//DirCountにに ストロークを特徴ベクトル化した...
return data;
}
**ストロークから特徴ベクトルの生成 [#ea8301d7]
ストロークの点群そのままでは,機械学習に使用できないため...
今回は,ストロークを構成する点群の差分ベクトル(Pi+1 - Pi...
#ref(./vector.png);
ヒント:
data.DirCount = new float[360];
//点群全体に以下の処理
//差分ベクトルの角度をMath.Atan2で算出し0〜359整数値に変...
data.DirCount[deg] += 1.0f;
//一通り終わったら全体から最大値を求める->max
//すべてをmaxで割り正規化
data.DirCount[i] /= max;
**課題提出方法 [#r54a0cd6]
招待されているBoxアップロードフォルダ「情報メディア基礎ゼ...
ファイル名:XXFIXXX_5th.zip(例:18FI999_5th.zip)
''提出締め切り:6月6日(金) 23:59''
BOXアップロードフォルダの招待メールが来ていない方は森谷ま...
終了行:
**機械学習による図形推定 [#e2875e85]
機械学習ライブラリ[[ML.net:https://docs.microsoft.com/ja-...
その前段階として,推定結果をテキストで表示する.
今回は,楕円と四角どちらかを推定する,二項分類を行う.
#ref(./predicttext.gif,50%);
**ML.netのインストール [#sf3d923f]
ML.netは.NET standard 2.0に依存している.UWPで.NET standa...
ソリューションエクスプローラーから,Kisozemiプロジェクト...
#ref(./target.png,50%);
再起動後,[プロジェクト]-[NuGetパッケージの管理]を開き,[...
#ref(./nuget.png,50%);
**学習モデルの読み込み [#r5ec9fc9]
本来,今回のような分類の機械学習を行う場合,学習データの...
しかし,時間も限られているため,今回はすでに作成されてい...
以下のmodel.zipは,楕円と四角の1ストロークで描いた図形を...
#ref(./model.zip);
model.zipは,プロジェクトのAssetsフォルダにドラッグ&ドロ...
#ref(./modelzip.png);
適当なButtonを用意し,Clickイベントでmodel.zipを読み込む.
ML.netを使用するため,usingに以下を追加:
using Microsoft.ML;
using Microsoft.ML.Data;
クラスのメンバに以下を追加:
MLContext mlContext = null;
ITransformer strokePredictModel = null;
クリックイベント内で実際にmodel.zipを読み込む,''非同期処...
Windows.Storage.StorageFolder installedFolder...
Windows.Storage.StorageFolder assetsFolder = ...
Windows.Storage.StorageFile modelFile = await...
mlContext = new MLContext();
//Define DataViewSchema for data preparation ...
DataViewSchema modelSchema;
// Load trained model
using (System.IO.Stream stream = await modelF...
{
strokePredictModel = mlContext.Model.Load...
stream.Flush();
}
''注意''
UWPで作成されるアプリはiOSやAndroidのアプリ同様に,端末内...
そのため,
Windows.Storage.StorageFolder installedFolder...
Windows.Storage.StorageFolder assetsFolder = ...
によって,プロジェクトのAssetsフォルダの場所を取得し,そ...
Windows.Storage.StorageFolder storageFolder ...
また上記では,アプリが自由に使えるフォルダを取得できる.
**図形の推定 [#ab8dd1e6]
以下の.csファイルをプロジェクトに追加する.中には機械学習...
#ref(./StrokeData.cs);
学習モデルを読み込んだ状態であれば,ストロークを描き終え...
以下のdrawingStrokeは描画中のWindows.UI.Xaml.Shapes.Path...
private void MainCanvas_PointerReleased(object sen...
{
//drawingStrokeがnullでなければ,描き終わった...
if (drawingStroke != null)
{
if (strokePredictModel != null)
{
var predEngine = mlContext.Model.Creat...
var result = predEngine.Predict(GetStr...
if (result.Prediction)
{
AddMessage("Ellipse");
}
else
{
AddMessage("Rect");
}
}
drawingStroke = null;
}
}
private void AddMessage(string str)
{
StatusBlock.Text += str + System.Environment....
StatusBlockScroll.ChangeView(0, StatusBlockSc...
}
StrokeData GetStrokeData(Windows.UI.Xaml.Shapes.P...
{
StrokeData data = new StrokeData();
data.DirCount = new float[360];
//DirCountにに ストロークを特徴ベクトル化した...
return data;
}
**ストロークから特徴ベクトルの生成 [#ea8301d7]
ストロークの点群そのままでは,機械学習に使用できないため...
今回は,ストロークを構成する点群の差分ベクトル(Pi+1 - Pi...
#ref(./vector.png);
ヒント:
data.DirCount = new float[360];
//点群全体に以下の処理
//差分ベクトルの角度をMath.Atan2で算出し0〜359整数値に変...
data.DirCount[deg] += 1.0f;
//一通り終わったら全体から最大値を求める->max
//すべてをmaxで割り正規化
data.DirCount[i] /= max;
**課題提出方法 [#r54a0cd6]
招待されているBoxアップロードフォルダ「情報メディア基礎ゼ...
ファイル名:XXFIXXX_5th.zip(例:18FI999_5th.zip)
''提出締め切り:6月6日(金) 23:59''
BOXアップロードフォルダの招待メールが来ていない方は森谷ま...
ページ名: