프로그래밍/Python

[Python] CCPD 예제 동작 확인

채윤아빠 2022. 6. 5. 13:18
728x90
반응형

번호판 인식 관련하여 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

참고자료