WIL-PDL Reference ( .NET Framework ) 1.0.4
ベンチマークを計測するサンプルコード

ベンチマークを計測するサンプルコードです。
iterNum で繰り返し回数を指定します。


C# 版

  • 画像分類の場合: L.14- BenchMark()
  • アノマリー検出の場合: L.14- BenchMark()
  • 多視点画像分類の場合: L.133- BenchMarkMultiView()
  • 多視点アノマリー検出の場合: L.133- BenchMarkMultiView()
  • セマンティックセグメンテーションの場合: L.278- BenchMarkSegmentation()
  • パノプティックセグメンテーションの場合: L.278- BenchMarkSegmentation()
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Threading.Tasks;
6using FVIL;
7using FVIL.Data;
8using FVIL.PDL;
9
10namespace SamplesCS
11{
12 partial class Program
13 {
14 static void BenchMark(String modelPath, String imagePath, UInt32 iterNum)
15 {
16 // 閾値は任意、必要であれば引数としても良い
17 const Double threshold = 10.0;
18 // アノマリー検出での異常度マップ画像の型 ( UC8 または F32 )
19 const ImageType anomaly_map_image_type = ImageType.UC8;
20
21 // 計測回数のエラーチェック
22 if (0 >= iterNum)
23 {
24 Console.WriteLine("iterNum must be positive ( >0 )");
25 return;
26 }
27
28 try
29 {
30 var has_license = Model.CheckLicense();
31 if (false == has_license) { throw new Exception("no license"); }
32
33 // モデルファイルの読込を含むコンストラクタ ( インスタンスを作成して LoadModel() をする場合と同等 )
34 Model model = new Model(modelPath);
35
36 // 推論対象画像の読込
37 CFviImage image = new CFviImage(imagePath);
38
39 // 推論対象画像の有効性確認
40 var is_valid_img = model.IsValidImage(image);
41 if (false == is_valid_img) { throw new Exception("invalid image"); }
42
43 // アノマリー検出での異常度マップ画像
44 CFviImage anomaly_map = new CFviImage(image.HorzSize, image.VertSize, anomaly_map_image_type, 1);
45
46 // 計測用のストップウォッチ
47 System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
48
49 // 計測結果のリスト
50 long[] msecs = new long[iterNum];
51
52 var contents = "msec, score0,...";
53 Console.WriteLine("msec, score0,...");
54 for (var i = 0; i < iterNum; i++)
55 {
56 switch (model.ModelCategory)
57 {
58 case ModelCategory.Classification:// 画像分類
59 {
60 // 計測開始
61 sw.Start();
62
63 // 推論実行
64 var scores = model.PredictClassification(image);
65
66 // 計測終了
67 sw.Stop();
68
69 // 結果の文字列
70 contents = $"{(Double)sw.ElapsedTicks / (Double)System.Diagnostics.Stopwatch.Frequency * 1000}";
71 for (var i_score = 0; i_score < scores.Length; i_score++)
72 {
73 contents += $", {scores[i_score]}";
74 }
75 }
76 break;
77 case ModelCategory.AnomalyDetection:// アノマリー検出
78 {
79 // 計測開始
80 sw.Start();
81
82 // 推論実行
83 var tuple = model.PredictAnomaly(image, (float)threshold, anomaly_map);
84
85 // 計測終了
86 sw.Stop();
87
88 // 結果の文字列
89 //contents = $"{sw.ElapsedMilliseconds:000}";
90 contents = $"{(Double)sw.ElapsedTicks / (Double)System.Diagnostics.Stopwatch.Frequency * 1000}";
91 contents += ", " + (tuple.Item1 ? "anomaly" : "normal") + $", {tuple.Item2}";
92 }
93 break;
94 case ModelCategory.MultiViewCNN:
95 case ModelCategory.MultiViewAD:
96 case ModelCategory.SemanticSegmentation:
97 case ModelCategory.PanopticSegmentation:
98 case ModelCategory.Unknown:
99 default: throw new NotImplementedException($"unmatch model-category={model.ModelCategory}");
100 }
101
102 // リストへ格納
103 msecs[i] = sw.ElapsedMilliseconds;
104
105 Console.WriteLine(contents);
106
107 // ファイルに保存したいとき
108 // - "result.csv" は任意のパスを設定
109 // - 上記の contents 生成に改行を追加
110 //System.IO.File.AppendAllText("result.csv", contents + Environment.NewLine);
111
112 // 次の計測のためのリセット
113 sw.Reset();
114 }
115
116 // 全体の結果
117 Console.WriteLine($"Ave: {msecs.Average():.00}");
118 Console.WriteLine($"Min: {msecs.Min():.00}");
119 Console.WriteLine($"Max: {msecs.Max():.00}");
120 }
121 catch (CFviException ex)
122 {
123 Console.WriteLine($"ErrorCode={ex.ErrorCode}, Message={ex.Message}");
124 Console.WriteLine(ex.StackTrace);
125 }
126 catch (Exception ex)
127 {
128 Console.WriteLine($"Message={ex.Message}");
129 Console.WriteLine(ex.StackTrace);
130 }
131 }
132
133 static void BenchMarkMultiView(String modelPath, String imageFolder, UInt32 iterNum)
134 {
135 // 閾値は任意、必要であれば引数としても良い
136 const Double threshold = 10.0;
137 // アノマリー検出での異常度マップ画像の型 ( UC8 または F32 )
138 const ImageType anomaly_map_image_type = ImageType.UC8;
139
140 // 計測回数のエラーチェック
141 if (0 >= iterNum)
142 {
143 Console.WriteLine("iterNum must be positive ( >0 )");
144 return;
145 }
146
147 try
148 {
149 var has_license = Model.CheckLicense();
150 if (false == has_license) { throw new Exception("no license"); }
151
152 // モデルファイルの読込を含むコンストラクタ ( インスタンスを作成して LoadModel() をする場合と同等 )
153 Model model = new Model(modelPath);
154
155 // モデル種別のエラーチェック
156 switch (model.ModelCategory)
157 {
158 case ModelCategory.MultiViewCNN:
159 case ModelCategory.MultiViewAD:
160 break;
161 case ModelCategory.Unknown:
162 case ModelCategory.Classification:
163 case ModelCategory.AnomalyDetection:
164 case ModelCategory.SemanticSegmentation:
165 case ModelCategory.PanopticSegmentation:
166 default: throw new NotImplementedException($"unmatch model-category={model.ModelCategory}");
167 }
168
169 // 推論対象画像の読込と有効性の確認
170 List<CFviImage> target_images = new List<CFviImage>();
171 for (var i_img = 0; i_img < model.NumViews; i_img++)
172 {
173 // imageFolder フォルダ内に、0-index の通し番号の画像が保存されていることを想定
174 var img_path = System.IO.Path.Combine(imageFolder, String.Format("{0}.bmp", i_img));
175 var image = new CFviImage(img_path);
176
177 // 推論対象画像の有効性確認
178 var is_valid_img = model.IsValidImage(image);
179 if (false == is_valid_img) { throw new Exception("invalid image"); }
180
181 // 推論対象画像のリストに追加
182 target_images.Add(image);
183 }
184
185 // アノマリー検出での異常度マップ画像
186 CFviImage anomaly_map = new CFviImage(target_images[0].HorzSize, target_images[0].VertSize, anomaly_map_image_type, 1);
187
188 // 計測用のストップウォッチ
189 System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
190
191 // 計測結果のリスト
192 long[] msecs = new long[iterNum];
193
194 var contents = "msec, score0,...";
195 Console.WriteLine("msec, score0,...");
196 for (var i = 0; i < iterNum; i++)
197 {
198 // モデル種別のエラーチェック
199 switch (model.ModelCategory)
200 {
201 case ModelCategory.MultiViewCNN:
202 {
203 // 計測開始
204 sw.Start();
205
206 // 推論実行
207 var scores = model.PredictMultiViewCNN(target_images);
208
209 // 計測終了
210 sw.Stop();
211
212 // 結果の文字列
213 //contents = $"{sw.ElapsedMilliseconds:000}";
214 contents = $"{(Double)sw.ElapsedTicks / (Double)System.Diagnostics.Stopwatch.Frequency * 1000}";
215 for (var i_score = 0; i_score < scores.Length; i_score++)
216 {
217 contents += $", {scores[i_score]}";
218 }
219 }
220 break;
221 case ModelCategory.MultiViewAD:
222 {
223 // 計測開始
224 sw.Start();
225
226 // 推論実行
227 var tuple = model.PredictMultiViewAD(target_images, (float)threshold, anomaly_map);
228
229 // 計測終了
230 sw.Stop();
231
232 // 結果の文字列
233 //contents = $"{sw.ElapsedMilliseconds:000}";
234 contents = $"{(Double)sw.ElapsedTicks / (Double)System.Diagnostics.Stopwatch.Frequency * 1000}";
235 contents += ", " + (tuple.Item1 ? "anomaly" : "normal") + $", {tuple.Item2}";
236 }
237 break;
238 case ModelCategory.Unknown:
239 case ModelCategory.Classification:
240 case ModelCategory.AnomalyDetection:
241 case ModelCategory.SemanticSegmentation:
242 case ModelCategory.PanopticSegmentation:
243 default: throw new NotImplementedException($"unmatch model-category={model.ModelCategory}");
244 }
245
246
247 // リストへ格納
248 msecs[i] = sw.ElapsedMilliseconds;
249
250 Console.WriteLine(contents);
251
252 // ファイルに保存したいとき
253 // - "result.csv" は任意のパスを設定
254 // - 上記の contents 生成に改行を追加
255 //System.IO.File.AppendAllText("result.csv", contents + Environment.NewLine);
256
257 // 次の計測のためのリセット
258 sw.Reset();
259 }
260
261 // 全体の結果
262 Console.WriteLine($"Ave: {msecs.Average():.00}");
263 Console.WriteLine($"Min: {msecs.Min():.00}");
264 Console.WriteLine($"Max: {msecs.Max():.00}");
265 }
266 catch (CFviException ex)
267 {
268 Console.WriteLine($"ErrorCode={ex.ErrorCode}, Message={ex.Message}");
269 Console.WriteLine(ex.StackTrace);
270 }
271 catch (Exception ex)
272 {
273 Console.WriteLine($"Message={ex.Message}");
274 Console.WriteLine(ex.StackTrace);
275 }
276 }
277
278 static void BenchMarkSegmentation(String modelPath, String imagePath, UInt32 iterNum)
279 {
280 // 計測回数のエラーチェック
281 if (0 >= iterNum)
282 {
283 Console.WriteLine("iterNum must be positive ( >0 )");
284 return;
285 }
286
287 try
288 {
289 var has_license = Model.CheckLicense();
290 if (false == has_license) { throw new Exception("no license"); }
291
292 // モデルファイルの読込を含むコンストラクタ ( インスタンスを作成して LoadModel() をする場合と同等 )
293 Model model = new Model(modelPath);
294
295 // 推論対象画像の読込
296 CFviImage image = new CFviImage(imagePath);
297
298 // 推論対象画像の有効性確認
299 var is_valid_img = model.IsValidImage(image);
300 if (false == is_valid_img) { throw new Exception("invalid image"); }
301
302 // 計測用のストップウォッチ
303 System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
304
305 // 計測結果のリスト
306 long[] msecs = new long[iterNum];
307
308 var contents = "msec, score0,...";
309 Console.WriteLine("msec, score0,...");
310 for (var i = 0; i < iterNum; i++)
311 {
312 switch (model.ModelCategory)
313 {
314 case ModelCategory.SemanticSegmentation:// セマンティックセグメンテーション
315 {
316 // 計測開始
317 sw.Start();
318
319 // 推論実行: 後処理を行わない最も単純なメソッド
320 var segm_result_image = model.PredictSemanticSegmentation(image);
321
322 // 計測終了
323 sw.Stop();
324
325 // 結果の文字列
326 contents = $"{(Double)sw.ElapsedTicks / (Double)System.Diagnostics.Stopwatch.Frequency * 1000}";
327 }
328 break;
329 case ModelCategory.PanopticSegmentation:
330 {
331 // パノプティックセグメンテーション固有の検出パラメータの設定 ( ここではデフォルト値と同じ値を設定 )
332 //model.SetPanopticSegmentationParams(1024, 0.1, 32, -1);
333
334 // 計測開始
335 sw.Start();
336
337 // 推論実行: 後処理を行わない最も単純なメソッド
338 var segm_result_image = model.PredictSemanticSegmentation(image);
339
340 // 計測終了
341 sw.Stop();
342
343 // 結果の文字列
344 contents = $"{(Double)sw.ElapsedTicks / (Double)System.Diagnostics.Stopwatch.Frequency * 1000}";
345 }
346 break;
347 case ModelCategory.Classification:
348 case ModelCategory.AnomalyDetection:
349 case ModelCategory.MultiViewCNN:
350 case ModelCategory.MultiViewAD:
351 case ModelCategory.Unknown:
352 default: throw new NotImplementedException($"unmatch model-category={model.ModelCategory}");
353 }
354
355 // リストへ格納
356 msecs[i] = sw.ElapsedMilliseconds;
357
358 Console.WriteLine(contents);
359
360 // ファイルに保存したいとき
361 // - "result.csv" は任意のパスを設定
362 // - 上記の contents 生成に改行を追加
363 //System.IO.File.AppendAllText("result.csv", contents + Environment.NewLine);
364
365 // 次の計測のためのリセット
366 sw.Reset();
367 }
368
369 // 全体の結果
370 Console.WriteLine($"Ave: {msecs.Average():.00}");
371 Console.WriteLine($"Min: {msecs.Min():.00}");
372 Console.WriteLine($"Max: {msecs.Max():.00}");
373 }
374 catch (CFviException ex)
375 {
376 Console.WriteLine($"ErrorCode={ex.ErrorCode}, Message={ex.Message}");
377 Console.WriteLine(ex.StackTrace);
378 }
379 catch (Exception ex)
380 {
381 Console.WriteLine($"Message={ex.Message}");
382 Console.WriteLine(ex.StackTrace);
383 }
384 }
385 }
386}
推論するモデルを扱うクラス
Definition: PredictionCS.cs:146
ModelCategory ModelCategory
読み込んだモデルの種別
Definition: PredictionCS.cs:167
float[] PredictClassification(CFviImage targetImage)
推論の実行(画像分類)
Definition: PredictionCS.cs:888
Boolean IsValidImage(CFviImage targetImage)
推論画像の有効性の確認
Definition: PredictionCS.cs:571
static Boolean CheckLicense()
ライセンスを確認します。
Definition: PredictionCS.cs:321
CFviImage PredictSemanticSegmentation(CFviImage targetImage)
推論の実行(セマンティックセグメンテーション)
Definition: PredictionCS.cs:1336
Tuple< Boolean, float > PredictMultiViewAD(IEnumerable< CFviImage > targetImages, float threshold)
推論の実行(多視点アノマリー検出)
Definition: PredictionCS.cs:1201
Int32 NumViews
読み込んだモデルが期待する視点数
Definition: PredictionCS.cs:210
Tuple< Boolean, float > PredictAnomaly(CFviImage targetImage, float threshold)
推論の実行(アノマリー検出)
Definition: PredictionCS.cs:979
float[] PredictMultiViewCNN(IEnumerable< CFviImage > targetImages)
推論の実行(MVCNN)
Definition: PredictionCS.cs:1109
WIL-PDL モジュールの名前空間
Definition: PredictionCS.cs:20
ModelCategory
モデルの種別
Definition: PredictionCS.cs:31
FVILの最上位ネームスペース
Definition: PredictionCS.cs:15

VB 版

  • 画像分類の場合: L.11- BenchMark()
  • アノマリー検出の場合: L.11- BenchMark()
  • 多視点画像分類の場合: L.114- BenchMarkMultiView()
  • 多視点アノマリー検出の場合: L.114- BenchMarkMultiView()
  • セマンティックセグメンテーションの場合: L.235- BenchMarkSegmentation()
  • パノプティックセグメンテーションの場合: L.235- BenchMarkSegmentation()
1Imports System
2Imports System.Collections.Generic
3Imports System.IO
4Imports System.Linq
5Imports FVIL
6Imports FVIL.Data
7Imports FVIL.PDL
8
9Namespace SamplesCS
10 Partial Class Program
11 Private Shared Sub BenchMark(modelPath As String, imagePath As String, iterNum As UInteger)
12 ' 閾値は任意、必要であれば引数としても良い
13 Const threshold = 10.0
14 ' アノマリー検出での異常度マップ画像の型 ( UC8 または F32 )
15 Const anomaly_map_image_type = ImageType.UC8
16
17 ' 計測回数のエラーチェック
18 If 0 >= iterNum Then
19 Console.WriteLine("iterNum must be positive ( >0 )")
20 Return
21 End If
22
23 Try
24 Dim has_license = PDL.Model.CheckLicense()
25 If False = has_license Then
26 Throw New Exception("no license")
27 End If
28
29 ' モデルファイルの読込を含むコンストラクタ ( インスタンスを作成して LoadModel() をする場合と同等 )
30 Dim model As Model = New Model(modelPath)
31
32 ' 推論対象画像の読込
33 Dim image As CFviImage = New CFviImage(imagePath)
34
35 ' 推論対象画像の有効性確認
36 Dim is_valid_img = model.IsValidImage(image)
37 If False = is_valid_img Then
38 Throw New Exception("invalid image")
39 End If
40
41 ' アノマリー検出での異常度マップ画像
42 Dim anomaly_map As CFviImage = New CFviImage(image.HorzSize, image.VertSize, anomaly_map_image_type, 1)
43
44 ' 計測用のストップウォッチ
45 Dim sw As Stopwatch = New Stopwatch()
46
47 ' 計測結果のリスト
48 Dim msecs = New Long(iterNum - 1) {}
49
50 Dim contents = "msec, score0,..."
51 Console.WriteLine("msec, score0,...")
52 For i = 0 To iterNum - 1
53 Select Case model.ModelCategory
54 Case ModelCategory.Classification ' 画像分類
55 ' 計測開始
56 sw.Start()
57
58 ' 推論実行
59 Dim scores = model.PredictClassification(image)
60
61 ' 計測終了
62 sw.Stop()
63
64 ' 結果の文字列
65 contents = $"{sw.ElapsedTicks / Stopwatch.Frequency * 1000}"
66 For i_score = 0 To scores.Length - 1
67 contents += $", {scores(i_score)}"
68 Next
69 Case ModelCategory.AnomalyDetection ' アノマリー検出
70 ' 計測開始
71 sw.Start()
72
73 ' 推論実行
74 Dim tuple = model.PredictAnomaly(image, threshold, anomaly_map)
75
76 ' 計測終了
77 sw.Stop()
78
79 ' 結果の文字列
80 'contents = $"{sw.ElapsedMilliseconds:000}";
81 contents = $"{sw.ElapsedTicks / Stopwatch.Frequency * 1000}"
82 contents += ", " & If(tuple.Item1, "anomaly", "normal") & $", {tuple.Item2}"
83 Case Else
84 Throw New NotImplementedException($"unmatch model-category={model.ModelCategory}")
85 End Select
86
87 ' リストへ格納
88 msecs(i) = sw.ElapsedMilliseconds
89
90 Console.WriteLine(contents)
91
92 ' ファイルに保存したいとき
93 ' - "result.csv" は任意のパスを設定
94 ' - 上記の contents 生成に改行を追加
95 'System.IO.File.AppendAllText("result.csv", contents + Environment.NewLine);
96
97 ' 次の計測のためのリセット
98 sw.Reset()
99 Next
100
101 ' 全体の結果
102 Console.WriteLine($"Ave: {msecs.Average():.00}")
103 Console.WriteLine($"Min: {msecs.Min():.00}")
104 Console.WriteLine($"Max: {msecs.Max():.00}")
105 Catch ex As CFviException
106 Console.WriteLine($"ErrorCode={ex.ErrorCode}, Message={ex.Message}")
107 Console.WriteLine(ex.StackTrace)
108 Catch ex As Exception
109 Console.WriteLine($"Message={ex.Message}")
110 Console.WriteLine(ex.StackTrace)
111 End Try
112 End Sub
113
114 Private Shared Sub BenchMarkMultiView(modelPath As String, imageFolder As String, iterNum As UInteger)
115 ' 閾値は任意、必要であれば引数としても良い
116 Const threshold = 10.0
117 ' アノマリー検出での異常度マップ画像の型 ( UC8 または F32 )
118 Const anomaly_map_image_type = ImageType.UC8
119
120 ' 計測回数のエラーチェック
121 If 0 >= iterNum Then
122 Console.WriteLine("iterNum must be positive ( >0 )")
123 Return
124 End If
125
126 Try
127 Dim has_license = PDL.Model.CheckLicense()
128 If False = has_license Then
129 Throw New Exception("no license")
130 End If
131
132 ' モデルファイルの読込を含むコンストラクタ ( インスタンスを作成して LoadModel() をする場合と同等 )
133 Dim model As Model = New Model(modelPath)
134
135 ' モデル種別のエラーチェック
136 Select Case model.ModelCategory
137 Case ModelCategory.MultiViewCNN, ModelCategory.MultiViewAD
138 Case Else
139 Throw New NotImplementedException($"unmatch model-category={model.ModelCategory}")
140 End Select
141
142 ' 推論対象画像の読込と有効性の確認
143 Dim target_images As List(Of CFviImage) = New List(Of CFviImage)()
144 For i_img = 0 To model.NumViews - 1
145 ' imageFolder フォルダ内に、0-index の通し番号の画像が保存されていることを想定
146 Dim img_path = Path.Combine(imageFolder, String.Format("{0}.bmp", i_img))
147 Dim image = New CFviImage(img_path)
148
149 ' 推論対象画像の有効性確認
150 Dim is_valid_img = model.IsValidImage(image)
151 If False = is_valid_img Then
152 Throw New Exception("invalid image")
153 End If
154
155 ' 推論対象画像のリストに追加
156 target_images.Add(image)
157 Next
158
159 ' アノマリー検出での異常度マップ画像
160 Dim anomaly_map As CFviImage = New CFviImage(target_images(0).HorzSize, target_images(0).VertSize, anomaly_map_image_type, 1)
161
162 ' 計測用のストップウォッチ
163 Dim sw As Stopwatch = New Stopwatch()
164
165 ' 計測結果のリスト
166 Dim msecs = New Long(iterNum - 1) {}
167
168 Dim contents = "msec, score0,..."
169 Console.WriteLine("msec, score0,...")
170 For i = 0 To iterNum - 1
171 ' モデル種別のエラーチェック
172 Select Case model.ModelCategory
173 Case ModelCategory.MultiViewCNN
174 ' 計測開始
175 sw.Start()
176
177 ' 推論実行
178 Dim scores = model.PredictMultiViewCNN(target_images)
179
180 ' 計測終了
181 sw.Stop()
182
183 ' 結果の文字列
184 'contents = $"{sw.ElapsedMilliseconds:000}";
185 contents = $"{sw.ElapsedTicks / Stopwatch.Frequency * 1000}"
186 For i_score = 0 To scores.Length - 1
187 contents += $", {scores(i_score)}"
188 Next
189 Case ModelCategory.MultiViewAD
190 ' 計測開始
191 sw.Start()
192
193 ' 推論実行
194 Dim tuple = model.PredictMultiViewAD(target_images, threshold, anomaly_map)
195
196 ' 計測終了
197 sw.Stop()
198
199 ' 結果の文字列
200 'contents = $"{sw.ElapsedMilliseconds:000}";
201 contents = $"{sw.ElapsedTicks / Stopwatch.Frequency * 1000}"
202 contents += ", " & If(tuple.Item1, "anomaly", "normal") & $", {tuple.Item2}"
203 Case Else
204 Throw New NotImplementedException($"unmatch model-category={model.ModelCategory}")
205 End Select
206
207
208 ' リストへ格納
209 msecs(i) = sw.ElapsedMilliseconds
210
211 Console.WriteLine(contents)
212
213 ' ファイルに保存したいとき
214 ' - "result.csv" は任意のパスを設定
215 ' - 上記の contents 生成に改行を追加
216 'System.IO.File.AppendAllText("result.csv", contents + Environment.NewLine);
217
218 ' 次の計測のためのリセット
219 sw.Reset()
220 Next
221
222 ' 全体の結果
223 Console.WriteLine($"Ave: {msecs.Average():.00}")
224 Console.WriteLine($"Min: {msecs.Min():.00}")
225 Console.WriteLine($"Max: {msecs.Max():.00}")
226 Catch ex As CFviException
227 Console.WriteLine($"ErrorCode={ex.ErrorCode}, Message={ex.Message}")
228 Console.WriteLine(ex.StackTrace)
229 Catch ex As Exception
230 Console.WriteLine($"Message={ex.Message}")
231 Console.WriteLine(ex.StackTrace)
232 End Try
233 End Sub
234
235 Private Shared Sub BenchMarkSegmentation(modelPath As String, imagePath As String, iterNum As UInteger)
236 ' 計測回数のエラーチェック
237 If 0 >= iterNum Then
238 Console.WriteLine("iterNum must be positive ( >0 )")
239 Return
240 End If
241
242 Try
243 Dim has_license = PDL.Model.CheckLicense()
244 If False = has_license Then
245 Throw New Exception("no license")
246 End If
247
248 ' モデルファイルの読込を含むコンストラクタ ( インスタンスを作成して LoadModel() をする場合と同等 )
249 Dim model As Model = New Model(modelPath)
250
251 ' 推論対象画像の読込
252 Dim image As CFviImage = New CFviImage(imagePath)
253
254 ' 推論対象画像の有効性確認
255 Dim is_valid_img = model.IsValidImage(image)
256 If False = is_valid_img Then
257 Throw New Exception("invalid image")
258 End If
259
260 ' 計測用のストップウォッチ
261 Dim sw As Stopwatch = New Stopwatch()
262
263 ' 計測結果のリスト
264 Dim msecs = New Long(iterNum - 1) {}
265
266 Dim contents = "msec, score0,..."
267 Console.WriteLine("msec, score0,...")
268 For i = 0 To iterNum - 1
269 Select Case model.ModelCategory
270 Case ModelCategory.SemanticSegmentation ' セマンティックセグメンテーション
271 ' 計測開始
272 sw.Start()
273
274 ' 推論実行: 後処理を行わない最も単純なメソッド
275 Dim segm_result_image = model.PredictSemanticSegmentation(image)
276
277 ' 計測終了
278 sw.Stop()
279
280 ' 結果の文字列
281 contents = $"{sw.ElapsedTicks / Stopwatch.Frequency * 1000}"
282 Case ModelCategory.PanopticSegmentation
283 ' パノプティックセグメンテーション固有の検出パラメータの設定 ( ここではデフォルト値と同じ値を設定 )
284 'model.SetPanopticSegmentationParams(1024, 0.1, 32, -1);
285
286 ' 計測開始
287 sw.Start()
288
289 ' 推論実行: 後処理を行わない最も単純なメソッド
290 Dim segm_result_image = model.PredictSemanticSegmentation(image)
291
292 ' 計測終了
293 sw.Stop()
294
295 ' 結果の文字列
296 contents = $"{sw.ElapsedTicks / Stopwatch.Frequency * 1000}"
297 Case Else
298 Throw New NotImplementedException($"unmatch model-category={model.ModelCategory}")
299 End Select
300
301 ' リストへ格納
302 msecs(i) = sw.ElapsedMilliseconds
303
304 Console.WriteLine(contents)
305
306 ' ファイルに保存したいとき
307 ' - "result.csv" は任意のパスを設定
308 ' - 上記の contents 生成に改行を追加
309 'System.IO.File.AppendAllText("result.csv", contents + Environment.NewLine);
310
311 ' 次の計測のためのリセット
312 sw.Reset()
313 Next
314
315 ' 全体の結果
316 Console.WriteLine($"Ave: {msecs.Average():.00}")
317 Console.WriteLine($"Min: {msecs.Min():.00}")
318 Console.WriteLine($"Max: {msecs.Max():.00}")
319 Catch ex As CFviException
320 Console.WriteLine($"ErrorCode={ex.ErrorCode}, Message={ex.Message}")
321 Console.WriteLine(ex.StackTrace)
322 Catch ex As Exception
323 Console.WriteLine($"Message={ex.Message}")
324 Console.WriteLine(ex.StackTrace)
325 End Try
326 End Sub
327 End Class
328End Namespace

Documentation copyright © 2008 FAST Corporation. https://www.fast-corp.co.jp/
Generated on Fri Sep 6 2024 10:40:37 for WIL-PDL Reference ( .NET Framework ) 1.0.4 by Doxygen 1.9.5.