datasets

데이터셋 일괄 변경 (Batch Edit)

한 데이터셋에 증강 / 다운샘플 / 크롭 / 회전을 한 번에 적용해 새 데이터셋을 만듭니다.

최근 확인 버전: v5.0.0

일괄 변경(Batch Edit) 은 한 데이터셋 전체에 네 가지 변환 — 증강 / 다운샘플 / 크롭 / 회전 — 을 한 번에 적용해 새 데이터셋을 생성하는 기능입니다.

어디서 여나

좌측 네비의 데이터셋 탭에서 다음 두 방법 중 하나로 엽니다.

  • 데이터셋 폴더 라벨 클릭 — 트리에서 데이터셋 이름(아이콘/텍스트) 영역을 클릭하면 우측에 BatchEditPanel 이 펼쳐집니다. expand/collapse는 행 우측의 chevron으로만 동작하므로, 폴더를 열지 않고도 패널을 열 수 있습니다.
  • 데이터셋 우클릭 → Batch Edit — 우클릭 메뉴의 Batch Edit 항목을 누릅니다.
데이터셋 우클릭 메뉴 — Edit / Batch Edit / Merge / Export / Delete

패널 구성

패널 상단에 출력 데이터셋 이름 입력칸이 있고, 그 아래로 네 개의 섹션(Augmentation / Downsample / Crop / Rotate)이 펼침/접힘 카드 형태로 정렬되어 있습니다. 각 섹션은 Enable 토글로 따로 켜고 끕니다 — 켜진 섹션만 실제로 적용됩니다.

BatchEditPanel 전체 — 출력 이름 + Augmentation/Downsample/Crop/Rotate 섹션 + 하단 Apply 버튼

Augmentation 섹션

색상·노이즈·perspective 변환을 적용해 한 에피소드에서 여러 학습 샘플을 만듭니다. 다음 하위 항목으로 구성됩니다.

  • Repeat — 한 원본 에피소드에서 몇 배의 증강 복제본을 만들지 정합니다. repeat=3이면 원본 1개당 무작위로 변형된 에피소드 3개가 생성됩니다(1~20).
  • Lightness — 밝기 보정(-100 ~ +100).
  • HSV — Hue / Saturation / Value 슬라이더. Random 체크 시 매 에피소드마다 무작위 값이 추첨됩니다.
  • Disturbances — 화면에 무작위 사각형을 그려 가림 상황을 시뮬레이션합니다. Count(개수)와 색상(고정/Random color)을 설정합니다.
  • Salt & Pepper — 점잡음 비율(0~1).
  • Gaussian noise — Mean / Sigma 슬라이더.
  • Perspective — Scale / Degrees / Shear / Perspective 슬라이더로 평면 왜곡을 줍니다.
Augmentation 섹션 펼친 모습 — Repeat, Lightness, HSV, Disturbances, Salt & Pepper, Gaussian, Perspective 슬라이더

Downsample 섹션

프레임을 솎아 시퀀스 길이를 줄입니다.

  • Keep — 한 블록에서 살릴 프레임 수(기본 1).
  • Out of every — 블록 크기(기본 2).

예) keep=1, every=2 → 2 프레임마다 1 프레임 유지(절반). keep=1, every=3 → 1/3.

그리퍼 transition 자동 보존

데이터셋의 info.jsontool_qpos_indices가 있으면 그리퍼 값이 크게 변하는 프레임은 sampling 위치와 상관없이 살아남고, 좌우 1프레임(tool_pad=1)도 함께 보존됩니다. open/close 전환이 빠지면 학습 시 라벨이 노이즈처럼 보일 수 있는데, 별도 옵션 없이 keep/every 비율만 정하면 알아서 처리됩니다.

Crop 섹션 (신규)

카메라(sensor) 별로 첫 프레임 위에 박스를 드래그해 잘라낼 영역을 지정합니다. 데이터셋의 카메라마다 박스가 독립적으로 그려지고, Reset 버튼으로 해당 카메라의 박스만 제거할 수 있습니다.

    1. Crop 섹션을 펼치고 Enable 을 켭니다.

      섹션을 처음 열면 첫 에피소드의 0번째 프레임이 카메라별로 로드됩니다. 로딩이 끝날 때까지 "Loading preview…" 가 잠시 표시될 수 있습니다.

      Crop 섹션 — 카메라별 첫 프레임 + 드래그한 박스 + Reset 버튼
    2. 카메라 영상 위에서 마우스로 박스를 그립니다.

      드래그하는 동안 파란 점선 박스가 보이고, 손을 놓으면 채워진 박스로 고정됩니다. 같은 카메라에서 다시 드래그하면 박스가 새로 그려집니다.

    3. Reset 버튼으로 박스를 지웁니다.

      카메라 헤더 우측의 Reset 버튼을 누르면 해당 카메라의 박스만 제거됩니다. 다른 카메라의 박스는 영향을 받지 않습니다.

Rotate 섹션 (신규)

카메라별로 0° / 90° / 180° / 270° 중 하나를 선택합니다. 토글 버튼 그룹이라 한 번 누르면 적용 각도가 바뀝니다.

Rotate 섹션 — 카메라별 0/90/180/270 q-btn-toggle

Apply — 한 번에 적용

    1. 출력 데이터셋 이름을 입력합니다.

      기본값은 <원본이름>_transformed 입니다. 다른 작업과의 구분이 필요하면 직접 수정합니다.

    2. 켤 섹션의 Enable 토글을 켭니다.

      최소 한 섹션은 켜져 있어야 Apply 버튼이 활성화됩니다.

    3. Apply 버튼을 누릅니다.

      토스트로 "Dataset transform started." 가 뜨고 패널 하단에 progress bar가 표시됩니다. 진행률은 Socket.io 이벤트(transform_progress)로 0~1 사이로 갱신됩니다.

      Apply 후 진행률 progress bar
    4. 완료를 기다립니다.

      transform_complete 이벤트가 도착하면 데이터셋 목록에 새 데이터셋이 등장합니다. 입력한 이름이 새 데이터셋의 이름이 되고, 학습 / 에피소드 편집 등에서 다른 데이터셋과 동일하게 사용할 수 있습니다.

적용 순서

내부적으로는 다음 순서로 한 번의 패스 안에서 처리됩니다.

augment ×N (반복) → downsample → crop → rotate

repeat=3, augmentation=ON, downsample=ON, crop=ON, rotate=ON 으로 두면 원본 1개 에피소드 → 무작위 증강 3개 → 각각 다운샘플 → 각각 카메라별 crop → 각각 카메라별 rotate → 최종 3개의 새 에피소드.

백엔드 API

직접 호출이 필요한 고급 사용자는 다음 엔드포인트를 사용할 수 있습니다.

POST /dataset/<id>/transform
{
  "name": "<출력 데이터셋 이름>",
  "task_id": <워크스페이스 id>,
  "operations": {
    "repeat": 1,
    "augmentation": { "lightness": 0, "hsv": {...}, "rectangles": {...},
                      "saltAndPepper": {...}, "gaussian": {...}, "prospective": {...} },
    "downsample":   { "keep": 1, "every": 2 },
    "crop":   { "regions": { "<sensor_name>": [x1, y1, x2, y2], ... } },
    "rotate": { "angles":  { "<sensor_name>": 0|90|180|270, ... } }
  }
}

진행률은 transform_progress { progress: 0..1 }, 완료는 transform_complete { dataset_id } Socket.io 이벤트로 전달됩니다.

관련 문서