전단 이동 학습 데이터 집합은 어디에 놓입니까?【Tensorflow.js】

이것은 KNN Classifier를 사용할 때의 잡기입니다.
https://teachablemachine.withgoogle.com
전방에서 빠르게 학습을 옮기면 Teachable Machine은 비교적 수월하겠지만, 현재 준비된 기본 모델은 이미지, 소리, 자세뿐이다.그리고 출력된 모델의 구조를 조사해도 상응하는 문서가 없다. 예를 들어 이번에 사용하고 싶은 자세모델은 읽고 반을 나눌 수 있다@teachablemachine/pose 의존성이 뒤떨어지기 때문tfjs@^1.3.1이기 때문에 사용하기 어렵다.
따라서 학습 주위를 옮기는 것도 스스로 해보고 아래의 모델을 가져와 사용해 보자.

@tensorflow-models/knn-classifier


https://www.npmjs.com/package/@tensorflow-models/knn-classifier
집필할 때의 판본은 1.2.2이다.
peer @tensorflow/tfjs-core@"^1.2.1" from @tensorflow-models/[email protected]
응, 여기도 이런 느낌이야. 설치할 때 --legacy-peer-deps까지 해[email protected]실행이 확인되었습니다.
npm의 의존성 문제는 여러 가지 논의가 있는 것 같지만 조사할 시간이 없기 때문에 누가 알려주세요.

학습은 Tensor화 후 입력


이번에는 Posenet의 신체 자세 데이터를 사용해 KNN의 전이 학습에서 분류했다.
https://editor.p5js.org/AndreasRef/sketches/RLv1QbuLa
전체 인코딩은 p5입니다.js에서 ml5를 사용한 상술한 예를 참고하십시오.그러나 이것은 함수 내부가 간소화되었기 때문에 원래의 tfjs의 예의를 따라야 한다.
// poseにはPosenetの出力が入っている
const poseArray = pose.keypoints.map(p => [p.score, p.position.x, p.position.y]); // 行列にする(3次元ベクトル * 17点)
const tfPose = tf.tensor2d(poseArray); // Tensor化
classifier.addExample(tfPose, label); // ここで分類を追加
console.log('KNN class added:', classifier.getClassExampleCount());

데이터 집합의 입력 출력과 배치 방법


본론입니다.

엄숙하다


우선JSON.stringify() 전화하는 것은 당연한 일이고, 특히 KNN 클래시필드에서는 3년 전부터 보존 전 시리아에 대한 다양한 논의가 있었다.
https://github.com/tensorflow/tfjs/issues/633
따라서 상기 issue가 마지막으로 소개한 아래의 프로그램 라이브러리를 사용하기로 결정했습니다.안정적으로 추천해드려요.
https://www.npmjs.com/package/tensorset
// KNN分類結果のデータセットを出力する
async getDataSet() {
  return await Tensorset.stringify(this.classifier.getClassifierDataset())
}
이것만 있으면 됩니다.

액세스 데이터 세트


가급적 mbaS 등 외부 서비스를 이용하지 않는다면 다음과 같은 3가지를 고려할 수 있다.

문자열 복사 붙여넣기


매번 input에 붙여서 읽는 방법은 당연히 사용하지 않습니다.
클립보드에 들어가는 양이지만 다시 불러올 때마다 읽어야 하기 때문에 너무 번거롭다.

Local Storage

Tensorset.stringify의 결과는 문자열입니다. 만약 여러 클라이언트가 데이터 집합을 사용하지 않는다면 이것은 가장 간단합니다.

Ajax


이것은 데이터 집합을 텍스트 형식으로 출력하고 자원으로 읽는 방법이다.
미리 준비된 파일이나 Form 작업을 통해 읽을 수 있기 때문에 통용됩니다.
이번에는 이 방법으로 하자.

내보내기(로컬 다운로드 및 저장)


다음 함수를 설정하여 Tensorset에서 내보낸 문자열을 통해 다운로드합니다.
function download(tensorsetString) {
  const link = document.createElement('a');
  link.download = 'poses.tensorset';
  link.href = URL.createObjectURL(new Blob([ tensorsetString ], { type: 'text.plain' }));
  link.dataset.downloadurl = ['text/plain', link.download, link.href].join(':');
  link.click();
}

가져오기(서버 구성)


이번에는 Nuxt입니다.js를 사용했기 때문에 데이터 집합의 파일을 ~/static에 넣으면axios로 얻을 수 있습니다.
axios.get('./poses.tensorset').then((res) => {
  this.knnDataSet = res.data;
  if (this.knnDataSet) {
    const dataset = Tensorset.parse(this.knnDataSet);
    this.classifier.setClassifierDataset(dataset);
    console.log('KNN Dataset available:', this.classifier.getClassExampleCount());
  }
});
한편, Tensorflow.js의 부하가 많기 때문에 서비스 워커에서 이동하고 싶은 일이 많습니다(이번에도 그렇습니다). 여기서부터 XHR를 직접 사용할 수 없기 때문에 axios를 사용하기 어렵습니다.
거기에서ky모듈을 사용합니다.
https://zenn.dev/ukkz/articles/d622860d7cdf67
이걸로 다시 쓰면 다음과 같다.
(async () => {
  const response = await ky.get(self.location.origin + '/poses.tensorset');
  const reader = await response.body.getReader().read();
  const result = new TextDecoder('utf-8').decode(reader.value);
  this.knnDataSet = result;
  if (this.knnDataSet) {
    const dataset = Tensorset.parse(this.knnDataSet);
    this.classifier.setClassifierDataset(dataset);
    console.log('KNN Dataset available:', this.classifier.getClassExampleCount());
  }
})()
Service Worker를 사용하면 패턴 읽기와 데이터 집합의 획득이 비교적 빨라서 매우 쉽다.한번 해보세요.

좋은 웹페이지 즐겨찾기