init
This commit is contained in:
219
src/main/java/com/kamco/cd/training/model/dto/HyperParamDto.java
Normal file
219
src/main/java/com/kamco/cd/training/model/dto/HyperParamDto.java
Normal file
@@ -0,0 +1,219 @@
|
||||
package com.kamco.cd.training.model.dto;
|
||||
|
||||
import com.kamco.cd.training.common.utils.interfaces.JsonFormatDttm;
|
||||
import com.kamco.cd.training.postgres.entity.ModelHyperParamEntity;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import java.time.ZonedDateTime;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
public class HyperParamDto {
|
||||
|
||||
@Schema(name = "HyperParam Basic", description = "하이퍼파라미터 기본 정보")
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class Basic {
|
||||
private String hyperVer;
|
||||
|
||||
// Important
|
||||
private String backbone;
|
||||
private String inputSize;
|
||||
private String cropSize;
|
||||
private Integer epochCnt;
|
||||
private Integer batchSize;
|
||||
|
||||
// Architecture
|
||||
private Double dropPathRate;
|
||||
private Integer frozenStages;
|
||||
private String neckPolicy;
|
||||
private String decoderChannels;
|
||||
private String classWeight;
|
||||
private Integer numLayers;
|
||||
|
||||
// Optimization
|
||||
private Double learningRate;
|
||||
private Double weightDecay;
|
||||
private Double layerDecayRate;
|
||||
private Boolean ddpFindUnusedParams;
|
||||
private Integer ignoreIndex;
|
||||
|
||||
// Data
|
||||
private Integer trainNumWorkers;
|
||||
private Integer valNumWorkers;
|
||||
private Integer testNumWorkers;
|
||||
private Boolean trainShuffle;
|
||||
private Boolean trainPersistent;
|
||||
private Boolean valPersistent;
|
||||
|
||||
// Evaluation
|
||||
private String metrics;
|
||||
private String saveBest;
|
||||
private String saveBestRule;
|
||||
private Integer valInterval;
|
||||
private Integer logInterval;
|
||||
private Integer visInterval;
|
||||
|
||||
// Hardware
|
||||
private Integer gpuCnt;
|
||||
private String gpuIds;
|
||||
private Integer masterPort;
|
||||
|
||||
// Augmentation
|
||||
private Double rotProb;
|
||||
private Double flipProb;
|
||||
private String rotDegree;
|
||||
private Double exchangeProb;
|
||||
private Integer brightnessDelta;
|
||||
private String contrastRange;
|
||||
private String saturationRange;
|
||||
private Integer hueDelta;
|
||||
|
||||
// Legacy (deprecated)
|
||||
private Double dropoutRatio;
|
||||
private Integer cnnFilterCnt;
|
||||
|
||||
// Common
|
||||
private String memo;
|
||||
@JsonFormatDttm private ZonedDateTime createdDttm;
|
||||
|
||||
public Basic(ModelHyperParamEntity entity) {
|
||||
this.hyperVer = entity.getHyperVer();
|
||||
|
||||
// Important
|
||||
this.backbone = entity.getBackbone();
|
||||
this.inputSize = entity.getInputSize();
|
||||
this.cropSize = entity.getCropSize();
|
||||
this.epochCnt = entity.getEpochCnt();
|
||||
this.batchSize = entity.getBatchSize();
|
||||
|
||||
// Architecture
|
||||
this.dropPathRate = entity.getDropPathRate();
|
||||
this.frozenStages = entity.getFrozenStages();
|
||||
this.neckPolicy = entity.getNeckPolicy();
|
||||
this.decoderChannels = entity.getDecoderChannels();
|
||||
this.classWeight = entity.getClassWeight();
|
||||
this.numLayers = entity.getNumLayers();
|
||||
|
||||
// Optimization
|
||||
this.learningRate = entity.getLearningRate();
|
||||
this.weightDecay = entity.getWeightDecay();
|
||||
this.layerDecayRate = entity.getLayerDecayRate();
|
||||
this.ddpFindUnusedParams = entity.getDdpFindUnusedParams();
|
||||
this.ignoreIndex = entity.getIgnoreIndex();
|
||||
|
||||
// Data
|
||||
this.trainNumWorkers = entity.getTrainNumWorkers();
|
||||
this.valNumWorkers = entity.getValNumWorkers();
|
||||
this.testNumWorkers = entity.getTestNumWorkers();
|
||||
this.trainShuffle = entity.getTrainShuffle();
|
||||
this.trainPersistent = entity.getTrainPersistent();
|
||||
this.valPersistent = entity.getValPersistent();
|
||||
|
||||
// Evaluation
|
||||
this.metrics = entity.getMetrics();
|
||||
this.saveBest = entity.getSaveBest();
|
||||
this.saveBestRule = entity.getSaveBestRule();
|
||||
this.valInterval = entity.getValInterval();
|
||||
this.logInterval = entity.getLogInterval();
|
||||
this.visInterval = entity.getVisInterval();
|
||||
|
||||
// Hardware
|
||||
this.gpuCnt = entity.getGpuCnt();
|
||||
this.gpuIds = entity.getGpuIds();
|
||||
this.masterPort = entity.getMasterPort();
|
||||
|
||||
// Augmentation
|
||||
this.rotProb = entity.getRotProb();
|
||||
this.flipProb = entity.getFlipProb();
|
||||
this.rotDegree = entity.getRotDegree();
|
||||
this.exchangeProb = entity.getExchangeProb();
|
||||
this.brightnessDelta = entity.getBrightnessDelta();
|
||||
this.contrastRange = entity.getContrastRange();
|
||||
this.saturationRange = entity.getSaturationRange();
|
||||
this.hueDelta = entity.getHueDelta();
|
||||
|
||||
// Legacy
|
||||
this.dropoutRatio = entity.getDropoutRatio();
|
||||
this.cnnFilterCnt = entity.getCnnFilterCnt();
|
||||
|
||||
// Common
|
||||
this.memo = entity.getMemo();
|
||||
this.createdDttm = entity.getCreatedDttm();
|
||||
}
|
||||
}
|
||||
|
||||
@Schema(name = "HyperParam AddReq", description = "하이퍼파라미터 등록 요청")
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class AddReq {
|
||||
@NotBlank(message = "버전명은 필수입니다")
|
||||
private String hyperVer;
|
||||
|
||||
// Important
|
||||
private String backbone;
|
||||
private String inputSize;
|
||||
private String cropSize;
|
||||
private Integer epochCnt;
|
||||
private Integer batchSize;
|
||||
|
||||
// Architecture
|
||||
private Double dropPathRate;
|
||||
private Integer frozenStages;
|
||||
private String neckPolicy;
|
||||
private String decoderChannels;
|
||||
private String classWeight;
|
||||
private Integer numLayers;
|
||||
|
||||
// Optimization
|
||||
private Double learningRate;
|
||||
private Double weightDecay;
|
||||
private Double layerDecayRate;
|
||||
private Boolean ddpFindUnusedParams;
|
||||
private Integer ignoreIndex;
|
||||
|
||||
// Data
|
||||
private Integer trainNumWorkers;
|
||||
private Integer valNumWorkers;
|
||||
private Integer testNumWorkers;
|
||||
private Boolean trainShuffle;
|
||||
private Boolean trainPersistent;
|
||||
private Boolean valPersistent;
|
||||
|
||||
// Evaluation
|
||||
private String metrics;
|
||||
private String saveBest;
|
||||
private String saveBestRule;
|
||||
private Integer valInterval;
|
||||
private Integer logInterval;
|
||||
private Integer visInterval;
|
||||
|
||||
// Hardware
|
||||
private Integer gpuCnt;
|
||||
private String gpuIds;
|
||||
private Integer masterPort;
|
||||
|
||||
// Augmentation
|
||||
private Double rotProb;
|
||||
private Double flipProb;
|
||||
private String rotDegree;
|
||||
private Double exchangeProb;
|
||||
private Integer brightnessDelta;
|
||||
private String contrastRange;
|
||||
private String saturationRange;
|
||||
private Integer hueDelta;
|
||||
|
||||
// Legacy (deprecated)
|
||||
private Double dropoutRatio;
|
||||
private Integer cnnFilterCnt;
|
||||
|
||||
// Common
|
||||
private String memo;
|
||||
}
|
||||
}
|
||||
595
src/main/java/com/kamco/cd/training/model/dto/ModelMngDto.java
Normal file
595
src/main/java/com/kamco/cd/training/model/dto/ModelMngDto.java
Normal file
@@ -0,0 +1,595 @@
|
||||
package com.kamco.cd.training.model.dto;
|
||||
|
||||
import com.kamco.cd.training.common.utils.interfaces.JsonFormatDttm;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
||||
public class ModelMngDto {
|
||||
|
||||
@Schema(name = "모델관리 목록 조회", description = "모델관리 목록 조회")
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public static class Basic {
|
||||
|
||||
private Long id;
|
||||
private String modelNm;
|
||||
@JsonFormatDttm private ZonedDateTime startDttm;
|
||||
@JsonFormatDttm private ZonedDateTime trainingEndDttm;
|
||||
@JsonFormatDttm private ZonedDateTime testEndDttm;
|
||||
private String durationDttm;
|
||||
private String processStage;
|
||||
private String statusCd;
|
||||
private String status;
|
||||
}
|
||||
|
||||
@Schema(name = "searchReq", description = "모델 관리 목록조회 파라미터")
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class SearchReq {
|
||||
|
||||
private String status;
|
||||
// 페이징 파라미터
|
||||
private int page = 0;
|
||||
private int size = 20;
|
||||
|
||||
public Pageable toPageable() {
|
||||
return PageRequest.of(page, size);
|
||||
}
|
||||
}
|
||||
|
||||
@Schema(name = "Detail", description = "모델 상세 정보")
|
||||
@Getter
|
||||
@Builder
|
||||
public static class Detail {
|
||||
private String uuid;
|
||||
private String modelVer;
|
||||
private String hyperVer;
|
||||
private String epochVer;
|
||||
private String processStep;
|
||||
private String statusCd;
|
||||
private String statusText;
|
||||
|
||||
@JsonFormatDttm private ZonedDateTime trainStartDttm;
|
||||
|
||||
private Integer epochCnt;
|
||||
private String datasetRatio;
|
||||
private Integer bestEpoch;
|
||||
private Integer confirmedBestEpoch;
|
||||
|
||||
@JsonFormatDttm private ZonedDateTime step1EndDttm;
|
||||
|
||||
private String step1Duration;
|
||||
|
||||
@JsonFormatDttm private ZonedDateTime step2EndDttm;
|
||||
|
||||
private String step2Duration;
|
||||
private Integer progressRate;
|
||||
|
||||
@JsonFormatDttm private ZonedDateTime createdDttm;
|
||||
|
||||
@JsonFormatDttm private ZonedDateTime updatedDttm;
|
||||
|
||||
private String modelPath;
|
||||
private String errorMsg;
|
||||
}
|
||||
|
||||
@Schema(name = "TrainListRes", description = "학습 모델 목록 응답")
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public static class TrainListRes {
|
||||
private String uuid;
|
||||
private String modelVer;
|
||||
private String status;
|
||||
private String processStep;
|
||||
|
||||
@JsonFormatDttm private ZonedDateTime trainStartDttm;
|
||||
|
||||
private Integer progressRate;
|
||||
private Integer epochCnt;
|
||||
|
||||
@JsonFormatDttm private ZonedDateTime step1EndDttm;
|
||||
|
||||
private String step1Duration;
|
||||
|
||||
@JsonFormatDttm private ZonedDateTime step2EndDttm;
|
||||
|
||||
private String step2Duration;
|
||||
|
||||
@JsonFormatDttm private ZonedDateTime createdDttm;
|
||||
|
||||
private String errorMsg;
|
||||
|
||||
private Boolean canResume;
|
||||
private Integer lastCheckpointEpoch;
|
||||
}
|
||||
|
||||
@Schema(name = "FormConfigRes", description = "학습 설정 통합 조회 응답")
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public static class FormConfigRes {
|
||||
private Boolean isTrainAvailable;
|
||||
private List<HyperParamInfo> hyperParams;
|
||||
private List<DatasetInfo> datasets;
|
||||
private String runningModelUuid;
|
||||
}
|
||||
|
||||
@Schema(name = "HyperParamInfo", description = "하이퍼파라미터 정보")
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public static class HyperParamInfo {
|
||||
@Schema(description = "하이퍼파라미터 버전", example = "V3.99.251221.120518")
|
||||
private String hyperVer;
|
||||
|
||||
// Important
|
||||
@Schema(description = "백본", example = "large")
|
||||
private String backbone;
|
||||
|
||||
@Schema(description = "입력 사이즈", example = "256,256")
|
||||
private String inputSize;
|
||||
|
||||
@Schema(description = "크롭 사이즈", example = "256,256")
|
||||
private String cropSize;
|
||||
|
||||
@Schema(description = "에폭 수", example = "200")
|
||||
private Integer epochCnt;
|
||||
|
||||
@Schema(description = "배치 사이즈", example = "16")
|
||||
private Integer batchSize;
|
||||
|
||||
// Architecture
|
||||
@Schema(description = "Drop Path Rate", example = "0.3")
|
||||
private Double dropPathRate;
|
||||
|
||||
@Schema(description = "Frozen Stages", example = "-1")
|
||||
private Integer frozenStages;
|
||||
|
||||
@Schema(description = "Neck Policy", example = "abs_diff")
|
||||
private String neckPolicy;
|
||||
|
||||
@Schema(description = "Decoder Channels", example = "512,256,128,64")
|
||||
private String decoderChannels;
|
||||
|
||||
@Schema(description = "Class Weight", example = "1,1")
|
||||
private String classWeight;
|
||||
|
||||
@Schema(description = "레이어 수", example = "24")
|
||||
private Integer numLayers;
|
||||
|
||||
// Optimization
|
||||
@Schema(description = "Learning Rate", example = "0.00006")
|
||||
private Double learningRate;
|
||||
|
||||
@Schema(description = "Weight Decay", example = "0.05")
|
||||
private Double weightDecay;
|
||||
|
||||
@Schema(description = "Layer Decay Rate", example = "0.9")
|
||||
private Double layerDecayRate;
|
||||
|
||||
@Schema(description = "DDP Unused Params 찾기", example = "true")
|
||||
private Boolean ddpFindUnusedParams;
|
||||
|
||||
@Schema(description = "Ignore Index", example = "255")
|
||||
private Integer ignoreIndex;
|
||||
|
||||
// Data
|
||||
@Schema(description = "Train Workers", example = "16")
|
||||
private Integer trainNumWorkers;
|
||||
|
||||
@Schema(description = "Val Workers", example = "8")
|
||||
private Integer valNumWorkers;
|
||||
|
||||
@Schema(description = "Test Workers", example = "8")
|
||||
private Integer testNumWorkers;
|
||||
|
||||
@Schema(description = "Train Shuffle", example = "true")
|
||||
private Boolean trainShuffle;
|
||||
|
||||
@Schema(description = "Train Persistent", example = "true")
|
||||
private Boolean trainPersistent;
|
||||
|
||||
@Schema(description = "Val Persistent", example = "true")
|
||||
private Boolean valPersistent;
|
||||
|
||||
// Evaluation
|
||||
@Schema(description = "Metrics", example = "mFscore,mIoU")
|
||||
private String metrics;
|
||||
|
||||
@Schema(description = "Save Best", example = "changed_fscore")
|
||||
private String saveBest;
|
||||
|
||||
@Schema(description = "Save Best Rule", example = "greater")
|
||||
private String saveBestRule;
|
||||
|
||||
@Schema(description = "Val Interval", example = "10")
|
||||
private Integer valInterval;
|
||||
|
||||
@Schema(description = "Log Interval", example = "400")
|
||||
private Integer logInterval;
|
||||
|
||||
@Schema(description = "Vis Interval", example = "1")
|
||||
private Integer visInterval;
|
||||
|
||||
// Hardware
|
||||
@Schema(description = "GPU 수", example = "4")
|
||||
private Integer gpuCnt;
|
||||
|
||||
@Schema(description = "GPU IDs", example = "0,1,2,3")
|
||||
private String gpuIds;
|
||||
|
||||
@Schema(description = "Master Port", example = "1122")
|
||||
private Integer masterPort;
|
||||
|
||||
// Augmentation
|
||||
@Schema(description = "Rotation 확률", example = "0.5")
|
||||
private Double rotProb;
|
||||
|
||||
@Schema(description = "Flip 확률", example = "0.5")
|
||||
private Double flipProb;
|
||||
|
||||
@Schema(description = "Rotation 각도", example = "-20,20")
|
||||
private String rotDegree;
|
||||
|
||||
@Schema(description = "Exchange 확률", example = "0.5")
|
||||
private Double exchangeProb;
|
||||
|
||||
@Schema(description = "Brightness Delta", example = "10")
|
||||
private Integer brightnessDelta;
|
||||
|
||||
@Schema(description = "Contrast Range", example = "0.8,1.2")
|
||||
private String contrastRange;
|
||||
|
||||
@Schema(description = "Saturation Range", example = "0.8,1.2")
|
||||
private String saturationRange;
|
||||
|
||||
@Schema(description = "Hue Delta", example = "10")
|
||||
private Integer hueDelta;
|
||||
|
||||
// Legacy
|
||||
private Double dropoutRatio;
|
||||
private Integer cnnFilterCnt;
|
||||
|
||||
// Common
|
||||
@Schema(description = "메모", example = "안녕하세요 캠코담당자 입니다. 하이퍼파라미터 신규등록합니다")
|
||||
private String memo;
|
||||
|
||||
@JsonFormatDttm private ZonedDateTime createdDttm;
|
||||
}
|
||||
|
||||
@Schema(name = "DatasetInfo", description = "데이터셋 정보")
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public static class DatasetInfo {
|
||||
private Long id;
|
||||
private String title;
|
||||
private String groupTitle;
|
||||
private Long totalItems;
|
||||
private String totalSize;
|
||||
private Map<String, Integer> classCounts;
|
||||
private String memo;
|
||||
|
||||
@JsonFormatDttm private ZonedDateTime createdDttm;
|
||||
}
|
||||
|
||||
@Schema(name = "HyperParamCreateReq", description = "하이퍼파라미터 등록 요청")
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class HyperParamCreateReq {
|
||||
// baseHyperVer는 필수 아님 (신규 생성 시 H1으로 자동 설정)
|
||||
@Schema(description = "기준이 되는 하이퍼파라미터 버전", example = "H3")
|
||||
private String baseHyperVer;
|
||||
|
||||
@NotBlank(message = "신규 버전명은 필수입니다")
|
||||
@Schema(description = "새로 생성할 하이퍼파라미터 버전명", example = "V3.99.251221.120518")
|
||||
private String newHyperVer;
|
||||
|
||||
// Important - 필수 필드
|
||||
@NotBlank(message = "Backbone은 필수입니다")
|
||||
@Schema(example = "large")
|
||||
private String backbone;
|
||||
|
||||
@NotBlank(message = "Input Size는 필수입니다")
|
||||
@Schema(example = "256,256")
|
||||
private String inputSize;
|
||||
|
||||
@NotBlank(message = "Crop Size는 필수입니다")
|
||||
@Schema(example = "256,256")
|
||||
private String cropSize;
|
||||
|
||||
@NotNull(message = "Epoch Count는 필수입니다")
|
||||
@Schema(example = "200")
|
||||
private Integer epochCnt;
|
||||
|
||||
@NotNull(message = "Batch Size는 필수입니다")
|
||||
@Schema(example = "16")
|
||||
private Integer batchSize;
|
||||
|
||||
// Architecture - 필수 필드
|
||||
@NotNull(message = "Drop Path Rate는 필수입니다")
|
||||
@Schema(example = "0.3")
|
||||
private Double dropPathRate;
|
||||
|
||||
@NotNull(message = "Frozen Stages는 필수입니다")
|
||||
@Schema(example = "-1")
|
||||
private Integer frozenStages;
|
||||
|
||||
@NotBlank(message = "Neck Policy는 필수입니다")
|
||||
@Schema(example = "abs_diff")
|
||||
private String neckPolicy;
|
||||
|
||||
@NotBlank(message = "Decoder Channels는 필수입니다")
|
||||
@Schema(example = "512,256,128,64")
|
||||
private String decoderChannels;
|
||||
|
||||
@NotBlank(message = "Class Weight는 필수입니다")
|
||||
@Schema(example = "1,1")
|
||||
private String classWeight;
|
||||
|
||||
// numLayers는 필수 아님
|
||||
@Schema(example = "24")
|
||||
private Integer numLayers;
|
||||
|
||||
// Optimization - 필수 필드
|
||||
@NotNull(message = "Learning Rate는 필수입니다")
|
||||
@Schema(example = "0.00006")
|
||||
private Double learningRate;
|
||||
|
||||
@NotNull(message = "Weight Decay는 필수입니다")
|
||||
@Schema(example = "0.05")
|
||||
private Double weightDecay;
|
||||
|
||||
@NotNull(message = "Layer Decay Rate는 필수입니다")
|
||||
@Schema(example = "0.9")
|
||||
private Double layerDecayRate;
|
||||
|
||||
@NotNull(message = "DDP Find Unused Params는 필수입니다")
|
||||
@Schema(example = "true")
|
||||
private Boolean ddpFindUnusedParams;
|
||||
|
||||
@NotNull(message = "Ignore Index는 필수입니다")
|
||||
@Schema(example = "255")
|
||||
private Integer ignoreIndex;
|
||||
|
||||
// Data - 필수 필드
|
||||
@NotNull(message = "Train Num Workers는 필수입니다")
|
||||
@Schema(example = "16")
|
||||
private Integer trainNumWorkers;
|
||||
|
||||
@NotNull(message = "Val Num Workers는 필수입니다")
|
||||
@Schema(example = "8")
|
||||
private Integer valNumWorkers;
|
||||
|
||||
@NotNull(message = "Test Num Workers는 필수입니다")
|
||||
@Schema(example = "8")
|
||||
private Integer testNumWorkers;
|
||||
|
||||
@NotNull(message = "Train Shuffle는 필수입니다")
|
||||
@Schema(example = "true")
|
||||
private Boolean trainShuffle;
|
||||
|
||||
@NotNull(message = "Train Persistent는 필수입니다")
|
||||
@Schema(example = "true")
|
||||
private Boolean trainPersistent;
|
||||
|
||||
@NotNull(message = "Val Persistent는 필수입니다")
|
||||
@Schema(example = "true")
|
||||
private Boolean valPersistent;
|
||||
|
||||
// Evaluation - 필수 필드
|
||||
@NotBlank(message = "Metrics는 필수입니다")
|
||||
@Schema(example = "mFscore,mIoU")
|
||||
private String metrics;
|
||||
|
||||
@NotBlank(message = "Save Best는 필수입니다")
|
||||
@Schema(example = "changed_fscore")
|
||||
private String saveBest;
|
||||
|
||||
@NotBlank(message = "Save Best Rule은 필수입니다")
|
||||
@Schema(example = "greater")
|
||||
private String saveBestRule;
|
||||
|
||||
@NotNull(message = "Val Interval은 필수입니다")
|
||||
@Schema(example = "10")
|
||||
private Integer valInterval;
|
||||
|
||||
@NotNull(message = "Log Interval은 필수입니다")
|
||||
@Schema(example = "400")
|
||||
private Integer logInterval;
|
||||
|
||||
@NotNull(message = "Vis Interval은 필수입니다")
|
||||
@Schema(example = "1")
|
||||
private Integer visInterval;
|
||||
|
||||
// Hardware - 필수 아님 (예외 항목)
|
||||
@Schema(example = "4")
|
||||
private Integer gpuCnt;
|
||||
|
||||
@Schema(example = "0,1,2,3")
|
||||
private String gpuIds;
|
||||
|
||||
@Schema(example = "1122")
|
||||
private Integer masterPort;
|
||||
|
||||
// Augmentation - 필수 필드
|
||||
@NotNull(message = "Rotation Probability는 필수입니다")
|
||||
@Schema(example = "0.5")
|
||||
private Double rotProb;
|
||||
|
||||
@NotNull(message = "Flip Probability는 필수입니다")
|
||||
@Schema(example = "0.5")
|
||||
private Double flipProb;
|
||||
|
||||
@NotBlank(message = "Rotation Degree는 필수입니다")
|
||||
@Schema(example = "-20,20")
|
||||
private String rotDegree;
|
||||
|
||||
@NotNull(message = "Exchange Probability는 필수입니다")
|
||||
@Schema(example = "0.5")
|
||||
private Double exchangeProb;
|
||||
|
||||
@NotNull(message = "Brightness Delta는 필수입니다")
|
||||
@Schema(example = "10")
|
||||
private Integer brightnessDelta;
|
||||
|
||||
@NotBlank(message = "Contrast Range는 필수입니다")
|
||||
@Schema(example = "0.8,1.2")
|
||||
private String contrastRange;
|
||||
|
||||
@NotBlank(message = "Saturation Range는 필수입니다")
|
||||
@Schema(example = "0.8,1.2")
|
||||
private String saturationRange;
|
||||
|
||||
@NotNull(message = "Hue Delta는 필수입니다")
|
||||
@Schema(example = "10")
|
||||
private Integer hueDelta;
|
||||
|
||||
// Legacy - 필수 아님 (예외 항목)
|
||||
private Double dropoutRatio;
|
||||
private Integer cnnFilterCnt;
|
||||
|
||||
// Common - 필수 아님 (예외 항목)
|
||||
@Schema(example = "안녕하세요 캠코담당자 입니다. 하이퍼파라미터 신규등록합니다")
|
||||
private String memo;
|
||||
}
|
||||
|
||||
@Schema(name = "TrainStartReq", description = "학습 시작 요청")
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class TrainStartReq {
|
||||
@NotBlank(message = "하이퍼파라미터 버전은 필수입니다")
|
||||
@Schema(example = "V3.99.251221.120518")
|
||||
private String hyperVer;
|
||||
|
||||
@NotEmpty(message = "데이터셋은 최소 1개 이상 선택해야 합니다")
|
||||
private List<Long> datasetIds;
|
||||
|
||||
@NotNull(message = "에폭 수는 필수입니다")
|
||||
@jakarta.validation.constraints.Min(value = 1, message = "에폭 수는 최소 1 이상이어야 합니다")
|
||||
@jakarta.validation.constraints.Max(value = 200, message = "에폭 수는 최대 200까지 설정 가능합니다")
|
||||
@Schema(example = "200")
|
||||
private Integer epoch;
|
||||
|
||||
@Schema(example = "7:2:1", description = "데이터 분할 비율 (Training:Validation:Test)")
|
||||
private String datasetRatio;
|
||||
}
|
||||
|
||||
@Schema(name = "TrainStartRes", description = "학습 시작 응답")
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public static class TrainStartRes {
|
||||
private String uuid;
|
||||
private String status;
|
||||
}
|
||||
|
||||
@Schema(name = "ResumeInfo", description = "학습 재시작 정보")
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public static class ResumeInfo {
|
||||
private Boolean canResume;
|
||||
private Integer lastEpoch;
|
||||
private Integer totalEpoch;
|
||||
private String checkpointPath;
|
||||
@JsonFormatDttm private ZonedDateTime failedAt;
|
||||
}
|
||||
|
||||
@Schema(name = "ResumeRequest", description = "학습 재시작 요청")
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class ResumeRequest {
|
||||
@NotNull(message = "재시작 Epoch는 필수입니다")
|
||||
private Integer resumeFromEpoch;
|
||||
|
||||
private Integer newTotalEpoch;
|
||||
}
|
||||
|
||||
@Schema(name = "ResumeResponse", description = "학습 재시작 응답")
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public static class ResumeResponse {
|
||||
private String uuid;
|
||||
private String status;
|
||||
private Integer resumedFromEpoch;
|
||||
}
|
||||
|
||||
@Schema(name = "BestEpochRequest", description = "Best Epoch 설정 요청")
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class BestEpochRequest {
|
||||
@NotNull(message = "Best Epoch는 필수입니다")
|
||||
private Integer bestEpoch;
|
||||
|
||||
private String reason;
|
||||
}
|
||||
|
||||
@Schema(name = "BestEpochResponse", description = "Best Epoch 설정 응답")
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public static class BestEpochResponse {
|
||||
private String uuid;
|
||||
private Integer bestEpoch;
|
||||
private Integer confirmedBestEpoch;
|
||||
private Integer previousBestEpoch;
|
||||
}
|
||||
|
||||
@Schema(name = "EpochMetric", description = "Epoch별 성능 지표")
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public static class EpochMetric {
|
||||
private Integer epoch;
|
||||
private Double mIoU;
|
||||
private Double mFscore;
|
||||
private Double loss;
|
||||
private Boolean isBest;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
package com.kamco.cd.training.model.dto;
|
||||
|
||||
import com.kamco.cd.training.common.utils.interfaces.JsonFormatDttm;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import java.time.ZonedDateTime;
|
||||
import lombok.Getter;
|
||||
|
||||
public class ModelVerDto {
|
||||
|
||||
@Schema(name = "modelVer Basic", description = "모델버전 엔티티 기본 정보")
|
||||
@Getter
|
||||
public static class Basic {
|
||||
|
||||
private final Long id;
|
||||
private final Long modelUid;
|
||||
|
||||
private final String modelCate;
|
||||
private final String modelVer;
|
||||
|
||||
private final String usedState;
|
||||
private final String modelState;
|
||||
private final Double qualityProb;
|
||||
private final String deployState;
|
||||
private final String modelPath;
|
||||
|
||||
@JsonFormatDttm private final ZonedDateTime createdDttm;
|
||||
private final Long createdUid;
|
||||
|
||||
@JsonFormatDttm private final ZonedDateTime updatedDttm;
|
||||
private final Long updatedUid;
|
||||
|
||||
public Basic(
|
||||
Long id,
|
||||
Long modelUid,
|
||||
String modelCate,
|
||||
String modelVer,
|
||||
String usedState,
|
||||
String modelState,
|
||||
Double qualityProb,
|
||||
String deployState,
|
||||
String modelPath,
|
||||
ZonedDateTime createdDttm,
|
||||
Long createdUid,
|
||||
ZonedDateTime updatedDttm,
|
||||
Long updatedUid) {
|
||||
this.id = id;
|
||||
this.modelUid = modelUid;
|
||||
this.modelCate = modelCate;
|
||||
this.modelVer = modelVer;
|
||||
this.usedState = usedState;
|
||||
this.modelState = modelState;
|
||||
this.qualityProb = qualityProb;
|
||||
this.deployState = deployState;
|
||||
this.modelPath = modelPath;
|
||||
this.createdDttm = createdDttm;
|
||||
this.createdUid = createdUid;
|
||||
this.updatedDttm = updatedDttm;
|
||||
this.updatedUid = updatedUid;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user