Post

딥러닝 프로젝트 구조 끄적이기

머신러닝 실험, 개발 등 다양한 작업을 하는데 딥러닝 프로젝트의 구조의 baseline의 필요성이 느껴졌다. (맨날 새로 프로젝트를 열면 구성이 일관되게 하기 위함)

크게 src, data, docs, configs 를 작성하는게 중요하지 않을까 생각한다.

다양한 구조를 잡는 방법이 있지만 아래 구조를 따라가도록 하며 계속 수정을 해야겠다.

Github : Here


/configs

  • model configs
    • Choose the format
    • .json
    • .ini
    • .yaml
    • .py

다양한 설정파일이 존재하지만 .json, .ini, .yaml, .py 포멧을 많이 사용한다.

TODO

  • 예제 파일 만들기
  • 각 format에 대한 설명

/data

  • your datasets
    • train
      • class 1
      • class 2
      • etc.
    • valid
      • class 1
      • class 2
      • etc.
    • test
      • class 1
      • class 2
      • etc.

데이터셋을 구성하다보면 데이터 구조가 어지럽고 복잡한게 많다. 최대한 위에 구조를 따르면 좋을 것 같다.

TODO

  • 데이터의 종류마다 예제 구조 만들기

/docs

  • project documents
    • install
    • how to run?
    • api structure

Documents는 실제로 사용해본적이 거의 없지만 큰 프로젝트들은 대략적으로 위에 형식을 가진다.

/images

  • save sample image
    • dataloader output image (+ transforms)
    • sample image for test
    • result

실제 개발 및 실험을 하다보면 sample을 확인해야하는 경우가 있다.

  • 실제 개발된 제품에서 사용될 샘플
  • 데이터 로더가 잘동작하는가?
  • 모델의 출력이 정상적인가?

/checkpoints

  • your trained model

  • 훈련된 모델은 각자의 이름 규칙을 가지고 저장하자.

/notebooks

  • data processing notebook
  • tutorial notebook

/scripts

  • train scripts
  • test scripts
  • run scripts

/test

For unittest

  • dataset
  • dataloader
  • model
  • train
  • valid
  • test

/src

  • /data
    • dataloader
    • data utils
  • /model
    • model architecture
    • model utils
  • /visualization
    • visualization tools
  • loss.py and /loss
    • define custom loss
  • optim.py and /optim
    • define custom optimizer
  • scheduler.py and /scheduler
    • define custom scheduler
  • transforms.py and /transforms
    • define custom data augmentation

setup.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import setuptools
# python setup.py develop
setuptools.setup(
    name            = "[NAME]", # Replace with your own username
    version         = "0.0.1",
    author          = "Jaemin Jeong",
    author_email    = "woalsdl600@gmail.com",
    description     = "[description]",
    url             = "[Github repository url]",
    project_urls    = {"Bug Tracker": "[Github repository url]/issues",
    },
    classifiers     = [
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    python_requires = ">=3.6",
)
This post is licensed under CC BY 4.0 by the author.