번호판 인식 관련하여 https://github.com/detectRecog/CCPD 예제가 있어서 윈도우 CUDA 환경에서 동작시키기 위한 시행착오를 정리해 둡니다.
PyTorch 이전버전 패키지 설치
CCPD 예제가 만들어질 당시에는 pytorch-0.3.1 cuda80 기반으로 작성된듯 싶은데, 지금은 엄청나게 업그레이드가 되어서 CCPD 예제를 현재 패키지 버전에서 그대로 실행할 수가 없었습니다.
torch-1.11 버전에서는 소스 호환성 문제로 동작이 안되기 때문에 pytorch로 다운그레이드 후에 예제가 정상적으로 동작했습니다.
문제는 pytorch-0.3.1 cuda80를 더 이상 지원하지 않아, pip 등으로 설치할 수가 없었습니다.
PyTorch 최신버전 설치 : https://pytorch.org/get-started/locally/
PyTorch 이전버전 설치 : https://pytorch.org/get-started/previous-versions/
PyTorch 이전버전 설치 페이지에서 CUDA 9.0을 지원하는 "torch-0.4.1-cp37-cp37m-win_amd64.whl" 패키지를 찾을 수 있었습니다. (https://download.pytorch.org/whl/cu90/torch_stable.html)
다음과 같이 최신 PyTorch를 제거하고, 해당 패키지를 다운로드 받아서 직접 설치하였습니다.
$ pip uninstall torch
$ wget https://download.pytorch.org/whl/cu90/torch-0.4.1-cp37-cp37m-win_amd64.whl
$ pip install torch-0.4.1-cp37-cp37m-win_amd64.whl
예제 소스 수정
CCPD 데모를 실행하기 위하여 추가적으로 "opencv-python", "numpy", "imutils" 패키지들을 설치합니다.
$ pip install opencv-python, numpy, imutils
데이터 로더에서 다음과 같은 오류가 발생할 수 있습니다.
RuntimeError: DataLoader worker (pid(s) ) exited unexpectedly
"demo.py" 소스의 266 줄을 다음과 같이 수정해 주었습니다.
dst = demoTestDataLoader(args["input"].split(','), imgSize)
# trainloader = DataLoader(dst, batch_size=1, shuffle=True, num_workers=1)
trainloader = DataLoader(dst, batch_size=1, shuffle=True, num_workers=0) # num_workers=1 값을 0으로 수정
파라미터 없이 실행하면 정상적으로 잘 실행이 되지만, 모델과 데모를 위한 이미지들이 있는 경로를 지정하면 다음과 같은 오류가 발생하였습니다.
True
Traceback (most recent call last):
File "d:\Dev\Python\github\CCPD\rpnet\demo.py", line 277, in
fps_pred, y_pred = model_conv(x)
...
return AdaptiveMaxPool2d(size[0], size[1])(input)
File "d:\Dev\Python\github\CCPD\rpnet\roi_pooling.py", line 18, in forward
self._backend = type2backend[type(input)]
File "d:\Dev\venv\ccpd\lib\site-packages\torch\_thnn\__init__.py", line 15, in __getitem__
return self.backends[name].load()
KeyError: <class 'torch.Tensor'>
위 오류는 PyTorch 0.3.x -> PyTorch 0.4.x 패키지로 업데이트되면서 변경된 것으로 보입니다.
"roi_pooling.py" 소스의 18줄을 다음과 같이 수정하였습니다.
self.indices = indices
# self._backend = type2backend[type(input)]
self._backend = type2backend[input.type()]
이후 데모 코드가 정상적으로 실행되어 다음과 같이 번호판 인식이 정상적으로 동작하는 것을 확인할 수 있었습니다.
!AMK620.jpg" />
CCPD 데모 소스가 동작하는 패키지 목록은 다음과 같습니다.
imutils==0.5.4
numpy==1.21.6
opencv-python==4.6.0.66
torch @ file:///C:/Users/BCN-TABLE/downloads/torch-0.4.1-cp37-cp37m-win_amd64.whl
참고자료
- "RuntimeError: DataLoader worker (pid(s) ) exited unexpectedly":https://jihyunlee.tistory.com/entry/RuntimeError-DataLoader-worker-pids-exited-unexpectedly
- "KeyError: <class ‘torch.Tensor’>":https://discuss.pytorch.org/t/keyerror-class-torch-tensor/22560
'프로그래밍 > Python' 카테고리의 다른 글
[Python] 파일 복사(copy) (0) | 2022.07.04 |
---|---|
[Python] 프로세스간 데이터 공유 : Array (0) | 2022.06.16 |
[Python] Windows 10에 OpenVino 개발환경 만들기 (0) | 2022.06.03 |
[Python] struct와 numpy의 bytes 만드는 성능 비교 (0) | 2022.06.01 |
[Python] 객체의 속성 관련 정리 (0) | 2022.05.28 |