기계 학습을 사용하여 모듈식 신디사이저 목록화 - 1부

A 1080p version of the video is available on Cinnamon

"ML for Everyone" 방송하는 제 주간쇼live on Twitch every Tuesday at 2pm UK time에서 찍은 영상입니다 .

이것은 Si Metson과 제가 모듈식 신시사이저를 구성하는 개별 모듈을 인식하고 식별하기 위해 기계 학습 모델을 교육하려고 시도하는 일련의 라이브 코딩 세션 중 첫 번째 기록입니다. .

이 세션에서 우리는 주로 데이터를 수집하고 기계 학습 모델에 사용하기에 적합한 형식으로 가져오려고 했습니다. 우리는 주로 Tensorflow Object Detection API에 대한 이 튜토리얼을 따라했습니다.

https://tensorflow-object-detection-api-tutorial.readthedocs.io/en/latest/

모델에 대한 교육 데이터를 생성하기 위해 다음 단계를 거쳤습니다.
  • 각 모듈의 이미지와 해당 메타데이터(이름 등)를 수집하기 위해 사이트Modulargrid를 스크랩했습니다.
  • N(이 경우 5) 임의의 모듈 이미지를 나란히 연결하여 합성 신디사이저 패널을 생성하는 스크립트를 작성했습니다. 이렇게 하면 이미지에 있는 각 모듈의 실제 좌표를 알 수 있습니다. 각 이미지는 함께 연결되기 전에 공통 높이로 확장됩니다.
  • 메타데이터 및 이미지의 효율적인 바이너리 팩(protobufs 기반)이 포함된 Tensorflowtfrecord 파일을 생성했습니다.

  • 좌표 계산과 관련된 몇 가지 논리를 디버깅하려고 시도하면서 스트림이 끝날 때 시간이 부족했습니다. 이후 훨씬 더 쉬운 방법을 깨달았고 이 방법으로 코드를 리팩토링했습니다.

    객체 감지 API는 데이터가 tfrecord 인스턴스로 인코딩된 특정 형식일 것으로 예상합니다. 이 형식은 처리하기에 매우 효율적이며 대량의 정보를 기계 학습 파이프라인으로 수집해야 하는 경우 데이터를 최대한 빨리 로드해야 하므로 사용됩니다.

        tf_example = tf.train.Example(features=tf.train.Features(feature={
            'image/height': dataset_util.int64_feature(image.height),
            'image/width': dataset_util.int64_feature(image.width),
            'image/filename': dataset_util.bytes_feature(filename.encode('utf-8')),
            'image/source_id': dataset_util.bytes_feature(filename.encode('utf-8')),
            'image/encoded': dataset_util.bytes_feature(open(filename, "rb").read()),
            'image/format': dataset_util.bytes_feature( b'jpg'),
            'image/object/bbox/xmin': dataset_util.float_list_feature(xmins),
            'image/object/bbox/xmax': dataset_util.float_list_feature(xmaxs),
            'image/object/bbox/ymin': dataset_util.float_list_feature(ymins),
            'image/object/bbox/ymax': dataset_util.float_list_feature(ymaxs),
            'image/object/class/text': dataset_util.bytes_list_feature(classes_text),
            'image/object/class/label': dataset_util.int64_list_feature(classes),
        }))
    

    웹사이트에서 스크랩한 메타데이터는 다음과 같습니다.

     {
        "id": "29365",
        "image": "https://www.modulargrid.net/img/modcache/29365.f.jpg",
        "info": [
          "CV Modulation",
          "Drum",
          "Envelope Generator",
          "Utility"
        ],
        "size": "10 HP",
        "name": "Dual Trig Conditioner",
        "manufacturer": "Analog Ordnance",
        "description": "Gate to trig + decay env"
      },
    

    그리고 우리가 생성하는 합성 '가짜' 이미지는 다음과 같습니다.



    스크립트를 실행하면 학습 데이터에 사용할 여러 레코드와 학습된 모델의 정확도를 테스트하는 데 사용할 숫자를 생성할 수 있습니다.

    (venv) matt@Matts-MBP modulair % python randomise.py
    100%|████████████████████████████████████████| 1000/1000 [01:47<00:00,  9.34it/s]
    Successfully created the TFRecord file with 1000 records: train.record
    100%|██████████████████████████████████████████| 100/100 [00:10<00:00,  9.10it/s]
    Successfully created the TFRecord file with 100 records: test.record
    (venv) matt@Matts-MBP modulair % 
    

    이 세션의 모든 코드는 다음에서 찾을 수 있습니다.


    IBMDeveloperUK / 모듈러






    모듈러


    이들은 모듈식 신디사이저에서 모듈 이미지를 가져오고 개체 감지 모델에서 훈련하기 위해 형식을 지정하는 스크립트입니다.

    이 미니 프로젝트에 대한 모든 내용은 여기에서 읽을 수 있습니다.


    View on GitHub


    다음 세션에서는 실제로 훈련 파이프라인을 구성하고 데이터를 훈련할 것입니다.

    비디오를 즐기셨기를 바랍니다. 라이브로 보고 싶다면 일반적으로 영국 시간으로 매주 화요일 오후 2시에 IBM Developer Twitch channel에서 스트리밍합니다.

    좋은 웹페이지 즐겨찾기