본문 바로가기

전체 글

(11)
GPU에 남아있는 process 지우기 / kill -9 [process_id] 가 안될 때 /RuntimeError: Address already in use 문제상황 RuntimeError: Address already in use 에러 발생 training 코드를 강제 중단 하는 과정에서 control+c 로 중단하여 process가 정상적으로 종료되지 않은 상황 해결방법 (1차) 일반적으로 nvidia-smi 를 실행하여 하단에 돌고 있는 process id를 보고 kill -9로 프로세스를 강제 종료하면 해결됨 process를 강제 종료하기 위하여 다음과 같이 실행. [PID]에 해당하는 process id 숫자를 넣어서 실행 $ kill -9 [PID] 해결방법 (2차) 필자는 python으로 실행시킨 process를 지우기 위하여 python으로 실행되는 프로세스들을 검색. $ ps aux | grep python 위의 사진에서 두번째 column에..
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed 오류 해결 방법 문제 pretrained 된 모델을 pytorch를 통해 다운받을 때 생기는 오류 필자의 경우, 다운받는 아래와 같이 link가 http 형식으로 작성되어 있어 오류가 발생 model_urls = { 'fbresnet50': 'http://data.lip6.fr/cadene/pretrainedmodels/resnet50-19c8e357.pth', 'fbresnet101': 'http://data.lip6.fr/cadene/pretrainedmodels/resnet101-5d3b4d8f.pth' } 해결방법 (1) 상기 명시된 주소의 http 형식을 https 로 바꾸어서 실행한다. 보통 model configuration을 정의하는 파이썬 파일에 정의되어 있으므로 확인할 것 model_urls = { '..
[에러해결] nll_loss 2d forward kernel: block: [5,0,0], thread: [845,0,0] Assertion `t >= 0 && t < n_classes` failed. ※ Segmentation / classification 시 target (혹은 ground truth) 의 class label이 범위를 넘어선 경우에 발생 1. 필자 같은 경우는 배경(0), 객체(1~20), 경계선(255)으로 labeling 된 segmenatation mask를 nn.CrossEntropy() 에 target으로 넘겨주면서 상기의 에러메세지 발생 2. Pytorch의 CE는 long 타입으로 입력 받는 target에 대하여 one-hot encoding을 수행하고 이를 input에 대하여 softmax 및 cross entropy를 계산함. 3. 자동으로 one-hot encoding 하는 과정에서 연속적인 레이블(0~20)에 대하여 21개의 channel로 원핫 인코딩 가능하였..
RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor) should be the same 입력 또는 모델을 cuda에 올리지 않아서 생기는 현상 1) 문제상황 : img.to(device) 와 target.to(device)까지는 맞으나, 이를 받는 다른 변수를 선언하여 cuda.FloatTensor가 아닌 torch.FloatTensor로 받게 됨 for i, (img, target) in enumerate(train): input, label = img.to(device), target.to(device) optimizer.zero_grad() output = model(input) ... 2) 해결: .to(device)하는 입력과 동일한 변수명으로 받아야 cuda에 올리게 된다. for i, (img, target) in enumerate(train): img, target = img..
VOCSegmentation DataLoader 버그 ※ pytorch 를 활용하여 VOC 2011를 활용하고자 하는 경우, transforms 옵션으로는 정상적인 data transformation이 수행되지 않는다. VOCSegmentation에 data transform을 적용할 수 있는 option은 'transform', 'transform_target', 'transforms'이다. transform은 원본 RGB 이미지에 대한 data transformation을 적용한다. transform_target은 segmentaition label image에 대한 transformation을 적용한다. transforms은 이미지와 레이블에 대해 모두 transformation을 적용한다. 그러나 실제로는 아래와 같이 transforms 옵션을 활용..
차량 네트워크 : CAN, LIN, FlexRay 자율주행 차량은 내부의 각 시스템 간 정보교환을 위해 다양한 방식의 유무선 통신을 활용한다. 이는, 자율주행 차량 내 시스템이 차량의 주변 상황을 인식하기 위한 센서 시스템, 구동을 위한 기본적인 전장 시스템, 엑추에이터, high level 제어기, 주변과의 무선 통신을 위한 OBU 등으로 다양한 시스템이 유기적으로 얽혀있기 때문이다. 각 시스템에 따라 적합한 유무선 통신 방식과 프로토콜이 다르기에 자율주행 차량 내에는 다양한 방식의 유무선 통신이 활용된다. 자율주행 차량에서 활용되는 대표적인 통신 프로토콜은 CAN, LIN, FlexRay, Ethernet 등이 있으며 이 중 차량에서만 사용되는 대표적인 3가지의 통신 프로토콜은 CAN, LIN, FlexRay로 들 수 있다. 각 통신 프로토콜의 특징..
Cruise Control과 Smart Cruise Control Cruise ControlCruise Control(순항제어기)는 차량의 주행 중 속도를 원하는 목표 속도에 맞게 유지하는 기능이다. 크루즈 컨트롤은 바퀴의 회전수로 차의 속도를 파악하고 해당 값을 피드백 제어기에 입력함으로써 현재 차량의 속도와 목표 속도 간의 오차를 통해 시스템을 구성할 수 있다. 구체적으로, 사용자가 지정한 지정 속도를 입력하면, 차량 내의 시스템에서 현재 차량의 속도를 바퀴의 회전수로 파악할 수 있다. 이를 제어기에서 현재 속도와 사용자의 입력 간의 차이를 계산하고 해당 오차를 줄이는 방향으로 제어 명령을 보내게 된다. 이때, 크루즈 컨트롤은 브레이크 제어 없이 전자식 액셀레이터, 페달 제어, 쓰로틀, 연료량, 기어 변속 등으로 속도를 제어함으로써 오차를 줄여나간다.  Cruise..
A*알고리즘과 RRT, RRT* 알고리즘 A* 알고리즘 A* 알고리즘은 경로가 그려질 수 있는 공간에 대하여 2D Grid를 그리고 해당 그리드 맵 상에서 최단 경로를 탐색 및 결정하는 알고리즘이다. 2차원 그리드를 그림으로써 현재 위치로부터 8방향에 대하여 각각 Cost를 계산한다. Cost 값을 기준으로 목표지점까지의 최적 경로를 찾을 수 있다. 이때, 그리드는 장애물 유무에 따라 0 또는 1로 채워지며, 1이면 장애물이 있어 진행하지 못하는 그리드, 0이면 그리드가 비어 있어 진행이 가능한 그리드임을 의미한다. 각 그리드에 채워진 0 또는 1 값으로 Cost를 계산할 수 있다. 또한 주변 8방향에 대하여 Cost를 계산하고 최단거리를 탐색하는 기법은 트리구조를 활용하여 구현할 수 있다. 이러한 A 알고리즘은 그리드의 크기를 어떻게 설정하느..