상세 컨텐츠

본문 제목

PaddleOCR Result값의 변경

데이터 과학

by Taeyoon.Kim.DS 2023. 10. 31. 19:19

본문

pipfile에서 torch와 torchvision의 버전을 변경하고 pipenv lock으로 pipfile.lock을 업데이트 해준 뒤에 docker conatiner를 rebuild해주었다. 그리고 나서 image prediction 전체를 돌려보는데 OCR 의 output값이 변경되어있음을 알 수 있었는데, 이전에는 []같은 빈 리스트형태로 반환되었었다면 이제는 None으로 반환되는 것 같다.

 

그러나 리스트형태에서 특정 item들을 뽑아내는 형태를 가진 것을 보자.

result값에서 item을 하나를 추출하고 그 item값에서 res값을 추출한뒤 거기에 res[1]에 접근한 후에 0번째 인덱스 값을 가지고온다. 그것이 text값일것이고, scores값은 res[1]의 1번쨰 인덱스 값을 가지고 오는 것이다. result의 output 포맷을 생각해보면

result = [[[[text1,0.984],[text2,0.8934]]]]

item = [[[text1, 0.984]],[[textg2,0.8934]]]

res = [[text1,0.984]]

res[1] = [text1, 0.984]

res[1][0] = text1

이딴 형태일 것으로 생각해볼 수 있는데 저 확실한건 result를 print찍어보면 나오게 되는 것이다.

texts = [res[1][0]
        for item in result
        for res in item]
scores = [res[1][1]
        for item in result
        for res in item]

그런데 이전에는 result값이 [] 빈 리스트 값으로 반환되었다고하면 지금은 None값으로 반환되는건지 어떤건지 모르겠다. 결국 다시 print를 찍어봐야 알 수가 있다.

 

일단 이 일이 일어난 배경부터 다시 한번 확인을해보도록 하자.

1. OCR queue를 T3.large에 할당하도록 변경하자.

2. Testing과 Staging에서 T3.large에 할당하도록 변경했다. 
Issue 2-1 : Testing에서 T3.larage에 할당이 안된다.
issue 2-2 : Testing과 Staging에서 AWS Ec2 instance가 install이 안된다. 이전에는 --system값으로 설치를 해주었던 것을 AMI 전체를 통짜로 바꾸려고 하니까 에러가 났다. 
issue 2-3 : Torch일반 버전에서 Torch+cpu 버전으로 다운그레이드를 하고나니까 로컬머신에서 GPU를 사용할 수 없어서매우 비효율적이다. (OCR은 영향을 받는 것 같지가 않다, torch를 사용하지 않는다. GPU관련 인자를 따로 켜줘야한다.)

There are pipenv install --deploy  and --dev flags which sounds like the right approach. (barny)
 
issue 2-4 : Repo 사이즈가 커졌다.
 
지금 내가 해야할 일은 무엇인가 확인해본다면
 
1. OCR output값이 정상인지 확인해서 이 값이 test에 올라가도 되는지 확인하는 것이다. 
if result:
    texts = [res[1][0]
            for item in result if item
            for res in item if res and len(res) > 1 and isinstance(res[1], (list, tuple)) and len(res[1]) > 0]
    scores = [res[1][1]
            for item in result if item
            for res in item if res and len(res) > 1 and isinstance(res[1], (list, tuple)) and len(res[1]) > 1]
else:
    texts = []
    scores = []

현재에는 저렇게 괴랄한 방식으로 되어있는데 GPT가 배출해낸 코드이다. 돌아가긴 하는 것 같지만 이해하지 못한다는 점과 굳이 내가 다시 이해해야한다는 것이 단점이다. 역시 result값을 print 찍어보고 내가 직접 빼든지 포맷값을 제공하고 조금 더 간단한 코드를 받든지 해야한다.

[[[[[158.0, 369.0], [202.0, 368.0], [205.0, 506.0], [161.0, 507.0]], ('T-8000', 0.9957413077354431)], [[[291.0, 372.0], [331.0, 372.0], [329.0, 510.0], [289.0, 510.0]], ('T-8000', 0.9945419430732727)], [[[404.0, 372.0], [447.0, 371.0], [450.0, 516.0], [407.0, 517.0]], ('T-8000', 0.9971504807472229)]]]

[None]
if result == [None]:
    texts = []
    scores = []
else:
    texts = [res[1][0] for item in result for res in item]
    scores = [res[1][1] for item in result for res in item]

관련글 더보기