ML.NET 기반 웹 응용 프로그램의 이미지 분류
13349 단어 webdevcsharpmachinelearningdotnet
ML.NET란 무엇이며 어떻게 작동합니까?
ML.NET는 입력한 데이터를 ML모델로 변환한 다음 컴퓨터의 모든 종류의 응용 프로그램에 집적할 수 있도록 하는 기계 학습 플랫폼이다.웹, 모바일, 데스크톱, 기타 모든 종류의 응용 프로그램, NET 생태계
우리의 사례 연구에서 우리는 이미지의 분류에 중점을 둘 것이다.
이미지 분류
예를 들어 우리의 목적은 사람의 이미지를 두 조로 나눌 수 있는 것이다. 마스크를 쓴 사람과 쓰지 않은 사람이다.
이 목표를 달성하기 위해 우리는 본문에서 세 가지 활동을 전개할 것이다.
섹션 1: Visual Studio의 사전 요구 사항 및 솔루션 준비
머신 러닝 모델을 생성하기 위해 ML.NET의 모델 Builder 해석기를 사용합니다.이를 위해서는 Visual Studio(.NET 플랫폼 간 개발)에서 다음 워크로드를 완료해야 합니다.
이 작업량이 있으면 우리는 지금 해결 방안을 만들 수 있다.이 예에서 Google은 웹 응용 프로그램에서 생성될 ML 모델을 사용하기 위해 DotVVM 프레임워크를 사용합니다. 이 프레임워크는 HTML 페이지와 C# 클래스를 ASP에서 처리할 수 있도록 합니다.NET 및 MVVM 모드(모델, 뷰, 뷰 모델)
제2부분: 기계 학습 모델 구축
ML.NET를 사용하여 모델을 생성할 때가 되었습니다.머신러닝 영역에서 모델을 생성하는 다른 절차와 마찬가지로 정서 분석 모델을 구축하는 절차는 다음과 같습니다.
이 옵션을 사용하면 ML.NET Model Builder 해석기가 초기화되고 사용자 정의 모델을 시작할 수 있습니다.
스크립트:
첫 번째 단계는 우리가 사용하고자 하는 장면을 선택하는 것이다. 이 예에서
Image classification
:환경:
이제 우리는 계산 자원을 선택해서 우리의 모델을 훈련시켜야 한다.이 장면에서 우리는 컴퓨터의 CPU, 그래픽 카드 하나로 GPU (이미지를 처리하기 때문에) 를 사용하거나, Azure 기계로 클라우드에서 교육을 수행하는 세 가지 옵션을 사용할 수 있다.이 예에서는 로컬 CPU를 사용합니다.
데이터 출처:
이것은 가장 중요한 부분 중의 하나이다. 왜냐하면 이러한 데이터가 있기 때문에 우리는 우리의 모델을 맞춤형으로 만들 수 있기 때문이다.이렇게 하려면 분류할 이미지 파일이 있는 디렉토리를 지정해야 합니다.이런 의미에서 중요한 것은 우리가 분류할 모든 분류에 하나의 폴더가 있다는 것이다. 이런 상황에서 우리는 하위 폴더의 '마스크 착용' 과 '마스크 착용 안 함' 을 찾을 수 있다.model builder ML.NET에서 디렉토리를 선택하면 다음과 같은 내용이 표시됩니다.
교육:
지금까지 우리는 모든 것을 세웠고 교육 과정을 집행할 수 있으며 최종적으로 필요한 모델을 생성할 수 있다.이 절에서 우리는 훈련부터 시작하여 훈련이 끝날 때까지 기다릴 수밖에 없다.시간은 데이터 세트의 이미지 수, CPU 특성(이전에 선택한 방법) 및 해당 파일의 크기에 따라 달라집니다.
평가:
지금까지 우리는 모델을 구축했다. 어쨌든 ML.NET의 모델 생성기에서 우리는 특정한 예로 모델을 평가할 수 있다.
소비:
마지막으로, 해석기는 창설된 모델을 사용하는 옵션을 제공합니다. 다른 프로젝트 (컨트롤러 또는 웹api 사용) 를 만들 수도 있고, 응용 프로그램에서 호출해야 한다는 것을 지시할 수도 있습니다.
이 경우 ASP의 DotVVM을 사용하여 웹 응용 프로그램에서 모델을 사용할 수 있습니다.NET 및 새로 생성된 패키지:
MLModel.mbconfig
.섹션 2: ASP를 사용하여 생성된 모델입니다.그물
모델을 사용하려면 그룹
MLModel.mbconfig
의 ML.NET에서 생성되는 MLModel 클래스를 참조해야 합니다.이런 의미에서 우리가 분류하고자 하는 이미지의 인용을 사용하여 ModelInput의 실례를 만들고
Predict
방법을 호출하여 ModelOutput 유형의 대상과 상응하는 분류(마스크 없음, 마스크 없음)와 그 확률을 얻을 필요가 있다.뷰 모델
이를 위해 ViewModel(이 경우
DefaultViewModel.cs
에서 DotVVM을 사용하여 웹 페이지를 만들 수 있도록 네 가지 속성 또는 글로벌 변수를 정의합니다.private IUploadedFileStorage storage;
public UploadedFilesCollection Files { get; set; }
public string Result { get; set; } = null;
public decimal? Score { get; set; } = null;
이 변수들은 저장된 이미지 파일을 인용하고 속성 Result
과 Score
에서 예측 결과를 나타낼 수 있도록 합니다.그런 다음 버튼이 예측하는 동작을 나타내는 방법을 이 클래스에 설정할 수 있습니다.
public void Predict()
{
var uploadPath = GetUploadPath();
var targetPath = Path.Combine(uploadPath, Files.Files[0].FileId + ".bin");
storage.SaveAsAsync(Files.Files[0].FileId, targetPath);
var sampleData = new MLModel.ModelInput()
{
ImageSource = targetPath,
};
//Load model and predict output
var output = MLModel.Predict(sampleData);
Result = output.Prediction;
if (Result.Equals("With mask"))
{
Score = decimal.Round((decimal)(output.Score[0]) * 100, 2);
}
else
{
Score = decimal.Round((decimal)(output.Score[1]) * 100, 2);
}
//storage.DeleteFileAsync(Files.Files[0].FileId);
Files.Clear();
}
이 코드에는 세 가지 중요한 부분이 있습니다.MLModel.ModelInput
합니다.MLModel.Predict
를 매개 변수로 호출ModelInput
하여 결과가 있는'Model Output'을 얻었다.Result
한다.그럼에도 불구하고 ViewModel에서 생성된 속성과 방법을 참조하여 뷰를 구성할 수 있습니다.이 뷰는 파일
Default.dothtml
에서 다음과 같이 인코딩됩니다.<table style="border: hidden">
<tbody style="border: hidden">
<tr style="border: hidden">
<td style="border: hidden" align="center">
<dot:FileUpload UploadedFiles="{value: Files}"
AllowMultipleFiles="false"
SuccessMessageText="Predicting..."
NumberOfFilesIndicatorText=""
UploadButtonText="Search Image"
AllowedFileTypes="jpg,png"
UploadCompleted="{command: Predict()}" />
</td>
<td style="border: hidden" align="center">
<b>{{value: Result}}</b> {{value: Score}}
</td>
</tr>
</tbody>
</table>
여기서 가장 중요한 것은 FileUpload
컨트롤러입니다. 사용자는 컴퓨터에서 이미지 파일을 업로드한 다음 Predict()
호출Button
방법으로 디스플레이 변수Result
와 Score
의 값을 통해 결과의 디스플레이를 설정할 수 있습니다.실행 예
이 보기와 ViewModel이 있으면 저희 사이트가 준비됩니다.여기서는 런타임의 두 가지 예를 볼 수 있습니다.
이 예시의 원본 코드는 다음 저장소에서 찾을 수 있습니다: github.com/esdanielgomez/MLNET_ImageClassification.
감사합니다!
읽어 주셔서 대단히 감사합니다. 저는 이 시연이 당신에게 유용하길 바랍니다.만약 당신이 토론할 문제나 생각이 있다면, 서로 협력하고 지식을 교류할 수 있는 것은 즐거운 일일 것이다.
안녕히 계세요!또는, 원한다면, 이메일로 나에게 편지를 쓸 수도 있다. [email protected]
Reference
이 문제에 관하여(ML.NET 기반 웹 응용 프로그램의 이미지 분류), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/esdanielgomez/image-classification-in-web-applications-with-mlnet-ipl텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)