yolo, centerpoint 모델 demo 파일 병합
: 하나의 파일에서 yolo 2D detection과 centerpoint 3D detection이 가능하도록 하였다.
3D cuboid 2D projection 구현
: 3D cuboid의 8개 포인트를 homography를 이용해 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