情報メディア基礎ゼミ/2019/第4回
をテンプレートにして作成
開始行:
**機械学習による図形推定 [#e2875e85]
機械学習ライブラリ[[ML.net:https://docs.microsoft.com/ja-...
今回は,楕円と四角どちらかを推定する,二項分類を行う.
#ref(./shapepredict.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...
StrokeData input;
//input に ストロークを特徴ベクトル化...
StrokeData[] inputdata = new[] { inpu...
IDataView batchinput = mlContext.Data...
IDataView predictions = strokePredict...
IEnumerable<StrokePredict> strokePred...
foreach(StrokePredict sp in strokePre...
{
AddMessage($"Prediction: {(Conver...
var pathgeom = (PathGeometry)draw...
var rect = pathgeom.Bounds;
if (sp.Prediction == true) //true...
{
var ellipse = new Windows.UI....
Stroke = new SolidColorBr...
StrokeThickness = 1
};
ellipse.Width = rect.Width;
ellipse.Height = rect.Height;
MainCanvas.Children.Add(ellip...
Canvas.SetLeft(ellipse, rect....
Canvas.SetTop(ellipse, rect.Y);
}
else
{
var rectangle = new Windows.U...
{
Stroke = new SolidColorBr...
StrokeThickness = 1
};
rectangle.Width = rect.Width;
rectangle.Height = rect.Height;
MainCanvas.Children.Add(recta...
Canvas.SetLeft(rectangle, rec...
Canvas.SetTop(rectangle, rect...
}
}
Shapeクラスの位置指定はCanvas.Set〜メソッドで行う.
Canvas.SetLeft(ellipse, rect.X);
Canvas.SetTop(ellipse, rect.Y);
**ストロークから特徴ベクトルの生成 [#ea8301d7]
ストロークの点群そのままでは,機械学習に使用できないため...
今回は,ストロークを構成する点群の差分ベクトル(Pi+1 - Pi...
#ref(./vector.png);
ヒント:
StrokeData input;
input = new StrokeData();
input.DirCount = new float[360];
//点群全体に以下の処理
//差分ベクトルの角度をMath.Atan2で算出し0〜359整数値に変...
input.DirCount[deg] += 1.0f;
//一通り終わったら全体から最大値を求める->max
//すべてをmaxで割り正規化
input.DirCount[i] /= max;
**その他ヒント [#b071af12]
Windows.UI.Xaml.Shapes.Pathから点群,PolyLineSegmentを取...
private PolyLineSegment GetPolyLineSegment(Window...
{
var pathgeom = (PathGeometry)src.Data;
var pathfig = pathgeom.Figures[0];
return (PolyLineSegment)pathfig.Segments[0];
}
**課題提出方法 [#r54a0cd6]
招待されているBoxアップロードフォルダ「情報メディア基礎ゼ...
ファイル名:XXFIXXX_5th.zip(例:18FI999_5th.zip)
''提出締め切り:7月14日(金) 23:59''
BOXアップロードフォルダの招待メールが来ていない方は森谷ま...
**課題提出方法 [#r54a0cd6]
招待されているBoxアップロードフォルダ「情報メディア基礎ゼ...
ファイル名:XXFIXXX_6th.zip(例:18FI999_6th.zip)
''提出締め切り:7月21日(金) 23:59''
BOXアップロードフォルダの招待メールが来ていない方は森谷ま...
*任意課題 [#k5aba3e3]
ストロークの色や太さを変更できる,図形補間のオンオフ,画...
ヒント:Shapeクラスの図形もXAMLからUI上に配置し,イベント...
<Ellipse x:Name="PenColorBlack" Margin="10, 10, 10, 10" ...
<Ellipse x:Name="PenColorGreen" Margin="10, 10, 10, 10" ...
#ref(./advance.gif,50%);
**課題提出方法 [#r54a0cd6]
招待されているBoxアップロードフォルダ「情報メディア基礎ゼ...
ファイル名:XXFIXXX_6th_advance.zip(例:18FI999_6th_adva...
''提出締め切り:7月21日(金) 23:59''
BOXアップロードフォルダの招待メールが来ていない方は森谷ま...
終了行:
**機械学習による図形推定 [#e2875e85]
機械学習ライブラリ[[ML.net:https://docs.microsoft.com/ja-...
今回は,楕円と四角どちらかを推定する,二項分類を行う.
#ref(./shapepredict.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...
StrokeData input;
//input に ストロークを特徴ベクトル化...
StrokeData[] inputdata = new[] { inpu...
IDataView batchinput = mlContext.Data...
IDataView predictions = strokePredict...
IEnumerable<StrokePredict> strokePred...
foreach(StrokePredict sp in strokePre...
{
AddMessage($"Prediction: {(Conver...
var pathgeom = (PathGeometry)draw...
var rect = pathgeom.Bounds;
if (sp.Prediction == true) //true...
{
var ellipse = new Windows.UI....
Stroke = new SolidColorBr...
StrokeThickness = 1
};
ellipse.Width = rect.Width;
ellipse.Height = rect.Height;
MainCanvas.Children.Add(ellip...
Canvas.SetLeft(ellipse, rect....
Canvas.SetTop(ellipse, rect.Y);
}
else
{
var rectangle = new Windows.U...
{
Stroke = new SolidColorBr...
StrokeThickness = 1
};
rectangle.Width = rect.Width;
rectangle.Height = rect.Height;
MainCanvas.Children.Add(recta...
Canvas.SetLeft(rectangle, rec...
Canvas.SetTop(rectangle, rect...
}
}
Shapeクラスの位置指定はCanvas.Set〜メソッドで行う.
Canvas.SetLeft(ellipse, rect.X);
Canvas.SetTop(ellipse, rect.Y);
**ストロークから特徴ベクトルの生成 [#ea8301d7]
ストロークの点群そのままでは,機械学習に使用できないため...
今回は,ストロークを構成する点群の差分ベクトル(Pi+1 - Pi...
#ref(./vector.png);
ヒント:
StrokeData input;
input = new StrokeData();
input.DirCount = new float[360];
//点群全体に以下の処理
//差分ベクトルの角度をMath.Atan2で算出し0〜359整数値に変...
input.DirCount[deg] += 1.0f;
//一通り終わったら全体から最大値を求める->max
//すべてをmaxで割り正規化
input.DirCount[i] /= max;
**その他ヒント [#b071af12]
Windows.UI.Xaml.Shapes.Pathから点群,PolyLineSegmentを取...
private PolyLineSegment GetPolyLineSegment(Window...
{
var pathgeom = (PathGeometry)src.Data;
var pathfig = pathgeom.Figures[0];
return (PolyLineSegment)pathfig.Segments[0];
}
**課題提出方法 [#r54a0cd6]
招待されているBoxアップロードフォルダ「情報メディア基礎ゼ...
ファイル名:XXFIXXX_5th.zip(例:18FI999_5th.zip)
''提出締め切り:7月14日(金) 23:59''
BOXアップロードフォルダの招待メールが来ていない方は森谷ま...
**課題提出方法 [#r54a0cd6]
招待されているBoxアップロードフォルダ「情報メディア基礎ゼ...
ファイル名:XXFIXXX_6th.zip(例:18FI999_6th.zip)
''提出締め切り:7月21日(金) 23:59''
BOXアップロードフォルダの招待メールが来ていない方は森谷ま...
*任意課題 [#k5aba3e3]
ストロークの色や太さを変更できる,図形補間のオンオフ,画...
ヒント:Shapeクラスの図形もXAMLからUI上に配置し,イベント...
<Ellipse x:Name="PenColorBlack" Margin="10, 10, 10, 10" ...
<Ellipse x:Name="PenColorGreen" Margin="10, 10, 10, 10" ...
#ref(./advance.gif,50%);
**課題提出方法 [#r54a0cd6]
招待されているBoxアップロードフォルダ「情報メディア基礎ゼ...
ファイル名:XXFIXXX_6th_advance.zip(例:18FI999_6th_adva...
''提出締め切り:7月21日(金) 23:59''
BOXアップロードフォルダの招待メールが来ていない方は森谷ま...
ページ名: