package com.kamco.cd.training.common.dto;

import com.kamco.cd.training.common.enums.ModelType;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class HyperClsParam {

  @Schema(description = "모델", example = "CLS")
  private ModelType model; // G1, G2, G3, G4, CLS

  // -------------------------
  // Model
  // -------------------------

  @Schema(description = "입력 이미지 크기", example = "256")
  private String inputSize; // input_size

  @Schema(description = "배치 크기(Per GPU)", example = "64")
  private Integer batchSize; // batch_size

  @Schema(description = "워커 수", example = "16")
  private Integer workers; // batch_size

  // -------------------------
  // Augmentation
  // -------------------------
  @Schema(description = "scale", example = "0.5")
  private Double scale;

  @Schema(description = "translate", example = "0.1")
  private Double translate;

  @Schema(description = "fliplr", example = "0.5")
  private Double fliplr;

  @Schema(description = "flipud", example = "0.5")
  private Double flipud;

  @Schema(description = "erasing")
  private Double erasing;

  @Schema(description = "mixup", example = "0.1")
  private Double mixup;

  @Schema(description = "hsv_h")
  private Double hsvH;

  @Schema(description = "hsv_s")
  private Double hsvS;

  @Schema(description = "hsv_v")
  private Double hsvV;

  @Schema(description = "dropout")
  private Double dropout;

  @Schema(description = "label_smoothing")
  private Double labelSmoothing;

  // -------------------------
  // Memo
  // -------------------------
  @Schema(description = "메모", example = "하이퍼파라미터 신규등록")
  private String memo; // memo

  private Boolean isDefault = false;
}
