속도 비교 2탄

이준우·2024년 3월 13일

전에 이미지 합치기라는 제목으로 속도에 관하여 작성한 내용이 있다.

이번엔 다른 관점으로 접근해 보려고 한다.

속도 비교 1탄에선 python의 내장함수를 이용하여 numpy의 hstack보다 빠르게 동작하는 것을 볼 수 있었다. 하지만 이미지가 크거나 GPU를 사용할 수 있는 환경이라면 numpy 라이브러리를 이용하는 것을 추천한다.

image shape가 (100, 75, 3)를 특정 조건에서 반복시켜야 할 때를 예로 들어보자.

보통 우리가 전처리를 할때 , 조건을 이용해서 어떤 부분을 제거하거나 더하거나 삽입하기도 한다.
다음 코드는 0이 아닌 것들만 뽑아낼 때 사용하는 코드이다.

import time
start = time.time()
list(filter(lambda x : x!=0, train_images[0].reshape(-1)))


end = time.time()

print(f"걸린 시간 : {end-start}")

numpy를 사용해서 좀더 코드를 간단하고 빠르게 동작시키려면 어떻게 해야할까?

import time
start = time.time()
train_images[0][train_images[0] !=0][:10]
end = time.time()

print(f"걸린 시간 : {end-start}")

Image shape가 (100, 75, 3)으로 작은 size인데도 불구하고 대략 2배정도 차이가 나는 것을 확인할 수 있다. Image size가 커진다면 이 차이는 몇배 ~ 몇 십배 이상으로 더 크게 차이가 나는 것을 확인할 수 있을 것이다.

또한, 한개의 이미지 처리만이 아닌 train_image 전체에 대해 수행한다면 얼마나 차이가 날지 실험해 보자.

import time
start = time.time()
x2 = list(filter(lambda x : x!=0, train_images.reshape(-1)))


end = time.time()

print(f"걸린 시간 : {end-start}")

import time
start = time.time()
x1 = train_images[train_images !=0]
end = time.time()

print(f"걸린 시간 : {end-start}")

train_images의 shape는 다음과 같다.

  • (1700, 100, 75, 3)
  • 즉, (100, 75) RGB 이미지가 총 1700장 있는 train_dataset이다.

이 두가지는 엄청난 결과를 보여준다. 똑같은 결과를 보여주지만 측정된 시간을 보면 대략 18배 정도 차이나는 것을 보여준다.

모델링을 하는 것도 중요하지만 같은 결과를 얼마나 빠른 속도로 처리하게 짜는 것도 매우 중요하다.

일반적으로 CPU python 문법 < np array의 vectorize 기능 < GPU에 올라가는 tensor(torch, tensorflow) 순으로 빠르게 작동한다.

또한, numpy와 torch는 매우 비슷한 문법을 사용하기 때문에 좀 더 편리하게 사용할 수 있다.

profile
멋진 인생을 살기 위한 footprint

0개의 댓글