Nvidia 이동 학습 키트를 사용한 능동적인 학습 강좌

신속한 프로토타입에서 프로덕션 준비에 이르는 Nvidia TLT의 대상 탐지 시스템을 능동적으로 학습하는 방법


Nvidia 이동 학습 키트를 사용한 능동적인 학습 강좌
신속한 프로토타입에서 프로덕션 준비에 이르는 Nvidia TLT의 대상 탐지 시스템을 능동적으로 학습하는 방법
모든 기계 학습 프로젝트에서 가장 큰 도전 중 하나는 기계 학습 모델을 훈련하기 전에 수집한 데이터를 정리하고 주석하는 것이다.일반적으로 신경 네트워크는 이렇게 많은 데이터를 필요로 하기 때문에 모든 견본에 대해 간단한 주석을 하는 것은 중소기업이 극복할 수 없는 장애가 된다.본 강좌는 모델의 생산이 준비될 때까지 사용 가능한 데이터의 일부분만을 바탕으로 원형을 제작한 다음에 주동적인 학습을 통해 원형을 개선하는 방법을 소개한다.
능동적으로 묘사를 배우는 것은 사용 가능한 데이터의 일부분만을 주석하는 과정이다.그리고 이 서브집합에서 기계 학습 모델을 훈련시키고 이 모델에서 나온 예측을 사용하여 주석할 다음 데이터를 선택한다.신경 네트워크를 훈련하는 데 많은 시간이 걸릴 수 있기 때문에 미리 훈련된 모델을 사용하고 사용 가능한 데이터 포인트에서 이를 미세하게 조정하는 것은 의미가 있다.Nvidia 공부는 여기서 하는 거야.이 패키지는 심층 신경 네트워크를 훈련하고 평가하는 데 사용되는 대량의 사전 훈련 컴퓨터 시각 모델과 기능을 제공한다.
다음 절에서는 Nvidia TLT를 이용해 미니아폴 데이터 세트에서 과일 검출 모델 원형을 제작하고 컴퓨터 시각 데이터 관리 플랫폼Lightly을 활용한 능동 학습 기능 교체 개선 모델을 소개한다.

왜 과일을 검사해야 합니까?


과일을 정확하게 검측하고 계수하는 것은 수확 과정의 자동화를 실현하는 관건적인 절차다.과일 계수는 예상 생산량을 예측하여 저생산 연도를 조기 발견하는 데 쓰일 수 있다.또한 과일 검출 데이터가 집중된 이미지는 대량의 목표를 포함하기 때문에 주석을 하는 데 더 많은 시간이 필요하고 이로 인해 매 이미지의 비용도 증가한다.이것은 주동적으로 공부하는 장점을 더욱 뚜렷하게 한다.

왜 명니 아폴이야?


미니아폴은 과수원 사과 670장의 고해상도 이미지로 구성되어 있으며 사과마다 테두리가 하나씩 있다.영상 수량이 적어 스피드 재생 강좌에 적합하다.

시작해보도록 하겠습니다.


이 강좌는 그것Github counter-part을 따른다.강좌를 직접 완성하고 싶으면 저장소를 복제해서 사용해 보세요.

데이터 세트 업로드


Lightly를 사용하여 능동적인 학습을 하려면 먼저 데이터 집합을 플랫폼에 업로드해야 한다.이 명령은 좋은 이미지 표시를 얻기 위해 자기 감독 모델을 훈련시키고 이미지를 이미지 표시와 함께 플랫폼에 업로드합니다.자체 감독을 하기 때문에, 이 단계는 탭이 필요하지 않기 때문에, 당신은 즉시 원시 데이터를 사용할 수 있습니다.훈련을 건너뛰고 싶다면trainer를 설정할 수 있다.max_epochs=0.아래 명령에서 MY 영패를 플랫폼의 영패로 교체하세요.
lightly-magic \
    input_dir=./data/raw/images \
    trainer.max_epochs=0 \
    loader.num_workers=8 \
    collate.input_size=512 \
    new_dataset_name="MinneApple" \
    token=MY_TOKEN
프라이버시를 고려하여 미리 보기 그림을 올릴 수도 있고, 심지어는 완전한 이미지가 아니라 메타데이터만 올릴 수도 있다.
업로드가 완료되면 Lightly Platform에서 데이터 세트를 직접 볼 수 있습니다.다른 이미지 클러스터를 감지할 수 있습니다.네가 어떤 견해를 얻을 수 있는지 좀 놀아 봐라.

초기 샘플링


이제 주석과 훈련을 위해 초기 그림을 선택하십시오.
Lightly는 다양한 샘플링 전략을 제공하는데 가장 두드러진 것은 핵심 집합과 무작위 샘플링이다.무작위 표본 추출은 데이터 집합의 기본 분포를 잘 보존하고 CORESET는 데이터 집합의 이구성을 극대화할 것이다.Lightly 플랫폼에서 데이터 집합을 탐색할 때, 우리는 많은 다른 집단을 발견했다.따라서 우리는 모든 집합이 훈련 데이터에서 표시될 수 있도록 핵심 집합 표본을 선택한다.
초기 샘플링을 진행하려면 Github 저장소에서 제공하는 스크립트를 사용하거나 Python 스크립트를 작성할 수 있습니다.스크립트는 다음과 같은 절차를 포함해야 한다.
API와 통신할 API 클라이언트를 생성합니다.
# create an api client
client = ApiWorkflowClient(
    token=YOUR_TOKEN,
    dataset_id=YOUR_DATASET_ID,
)
능동 학습 에이전트를 만들어 능동 학습의 인터페이스로 삼다.
# create an active learning agent
al_agent = ActiveLearningAgent(client)
마지막으로 샘플링 설정을 만들고 능동적인 학습 조회를 진행하며, 주석이 있는 이미지를 데이터/train 디렉터리로 이동합니다.
# make an active learning query
cofnig = SamplerConfig(
    n_samples=100,
    method=SamplingMethod.CORESET,
    name='initial-selection',
)
al_agent.query(config)

# simulate annotation step by copying the data to the data/train directory 
helpers.annotate_images(al_agent.added_set)
질의는 플랫폼에서 처음 선택한 이름의 새 태그를 자동으로 생성합니다.

훈련과 추리


지금 우리는 주석을 달고 있는 훈련 데이터를 가지고 있다. 우리는 위에서 대상 검측 모델을 훈련해서 그것이 얼마나 잘 작동하는지 보자!Nvidia Transfer Learning Toolkit을 사용하여 명령줄에서 YOLOv4 개체 감지기를 교육합니다.이동 학습의 가장 멋있는 점은 처음부터 모형을 훈련할 필요가 없기 때문에 더 적은 주석 이미지가 있어야만 좋은 결과를 얻을 수 있다는 것이다.
먼저 Nvidia 레지스트리에서 미리 훈련된 물체 검측 모형을 다운로드한다.
mkdir -p ./yolo_v4/pretrained_resnet18
ngc registry model download-version nvidia/tlt_pretrained_object_detection:resnet18 \
    --dest ./yolo_v4/pretrained_resnet18
샘플링의 훈련 데이터에 있어서 마이크로스피커 대상 검측기는 아래의 명령처럼 간단하다.Nvidia 계정에서 받은 API 토큰으로 키를 교체해야 합니다.
mkdir -p $PWD/yolo_v4/experiment_dir_unpruned
tlt yolo_v4 train \
    -e /workspace/tlt-experiments/yolo_v4/specs/yolo_v4_minneapple.txt \
    -r /workspace/tlt-experiments/yolo_v4/experiment_dir_unpruned \
    --gpus 1 \
    -k YOUR_KEY
현재 데이터 집합의 대상 탐지기를 미세하게 조정하여 작업 상황을 추정할 수 있습니다.
전체 데이터 집합에서 추리를 하는 장점은 모델이 어떤 이미지에서 좋지 않거나 불확실성이 많은지 쉽게 찾아낼 수 있다는 것이다.
tlt yolo_v4 inference \
    -i /workspace/tlt-experiments/data/raw/images/ \
    -e /workspace/tlt-experiments/yolo_v4/specs/yolo_v4_minneapple.txt \
    -m /workspace/tlt-experiments/yolo_v4/experiment_dir_unpruned/weights/yolov4_resnet18_epoch_050.tlt \
    -o /workspace/tlt-experiments/infer_images \
    -l /workspace/tlt-experiments/infer_labels \
    -k MY_KEY
다음은 훈련 후의 사진 두 장을 볼 수 있다.이 모델은 표시되지 않은 이미지에서 좋지 않은 것이 분명하다.따라서 훈련 데이터에 더 많은 샘플을 집중하는 것은 의미가 있다.

이 모델은 데이터가 표시되지 않은 이미지에 애플이 여러 개 없습니다.이것은 이 모델이 아직 생산에 쓰기에 부족하다는 것을 의미한다.

능동적 학습 절차


이전 단계의 추론을 사용하여 어떤 이미지가 모델 문제를 일으켰는지 확인할 수 있습니다.Lightly를 사용하면 트레이닝 데이터 세트가 중복된 이미지로 가득 차지 않도록 이미지를 쉽게 선택할 수 있습니다.
이 절은 훈련 데이터 집합을 완성한 이미지를 어떻게 선택하는지 소개한다.활성 학습을 사용하여 질의할 수 있습니다.py 스크립트를 다시 사용하지만, 이번에는 미리 선택한 그림이 존재한다는 것을 지적하고, 스크립트를 저장된 추정 위치를 가리켜야 합니다.n_samples 매개 변수는 활동 학습 조회 후의 견본 총수를 나타낸다.초기 선택은 100개의 견본을 포함하고, 우리는 표기집에 100개의 견본을 추가하기를 희망합니다.그래서 우리는 n_samples=200를 설치했다.
샘플링 방법으로는 CORESET 대신 CORAL을 사용합니다.CORAL은 샘플링 데이터에서 능동 학습 점수의 다양성과 총계를 동시에 극대화한다.
이 스크립트의 작업 원리는 이전과 매우 비슷하지만 현저한 차이가 있다. 이번에는 모든 추정된 라벨을 불러오고 각 견본의 활동 학습 점수를 계산하는 데 사용될 것이다.
# create a scorer to calculate active learning scores based on model outputs
scorer = ScorerObjectDetection(model_outputs)
스크립트의 나머지 부분은 초기 선택과 거의 같습니다.
# create an api client
client = ApiWorkflowClient(
    token=YOUR_TOKEN,
    dataset_id=YOUR_DATASET_ID,
)

# create an active learning agent and set the preselected tag
al_agent = ActiveLearningAgent(
    client,
    preselected_tag_name='initial-selection',
)

# create a sampler configuration
config = SamplerConfig(
    n_samples=200,
    method=SamplingMethod.CORAL,
    name='al-iteration-1',
)

# make an active learning query
al_agent.query(config, scorer)

# simulate the annotation step
helpers.annotate_images(al_agent.added_set)

재교육


새로운 데이터 집합에서 더 좋은 모델을 얻기 위해 대상 탐지기를 다시 훈련할 수 있습니다.이렇게 하려면 이전과 같은 명령을 사용할 수 있다.마지막 검사점에서 훈련을 계속하려면 스펙 파일의 pretrain model 경로를 resume_model_path로 바꿔야 합니다.
만약 네가 다시 훈련한 후에도 여전히 표현에 만족하지 않는다면, 너는 다시 훈련, 예측, 주동적인 학습 절차를 반복할 수 있다 - 이것이 바로 능동 학습 순환이라고 한다.이 세 가지 절차는 모두 스크립트의 형식으로 이루어졌기 때문에 교체는 아주 적은 노력만 할 수 있고 모델을 계속 개선하는 좋은 방법이다.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
필립 워스
머신 러닝 엔지니어
살며시인공지능

좋은 웹페이지 즐겨찾기