Custom Training for Deep learning

1분 내에 딥러닝 기반의 인공지능 학습을 위한 대용량 GPU 환경을 맞춤형으로 구성하고 바로 학습을 수행할 수 있습니다.

간편한
학습 서버 설정

인공지능 운영 환경에 적절한 서버를 간편하고 신속하게 구성할 수 있습니다.

맞춤형
학습 개발 지원

Jupyter 환경에서 자유롭게 코딩하여 맞춤형 인공지능을 개발할 수 있습니다.

Magic Code를 활용한 학습 가능

DS2.ai에서 제공하는 Magic Code로 자동 생성된 학습 코드를 활용할 수 있습니다.

API를 활용한
신속한 배포

개발된 인공지능은 DS2.ai의 자동 생성 API를 활용하여 간편하게 배포할 수 있습니다.

실시간 서버 시각화 대시보드

실시간으로 학습 서버를 모니터링하고 이슈에 대응할 수 있습니다.

커스텀 학습

간편하게 서버를 구성하고 직접 모델을 개발할 수 있습니다.

CLICK AI의 커스텀 학습을 활용하면 클라우드 학습 서버를 간편하게 설정할 수 있으며, 익숙한 Jupyter 환경에서 인공지능을 개발할 수 있습니다.

맞춤형 학습 서버 구성

백엔드 서버 구축 역량이 없어도 원하는 성능의 맞춤형 학습 서버를 간편하게 직접 구성할 수 있습니다.

Jupyter 개발 환경 제공

Jupyter 환경에서 원하는 알고리즘을 직접 코딩하고 하이퍼 파라미터 튜닝을 통해 인공지능을 개발할 수 있습니다.

Magic Code 자동 생성

Jupyter로의 복사 및 붙여넣기만으로 비전문가도 인공지능 개발을 시작할 수 있는 Magic Code를 자동으로 생성합니다.

더 알아보기 →

간편한 딥러닝 학습 서버 설정

DS2.ai의 CLICK AI는 커스텀 학습을 위한 손쉬운 맞춤형 서버 환경 구성을 지원합니다.

직접 학습 서버 환경 설정

GPU 서버 임대 후 Jupyter Notebook과의 연동을 통해 환경을 설정하고 모델 개발 시작

  • GPU 서버 성능 설정 및 임대 혹은 구입
  • 수동 GPU 서버 환경 세팅
  • Jupyter Notebook 및 딥러닝 라이브러리 설치
  • Jupyter Notebook 환경과 GPU 서버의 수동 연동
  •  
CLICK AI 커스텀 학습을 통한 환경 설정

클라우드형 도입과 서버 설치형 도입 모두 간단한 성능 설정만으로 맞춤형 서버를 자동 생성하고 바로 Jupyter 환경에서 모델 개발 시작

  • 프로젝트 시작과 함께 서버 구성 및 구동 후 바로 학습 수행 가능

맞춤형 인공지능을 위한 학습 환경

생성된 GPU 학습 서버 기반의 Jupyter 환경에서 맞춤형 인공지능을 자유롭게 개발할 수 있습니다.

서비스 제공 방식 선택가능

클라우드형과 서버 설치형 도입 방식 중 선택에 따라 기존 학습 서버 혹은 신규 설정한 학습 서버를 활용하거나, CLICK AI 커스텀 학습 기능을 활용한 맞춤형 학습 서버 설정을 모두 지원합니다.

클라우드형
Public Cloud
공급자와 GPU 서버 크기만으로 사용할 수 있는 클라우드 서버 기반의 서비스

커스텀 학습 기능으로 즉시 구성 및 학습 가능
서버 설치형
Private Cloud
직접 원하는 성능의 폐쇄형 클라우드 서버를 구성하여 DS2.ai 설치만으로 사용하는 서비스

폐쇄형 클라우드 서버 임대형, 보안성 높음
서버 설치형
Enterprise
기존 물리 GPU 서버를 활용하거나 구매하여 DS2.ai 설치만으로 사용하는 서비스

사내 보안망 활용 가능, 보안성 높음
���디서나 사용 가능한 서비스

인터넷 접속이 가능한 데스크탑/노트북이라면 장소와 상관없이 서비스에 접속하여 사용할 수 있습니다.

GPU 기반의 딥러닝 학습 환경

CPU가 아닌 GPU기반의 딥러닝 전용 학습 서버를 원하는 성능으로 선택하여 구성할 수 있습니다.

5분 내에 학습 환경 구성

커스텀 학습의 프로젝트 시작만으로 딥러닝 GPU 서버부터 라이브러리까지 준비되어 바로 학습 가능한 환경을 제공합니다.

멀티 클러스터링 지원

다수의 GPU 클러스터링을 지원하여 대용량의 데이터셋을 신속하고 효율적으로 처리할 수 있습니다.

유동적인 GPU 서버 성능 선택 가능

필요 혹은 사용량에 따라 클라우드 GPU를 추가하는 멀티 클라우드 환경과 물리 서버의 GPU를 분할하여 사용할 수 있습니다.

SDK를 통한 편리한 모델링 및 관리

Python 기반의 SDK를 통해 편리하게 커스텀 학습 프로젝트에 접근하여 모델링 및 관리할 수 있습니다.

편리한 프로그래밍 개발을 위한 SDK 지원

제공되는 Python 기반의 SDK를 활용하여 Jupyter 환경에서 코드 입력으로 편리하게 사용할 수 있으며, 개발이 완료된 인공지능 또한 SDK를 활용하여 DS2.ai의 모든 기능을 사용할 수 있습니다.

Learn more →
    
    from ds2 import DS2
    
ds2 = DS2(apptoken=“s2234k3b4”)
ds2.predict(
    "people.jpg",
    quick_model_name = “person”
    #model_id=20000 # Or You can also use your custmized AI.
)


{
    "images": [
        {
            "id": "60a212aac869a1fea276480d",
            "file_name": "/images/img_labelingExample.jpg",
            "width": 4000,
            "height": 2084
        }
    ],
    "type": "instances",
    "annotations": [
        {
            "segmentation": [
                [
                    1200,
                    907,
                    1200,
                    1882,
                    2903,
                    1882,
                    2903,
                    907
                ]
            ],
            "area": 1660425,
            "iscrowd": 0,
            "ignore": 0,
            "image_id": "60a212aac869a1fea276480d",
            "bbox": [
                1200,
                907,
                1703,
                975
            ],
            "category_id": 2621,
            "id": "60a216ae2cd9eb1bbde44e2b"
        }
    ],
    "categories": [
        {
            "supercategory": "none",
            "id": 2620,
            "name": "person"
        },
        {
            "supercategory": "none",
            "id": 2621,
            "name": "person"
        },
        {
            "supercategory": "none",
            "id": 2622,
            "name": "person"
        }
    ]
}

Magic Code를 활용한 신속한 인공지능 개발

CLICK AI의 기능 중 하나인 Magic Code를 활용하여 인공지능 학습 코드를 자동 생성하고 커스텀 학습의 Jupyter 환경 내에서 바로 학습을 시작하거나, 튜닝을 통해 맞춤형 학습을 시작할 수 있습니다.

Learn more →
!pip install pyyaml==5.1
!pip install torch==1.8.0+cu101 torchvision==0.9.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html

!pip install detectron2 -f https://dl.fbaipublicfiles.com/detectron2/wheels/cu101/torch1.8/index.html

!pip install ds2ai
import detectron2
from detectron2.utils.logger import setup_logger
setup_logger()

import numpy as np
import os, json, cv2, random
from google.colab.patches import cv2_imshow

from detectron2 import model_zoo
from detectron2.engine import DefaultPredictor
from detectron2.config import get_cfg
from detectron2.utils.visualizer import Visualizer
from detectron2.data import MetadataCatalog, DatasetCatalog
import requests
import os
import time
from ds2ai import DS2
import ast
import zipfile
import torch, torchvision
from detectron2.engine import DefaultTrainer
from detectron2.evaluation import COCOEvaluator, inference_on_dataset
from detectron2.data import build_detection_test_loader
from detectron2.data.datasets import register_coco_instances

ds2 = DS2(apptoken="----")
project = ds2.get_project(14883)
model = project.models[0]
file_url = None
if not os.path.exists("./data"):
    if project.filePath:
        file_url = project.filePath
    else:
        label_project = ds2.get_labelproject(project.labelproject)
        async_task = label_project.export(is_get_image=True)
        for i in range(0, 1000):
            time.sleep(10)
            async_task = ds2.get_asynctask(async_task.id)
            if async_task.status == 100:
                file_url = async_task.outputFilePath
                break

    if not file_url:
        raise (Exception("Please upload the training file."))

    file_name = file_url.split("/")[-1]
    response = requests.get(file_url)
    with open(file_name, 'wb') as output:
        output.write(response.content)

    os.makedirs("./data", exist_ok=True)
    os.makedirs("./models", exist_ok=True)

    with zipfile.ZipFile(file_name, 'r') as zf:
        zf.extractall(path="./data")
        zf.close()

print("project.id")
print(project.id)

configFile = f"data/coco.json"
fileRoute = f"data/"


cocoData = None
configFileValid = None

if os.path.exists("data/cocovalid.json"):
    configFileValid = f"data/cocovalid.json"

try:
    register_coco_instances(f"{model.id}", {}, configFile, fileRoute)
    if configFileValid:
       register_coco_instances(f"{model.id}_valid", {}, configFileValid, fileRoute)
except:
    pass


cfg = get_cfg()

cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_X_101_32x8d_FPN_3x.yaml"))
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.7
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_X_101_32x8d_FPN_3x.yaml")
cfg.DATASETS.TRAIN = (f"{model.id}",)
if configFileValid:
    cfg.DATASETS.TEST = (f"{model.id}_valid",)
else:
    cfg.DATASETS.TEST = ()

cfg.DATALOADER.NUM_WORKERS = 1
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.8
cfg.SOLVER.IMS_PER_BATCH = 1
cfg.SOLVER.BASE_LR = 0.02
cfg.SOLVER.MAX_ITER = 300
cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE = 128

if project.yClass:
    cfg.MODEL.ROI_HEADS.NUM_CLASSES = len(ast.literal_eval(project.yClass))
cfg.OUTPUT_DIR = f"./models/"

trainer = DefaultTrainer(cfg)

trainer.resume_or_load(resume=False)
trainer.train()
evaluator = COCOEvaluator(f"{model.id}", ("bbox", "segm"), False, output_dir="./output/")
val_loader = build_detection_test_loader(cfg, f"{model.id}",)
bbox = inference_on_dataset(trainer.model, val_loader, evaluator).get("bbox")
print(bbox)

learn_path = f"./models/model_final.pth"
files = {'uploadedModel': open(learn_path, 'rb')}
values = {'apptoken': '----', 'project': 14883, 'bbox': bbox}  # TODO
r = requests.post('https://api.ds2.ai/predictmodelfromcolab/', files=files, data=values)  # TODO


image_sample_file_path = None
for root, dirs, images in os.walk(f"./data"):
    if '__MACOSX' in root:
        continue
    for image in images:
        if not image.lower().endswith((".jpg", ".jpeg", ".png")):
            continue
        image_sample_file_path = f"{root}/{image}"
        break
    if image_sample_file_path:
        break

im = cv2.imread(image_sample_file_path)
predictor = DefaultPredictor(cfg)
outputs = predictor(im)
v = Visualizer(im[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2)
out = v.draw_instance_predictions(outputs["instances"].to("cpu"))
cv2_imshow(out.get_image()[:, :, ::-1])
print("You can go back to the ds2.ai to check the output details.")

간편하게 학습 서버를 구성하고 커스텀 학습을 시작해보세요.