데브코스 자율주행 최종 프로젝트 - 17주차 화요일 TIL

YUNJI·2024년 2월 6일
0

오늘 한 일

  • yolo, centerpoint 모델 demo 파일 병합
    : 하나의 파일에서 yolo 2D detection과 centerpoint 3D detection이 가능하도록 하였다.

  • 3D cuboid 2D projection 구현
    : 3D cuboid의 8개 포인트를 homography를 이용해 2D projection 하였다.
    : 아직은 좀 수정할 부분이 있어보인다.

Centerpoint 3D cuboid 2D projection 결과

yolo 2D detection 결과와 Centerpoint 3D cuboid 2D projection 결과를 병합

새롭게 알게 된 점

  • Linux 파일 링크

    • 하드 링크

      			ln <원본 주소> <링크할 주소>

      : 하드 링크의 특징은 하드 링크된 어떤 파일에서 변경하든 연결된 모든 파일이 바뀐다는 점이다.
      : 또한, 원본을 지워도 링크된 파일은 살아있다.

    • 복사 (copy, cp 명령어)
      : 하드 링크와 복사 명령어가 다른 점은 복사된 파일을 바꿔도 원본에 영향이 없다는 것이다.

    • 소프트링크 / 심볼릭 링크

      			ln -s <원본 주소> <링크할 주소>

      : "바로가기 링크"와 같은 개념이다.
      : 하드 링크와 비슷하지만, 원본을 지우면 역할을 할 수 없게 되는 점이 다르다.

  • with torch.no_grad()
    : with torch.no_grad() 함수는 autograd engine을 끄는 역할을 한다.
    : gradient를 계산하고 추적하는 부분을 비활성화시켜 inference에서 불필요한 메모리 소모를 줄이고 연산 속도를 빠르게 하는 것이다.

  • model.eval()
    : with torch.no_grad()를 찾다가 알게 된 부분인데, 얼핏 보면 두 함수가 비슷한 작용을 해 많이 헷갈리는 것 같다.
    : model.eval() 함수는 train에서 필요한 dropout이나 batch_norm layer를 비활성화시켜 evaluation mode에 들어가도록 한다.

  • increment_path()
    : 파일을 저장할 때, 같은 이름의 파일이 있으면 파일명 뒤에 숫자를 자동으로 +1 해주며 저장해주는 함수이다. (exp1, exp2, exp3...)
    : 특정 라이브러리에 포함된 함수는 아니지만, 아래와 같이 함수를 정의해 사용할 수 있다.
    : 주로 python 내에 포함된 pathlib의 Path 라이브러리와 함께 쓰인다.

from pathlib import Path
import glob
import re

def increment_path(path, exist_ok=True, sep=''):
    # Increment path, i.e. runs/exp --> runs/exp{sep}0, runs/exp{sep}1 etc.
    path = Path(path)  # os-agnostic
    if (path.exists() and exist_ok) or (not path.exists()):
        return str(path)
    else:
        dirs = glob.glob(f"{path}{sep}*")  # similar paths
        matches = [re.search(rf"%s{sep}(\d+)" % path.stem, d) for d in dirs]
        i = [int(m.groups()[0]) for m in matches if m]  # indices
        n = max(i) + 1 if i else 2  # increment number
        return f"{path}{sep}{n}"  # update path

[참고 사이트] https://6kkki.tistory.com/10

0개의 댓글

관련 채용 정보