ML.NET 기반 웹 응용 프로그램의 이미지 분류

여보게, 저기!반갑습니다.이 강좌에서 우리는 ML.NET에서 개성화된 기계 학습 모델을 생성하여 이미지 분류에 사용하는 방법을 점차적으로 배울 것이다. 특히 가면이 있는 사람과 가면이 없는 사람의 이미지를 분류한 다음에 ASP.NET의 웹 응용 프로그램에서 이 모델을 사용하는 방법을 배울 것이다.NET 및 MVVM 모드(모델, 뷰, 뷰 모델)

ML.NET란 무엇이며 어떻게 작동합니까?


ML.NET는 입력한 데이터를 ML모델로 변환한 다음 컴퓨터의 모든 종류의 응용 프로그램에 집적할 수 있도록 하는 기계 학습 플랫폼이다.웹, 모바일, 데스크톱, 기타 모든 종류의 응용 프로그램, NET 생태계
우리의 사례 연구에서 우리는 이미지의 분류에 중점을 둘 것이다.

이미지 분류


예를 들어 우리의 목적은 사람의 이미지를 두 조로 나눌 수 있는 것이다. 마스크를 쓴 사람과 쓰지 않은 사람이다.
이 목표를 달성하기 위해 우리는 본문에서 세 가지 활동을 전개할 것이다.
  • 1. 필요한 요구 사항을 충족하고 Visual Studio에서 솔루션을 준비합니다.
  • 2. ML.NET를 사용하여 머신 스터디 모델을 작성합니다.
  • 3. ASP를 사용하여 생성된 모델입니다.그물
  • 여기까지 말하고 시작합시다!

    섹션 1: Visual Studio의 사전 요구 사항 및 솔루션 준비


    머신 러닝 모델을 생성하기 위해 ML.NET의 모델 Builder 해석기를 사용합니다.이를 위해서는 Visual Studio(.NET 플랫폼 간 개발)에서 다음 워크로드를 완료해야 합니다.

    이 작업량이 있으면 우리는 지금 해결 방안을 만들 수 있다.이 예에서 Google은 웹 응용 프로그램에서 생성될 ML 모델을 사용하기 위해 DotVVM 프레임워크를 사용합니다. 이 프레임워크는 HTML 페이지와 C# 클래스를 ASP에서 처리할 수 있도록 합니다.NET 및 MVVM 모드(모델, 뷰, 뷰 모델)

    제2부분: 기계 학습 모델 구축


    ML.NET를 사용하여 모델을 생성할 때가 되었습니다.머신러닝 영역에서 모델을 생성하는 다른 절차와 마찬가지로 정서 분석 모델을 구축하는 절차는 다음과 같습니다.
  • ML 장면을 설정합니다.
  • 데이터 교육을 위한 환경 준비
  • 데이터 세트를 로드합니다.
  • 훈련 모형.
  • 평가 모델.
  • 이 모델을 사용합니다.
  • 먼저, 주요 솔루션 항목에 머신 러닝 유형 요소를 추가합니다.

    이 옵션을 사용하면 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;
    
    이 변수들은 저장된 이미지 파일을 인용하고 속성 ResultScore 에서 예측 결과를 나타낼 수 있도록 합니다.
    그런 다음 버튼이 예측하는 동작을 나타내는 방법을 이 클래스에 설정할 수 있습니다.
    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 방법으로 디스플레이 변수ResultScore의 값을 통해 결과의 디스플레이를 설정할 수 있습니다.
    실행 예
    이 보기와 ViewModel이 있으면 저희 사이트가 준비됩니다.여기서는 런타임의 두 가지 예를 볼 수 있습니다.


    이 예시의 원본 코드는 다음 저장소에서 찾을 수 있습니다: github.com/esdanielgomez/MLNET_ImageClassification.

    감사합니다!


    읽어 주셔서 대단히 감사합니다. 저는 이 시연이 당신에게 유용하길 바랍니다.만약 당신이 토론할 문제나 생각이 있다면, 서로 협력하고 지식을 교류할 수 있는 것은 즐거운 일일 것이다.
    안녕히 계세요!또는, 원한다면, 이메일로 나에게 편지를 쓸 수도 있다. [email protected]

    좋은 웹페이지 즐겨찾기