Category: Python

  • GAN 훈련

    GAN을 이해하기 위해서는 어떻게 훈련 과정이 이루어지는지 알아야 한다.

    • 1단계: 판별기에 실제 데이터를 보여주고, 1.0 이라는 값이어야 한다고 알려준다.
    • 2단계: 판별기에 생성기로부터 만들어진 가짜 데이터를 보여주고 0.0 이어야 한다고 알려준다.
    • 3단계: 판별기에 생성기의 결과를 보여주고, 생성기에 결과가 1.0 이어야 한다고 알려준다.

    참고문헌: GAN 첫걸음. 타리크 라시드 지음

  • [JupyterLab] Log level 변경하기

    꼭 변경할 필요는 없는 부분인데 Jupyter Lab을 실행하면 화면으로 로그가 자꾸 출력이 된다. 터미널로 작업 중에 이런 로그 화면은 상당히 거슬린다. 그래서 빈도를 줄여보고자 한다.

    .jupyter/jupyter_lab_config.py 에서 다음과 같은 부분을 찾는다. 현재로서는 최상단 부분에서 쉽게 찾을 수 있다. Choices 부분에서 왼쪽으로 갈 수록 많은 로그가 출력되고, 오른쪽으로 갈수록 적게 출력된다.

    ## Set the log level by value or name.
    #  Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']
    #  Default: 30
    c.Application.log_level = 'WARN'
  • UUID

    UUID는 범용 고유 식별자이다.

    Python에서는 uuid 로 import 하면 바로 사용할 수 있다. 임의성을 필요로 한다면 uuid.uuid1() 과 uuid.uuid4()를 이용해서 사용할 수 있다. uuid1()의 경우 MAC 주소가 이용되기 때문에 보다 임의성을 부여하기 위하여 uuid4() 사용을 권고 하고 있다. 목적에 따라서 임의성 보다는 익명성(?) 정도만 부여되어도 괜찮다고 한다면 uuid3()이나 uuid5() 등도 이용해 볼 수 있다.

    통상적인 사용 환경에서 중복은 매우매우 드물게 발생한다. 그럼에도 불구하고 찜찜하다면 salt 같은 방법으로 추가 문구를 덧붙여 주는 것을 고려해 보면 될 것이다.

    파일 이름에 이용하기 위해서는 문자열로 변환해서 이용하면 된다.

    import uuid
    str(uuid.uuid4())
  • OpenCV, circle, anti-aliasing

    Python에서 원을 그리는 방법 중 흔하게 사용하는 방법은 OpenCV를 이용하는 것이다. 그렇다면 cv2.circle()를 이용한다. 이것이 편한 방법인데 anti-aliasing 에 대한 고려가 조금 부족해서 이미지가 예쁘게 나오지 않을 때가 있다.

    AA에는 여러 가지 방법이 있다. 이 중에서 가장 쉽게 구현할 수 있는 것은 super-resolution AA 혹은 full scene AA 이다. 간단히 말하면 큰 화면을 만들어서 잘 섞은 후 다시 원래 크기로 돌아오는 것이다. 이 방법은 간단하지만 계산이 많아진다는 단점이 있다고 한다. 작은 이미지를 만들 것이라서 자원은 걱정하지는 않는다.

    큰 이미지를 만들 때 가능하면 특정값보다는 변수로 좌표를 지정하는 것이 그림 파일 수정에 용이하다.

    >>> fig = numpy.zeros((480*4, 480*4, 3), dtype = numpy.uint8)
    ...
    >>> fig = cv2.circle(fig, center, int(size * 0.03), red, -1)
    ...
    >>> fig = cv2.resize(fig, dsize=(480, 480), interpolation=cv2.INTER_AREA)