CustomVision.ai로 IsChristmasTree 구축

이 기사는 올해C# Christmas Advent Calendar의 일부입니다. 확인해보세요(이 글을 읽은 후).

GoodyOrBaddy.com을 생성하기 위해 가려움증을 긁고 오프라인/로컬에서 CustomVision.ai 온라인을 사용하여 이미지 분류 모델을 생성하는 것이 얼마나 쉬운지 확인하고 싶었습니다.

이번에는 관심 있는 사용 사례를 만드는 것이 더 낫다는 믿음을 이어가며(그리고 축제 분위기가 들기 시작했기 때문에) 크리스마스 트리 이미지를 식별할 수 있는 모델을 만드는지 확인하고 싶었습니다. 및 일반 나무의 이미지.

나는 전에 CustomVision.ai을 사용한 적이 없었기 때문에 이것은 그것을 시험해 볼 수 있는 유스 케이스만큼 좋았습니다.

면책 조항: 저는 AI/ML 또는 데이터 과학 전문가가 아닙니다. 이것은 실험/부수 프로젝트입니다.

TL;DR;



모델을 교육한 다음 모델을 테스트하고 Postman과 웹 사이트에서 사용하는 전체 프로세스를 보고 싶다면 프로세스에 대해 읽지 말고 YouTube에서 만든 이 비디오를 참조하십시오. 구독하는 것을 잊지 마세요).



교육 이미지 가져오기



나는 훈련 도구가 훈련 세트에 더 많은 이미지를 제공하게 할 것이라고 가정하고 20개의 크리스마스 트리 이미지와 20개의 일반 나무 이미지를 얻는 것으로 시작하기로 결정했습니다. (스포일러: 그렇지 않았습니다).

테스트 이미지 가져오기



훈련 데이터 세트에는 테스트 이미지가 사용되지 않았다는 점을 언급하는 것이 중요합니다. 또한 모델을 속일 수 있는지 확인하기 위해 크리스마스 트리의 '흥미롭고 특이한' 에지 케이스 이미지를 수집하기로 결정했습니다.

1단계: 프로젝트 생성



CustomVision.ai로 이동하여 프로젝트를 생성합니다. 프로젝트 이름을 제공하고 사용할 온라인 리소스를 선택해야 합니다.

이 예에서는 내가 사용한
프로젝트 유형: 분류
분류 유형: 다중 클래스
도메인: 일반(소형) [S1]
내보내기 기능: 기본 플랫폼


2단계: 이미지 업로드 및 태그 지정



프로젝트를 생성한 후 각 훈련 이미지 세트를 업로드해야 합니다. 이렇게 하면 이러한 이미지에 대한 태그를 제공하라는 메시지가 표시됩니다. 나는 이 과정이 매우 매끄럽다는 것을 알았다.

3단계: 모델 학습



레이블이 지정된 두 세트의 이미지를 만든 후에는 화면 상단에 있는 녹색 훈련 버튼을 눌러 모델을 훈련해야 합니다. (저는 보통 빠른 훈련을 선택합니다).




4단계: 모델 테스트



이제 테스트할 모델이 준비되었으므로 계속해서 화면 상단에 있는 빠른 테스트 버튼을 누르고 온라인 이미지에 대한 URL을 제공하거나 (선호하는 대로) 로컬 파일을 찾아 업로드합니다. 테스트합니다. 모델은 이미지를 분석하고 결과를 보여주어야 합니다.


5단계: 모델 게시



모델을 테스트한 후 다른 곳에서 사용하기 전에 화면 상단의 성능 탭에서 게시 버튼을 눌러야 합니다. 이제 이미지 분류 예측 API에 대한 퍼블릭 엔드포인트 URL을 가져올 수 있습니다.


6단계: Postman으로 끝점 호출



이제 호출할 수 있는 엔드포인트가 있으므로 Postman을 사용하여 수행해 보겠습니다. 엔드포인트 URL, 키 및 애플리케이션 유형을 제공하십시오. 그런 다음 이미지를 본문으로 제공하고 반환되는 정보를 실행하고 확인하십시오.

7단계: 웹사이트 연결



이제 엔드포인트를 호출할 수 있고 이미지가 전달되고 결과가 반환된다는 것을 확인했으므로 연결해 보겠습니다.

따라서 이 코드는 GitHub에 있습니다. 가서 확인하고 로컬에서 사용해 보세요.

var openFile = function (file) {
            var input = file.target;

            var reader = new FileReader();
            reader.onload = function () {
                var dataURL = reader.result;

                $('#output').attr('src', dataURL).fadeIn();

                var parts = dataURL.split(';base64,');
                var contentType = parts[0].split(':')[1];
                var raw = window.atob(parts[1]);
                var rawLength = raw.length;

                var uInt8Array = new Uint8Array(rawLength);

                for (var i = 0; i < rawLength; ++i) {
                    uInt8Array[i] = raw.charCodeAt(i);
                }

                var imgContent = new Blob([uInt8Array], { type: contentType });

                $.ajax({
                    url: "PROVIDE_YOUR_OWN_PREDICTION_API_URL",
                    beforeSend: function (xhrObj) {

                        xhrObj.setRequestHeader("Prediction-Key", "PROVIDE_YOUR_OWN_PREDICTION_KEY");
                        xhrObj.setRequestHeader("Content-Type", "application/octet-stream");

                        $('#isChristmasTree').fadeOut();
                        $('#isRegularTree').fadeOut();
                    },
                    type: "POST",

                    data: imgContent,
                    processData: false
                })
                    .done(function (data) {

                        console.log(data);

                        var prediction1Name = data.predictions[0].tagName;
                        var prediction2Name = data.predictions[1].tagName;

                        var prediction1Probability = data.predictions[0].probability * 100;
                        var prediction2Probability = data.predictions[1].probability * 100;

                        if (prediction1Probability > 0.50 && prediction1Name === "ChristmasTree") {
                            $('#isChristmasTree').html('IsChristmasTree! (' + prediction1Probability.toFixed(2) + '%)').fadeIn();
                        }
                        else {
                            $('#isRegularTree').html('IsRegularTree! (' + prediction1Probability.toFixed(2) + '%)').fadeIn();
                        }
                    })
                    .fail(function () {
                        alert("error");
                    });
            };

            reader.readAsDataURL(input.files[0]);
        };




요약



20개의 일반 나무 이미지와 20개의 크리스마스 트리 이미지로만 모델을 훈련하고 상당히 어려운 엣지 케이스를 던졌다고 생각하는 모델이 얼마나 정확한지 매우 놀랐습니다.

직접 실험해보는 것을 추천합니다. 무엇을 만들 것인가? 깃발 또는 비스킷 이미지 분류기는 어떻습니까?

CustomVision.ai를 실험할 때 본 것에서 프로덕션/라이브 프로젝트로 즉시 구현할 것입니다.

유사한 흥미로운 프로젝트에 대해 듣고 싶다면 저를 팔로우하고

즐거운 휴일 보내세요!

-- 이씨

좋은 웹페이지 즐겨찾기