인프런 커뮤니티 질문&답변

wjdgusdldi3080님의 프로필 이미지

작성한 질문수

[개정판] 딥러닝 컴퓨터 비전 완벽 가이드

Selective Search 실습 및 시각화

selectivesearch()의 size에 대해 질문 있습니다.

23.08.29 17:47 작성

·

302

0

교수님 안녕하세요. 양질의 수업을 제공해주신 덕분에 열심히 공부를 하고 있습니다.

다름이 아니라 selectivesearch() 함수의 반환 값 중 하나인 size와 selectivesearch() 함수의 파라미터 min_size의 차이점에 대해 여쭙고 싶습니다.

제가 이해한 바로는 size는 bounding box 내에 존재하는 object들의 크기이며, min_size는 region proposal 시에 영역 내의 object의 최소값이라는 것입니다.

따라서 a. 후보 bounding box들 중에서 object의 크기가 10000이 넘는 것들을 골라내는 방식b. 애초에 object의 크기가 10000이 넘는 bounding box만을 후보로 하는 방식의 결과값이 동일할 것이라고 생각했고, 아래의 두 코드의 결과값이 동일하게 나올 것이라고 판단했습니다.

  • a 방식

    _, regions = selectivesearch.selective_search(img_rgb, scale=100, min_size=2000)
    cand_rects = [cand['rect'] for cand in regions if cand['size'] > 100000]
    
    red_rgb = (255, 0, 0)
    img_rgb_copy = img_rgb.copy()
    for rect in cand_rects:
        
        left = rect[0]
        top = rect[1]
        right = left + rect[2]
        bottom = top + rect[3]
        
        img_rgb_copy = cv2.rectangle(img_rgb_copy, (left, top), (right, bottom), color=red_rgb, thickness=2)
    
    plt.figure(figsize=(7, 7))
    plt.imshow(img_rgb_copy)
    plt.show()
  • b 방식

    _, regions = selectivesearch.selective_search(img_rgb, scale=100, min_size=10000)
    cand_rects = [cand['rect'] for cand in regions]
    
    red_rgb = (255, 0, 0)
    img_rgb_copy = img_rgb.copy()
    for rect in cand_rects:
        
        left = rect[0]
        top = rect[1]
        right = left + rect[2]
        bottom = top + rect[3]
        
        img_rgb_copy = cv2.rectangle(img_rgb_copy, (left, top), (right, bottom), color=red_rgb, thickness=2)
    
    plt.figure(figsize=(7, 7))
    plt.imshow(img_rgb_copy)
    plt.show()

 

그러나 결과는 다음과 같이 서로 다른 결과 값을 보였습니다.

  • a 방식

  • b 방식

제가 어떤 부분을 잘못 이해한건지, 혹은 어떠한 부분을 놓친건지 여쭙고 싶습니다. 감사합니다 :)

답변 1

0

권 철민님의 프로필 이미지
권 철민
지식공유자

2023. 08. 29. 23:31

안녕하십니까,

잘 듣고 계시다니, 저도 기분이 좋군요.

a, b 두 방식은 서로 다릅니다.

min_size=2000 이 되면 object size가 2000 이상인 것을 추출하게 되는데, 이 경우 min_size가 10000 인 것 보다 상대적으로 많은 오브젝트를 추출하게 됩니다. 그리고 이렇게 추출된 object 들을 기반으로 다시 object들을 병합하는 과정을 거치면서 좀 더 큰 오브젝트를 detect하게 됩니다. 그러니까, min_size가 작으면 보다 많은 오브젝트를을 baseline으로 detect한 뒤에 이들 오브젝트들을 질감/색상등의 유사성으로 합쳐 나가면서 selective search 결과를 만들어 나가는 것입니다.

min_size가 10000이 되면 기본 baseline으로 시작하는 object가 많지 않습니다. 따라서 이들을 합쳐 나가면서 만들어 내는 오브젝트도 상대적으로 적기 때문에 두 방식이 서로 차이가 나게 됩니다.

감사합니다.