사전 ImageNet
구현체

ImageNet

gabury1고친 사람 github-actions[bot]

ImageNet 은 사진마다 무엇이 찍혔는지 이름을 붙여 연구자들에게 나눠 주는 공개 사진 모음입니다. 연구자들은 이 사진으로 사진 속 물체를 알아보는 모델을 가르치고 성적을 견줍니다. 모두가 같은 사진으로 채점하니 누구의 방법이 나은지 숫자로 드러납니다. 2012년 이 사진으로 연 대회에서 신경망이 크게 이긴 일이 딥러닝이 널리 퍼진 계기로 꼽힙니다.

쉽고 빠른 이해

무슨 일을 하나 — 사진 수백만 장에 「고양이」·「자동차」 같은 정답 이름을 붙여 공개합니다. 강아지 사진에는 견종 이름까지 붙어 있습니다.

왜 필요한가 — 사진을 알아보는 모델은 정답이 붙은 사진을 아주 많이 봐야 배웁니다. 혼자서 이만큼 모으고 이름을 붙이기는 어렵습니다. 모두가 같은 사진을 쓰면 성적도 같은 잣대로 잴 수 있습니다.

어떻게 쓰나

  1. 정답이 붙은 사진으로 모델을 가르칩니다
  2. 정답을 숨긴 사진을 모델에게 보여 주고 답을 받습니다
  3. 답 다섯 개 안에 정답이 있는지로 채점해 다른 모델과 견줍니다

대가 — 사진의 저작권은 ImageNet 것이 아니라서 연구·교육 목적으로만 받을 수 있습니다. 사람이 붙인 이름이라 틀린 것도 섞여 있습니다.

상세

이 절은 ImageNet 이 무엇으로 이루어졌는지부터 봅니다. 그다음 사람들이 흔히 「ImageNet」이라 부르는 대회용 부분집합과 그 채점 방식을 봅니다. 끝으로 2012년 대회가 남긴 것과 쓰기 전에 걸리는 점을 짚습니다.

머신러닝에서는 사람이 규칙을 적는 대신 예시를 보여 줍니다. 사진 속 물체를 알아보는 일처럼 규칙을 일일이 적기 어려운 일에 쓰는 방식입니다.

예시를 보고 규칙을 스스로 찾은 프로그램을 모델이라 부릅니다. 모델이 예시를 보며 자기를 고쳐 가는 과정은 훈련입니다.

사진을 보여 주고 「이건 고양이」라고 답하게 하는 일이 이미지 분류입니다. 이 일을 가르치려면 사진마다 정답 이름이 붙어 있어야 합니다. 사진 한 장에 붙은 이 정답 이름을 레이블이라고 합니다.

레이블로 고를 수 있는 이름 하나하나는 부류라고 부릅니다. 「고양이」와 「자동차」가 각각 부류 하나입니다. 레이블은 이 부류 가운데 하나를 사진 한 장에 붙인 것입니다.

ImageNet 은 레이블이 붙은 사진을 대량으로 모아 한 묶음으로 내놓은 데이터셋입니다. 누구나 같은 묶음을 받아 쓰니 연구자마다 사진을 따로 모을 필요가 없습니다.

ImageNet 이 나오기 전의 공개 사진 데이터셋은 부류 수도 사진 수도 훨씬 적었습니다. 사진이 적으면 모델이 본 사진만 외우고 새 사진에서는 틀리기 쉽습니다. 이런 실패가 과적합입니다. ImageNet 은 부류와 사진을 한꺼번에 크게 늘려 이 벽을 낮췄습니다.

WordNet 을 따라 짠 부류

ImageNet 의 부류는 WordNet이라는 영어 낱말 사전의 짜임을 그대로 따릅니다. WordNet 은 뜻이 같은 낱말들을 한 묶음으로 모읍니다.

이 묶음이 동의어 집합(synset, synonym set)입니다. ImageNet 에서는 동의어 집합 하나가 부류 하나입니다.

동의어 집합끼리는 「~는 ~의 한 종류다」 관계로 이어집니다. 「골든 리트리버는 개의 한 종류다」, 「개는 포유류의 한 종류다」처럼 이어집니다. 이렇게 이어진 묶음들은 나무 모양이 됩니다. 넓은 뜻이 위에, 좁은 뜻이 아래에 섭니다.

이 나무에서 동의어 집합 하나하나를 마디라고 부릅니다. ImageNet 은 마디마다 그 뜻에 맞는 사진을 매답니다. 마디 하나에 사진을 평균 1,000장쯤 매다는 것이 목표입니다. 아래 그림은 중간 단계를 건너뛰고 몇 마디만 간추린 것입니다.

flowchart TD
    A["동물"] --> B["포유류"]
    B --> C["개"]
    C --> D["골든 리트리버"]
    C --> E["푸들"]
    D --> P["골든 리트리버 사진 묶음"]
    E --> Q["푸들 사진 묶음"]

「골든 리트리버」 마디에는 골든 리트리버 사진들이, 「푸들」 마디에는 푸들 사진들이 달립니다. 그림에는 맨 아래 두 마디의 사진 묶음만 그렸지만 「개」 같은 위쪽 마디에도 사진이 달립니다. 부류가 나무로 이어져 있으니 「골든 리트리버 사진은 개 사진이기도 하다」는 관계가 따라옵니다.

전체 ImageNet 에는 사진 14,197,122장이 부류 21,841개에 나뉘어 들어 있습니다. 사진은 사람이 한 장씩 보고 레이블이 맞는지 확인했습니다.

대회용 부분집합 ILSVRC

전체 ImageNet 은 부류가 2만 개가 넘어 모델끼리 겨루기에는 너무 큽니다. 그래서 부류 1,000개만 골라 대회용 부분집합을 만들었습니다. 이 대회가 ILSVRC(ImageNet Large Scale Visual Recognition Challenge, ImageNet 대규모 시각 인식 챌린지)입니다.

논문과 라이브러리에서 그냥 「ImageNet」이라고 하면 대개 이 1,000 부류 부분집합을 가리킵니다. 전체와 가르려고 ImageNet-1K 라고 부르기도 합니다. 가장 널리 쓰이는 판은 2012년 대회의 데이터입니다.

2012년 판은 사진을 쓰임에 따라 세 몫으로 나눕니다. 모델을 가르치는 몫이 훈련 데이터입니다. 가르치는 도중에 성적을 엿보는 몫은 검증 세트입니다. 마지막에 한 번 채점하는 몫은 테스트 세트입니다.

세 몫을 나눠 두어야 모델이 이미 본 사진으로 채점하는 일을 막을 수 있습니다. 몫마다 사진 수와 레이블 공개 여부는 아래와 같습니다.

몫 사진 수 레이블 공개
훈련 약 120만 장 ✓
검증 5만 장 ✓
테스트 약 10만 장 ✗

표에서 눈여겨볼 곳은 마지막 줄입니다. 테스트 사진은 레이블 없이 나갑니다. 참가자는 모델이 낸 답을 주최 측 채점 서버에 보내고 점수만 돌려받습니다. 정답을 볼 수 없으니 테스트 사진에 맞춰 모델을 몰래 고칠 수도 없습니다.

검증·테스트 사진은 훈련 사진과 겹치지 않게 따로 모았습니다. 훈련 때 본 사진이 채점에 섞이면 점수가 부풀기 때문입니다. 이런 섞임이 데이터 누수입니다.

답 다섯 개 안에 들면 정답

ILSVRC 의 분류 과제는 사진 한 장마다 부류를 다섯 개까지 답하게 합니다. 모델은 자신 있는 순서대로 다섯 개를 냅니다. 다섯 개 안에 정답이 있으면 그 사진의 오차는 0, 없으면 1입니다.

이 오차를 테스트 사진 전부에 대해 평균 낸 값이 점수입니다. 이 점수를 상위 5 오차(top-5 error)라고 부릅니다. 낮을수록 잘 맞힌 것입니다. 첫 번째 답 하나만 보고 매기면 상위 1 오차가 됩니다.

답을 다섯 개나 받는 까닭은 사진 한 장에 물체가 여럿 찍히는 일이 흔해서입니다. 테니스공을 문 골든 리트리버 사진에 레이블은 하나뿐입니다. 모델이 「테니스공」을 먼저 답해도 틀렸다고 하기는 어렵습니다.

아래 코드는 사진 한 장을 채점하는 과정입니다. 정답이 두 번째 답에 있는 경우입니다.

Python
answer  = "golden_retriever"
guesses = ["tennis_ball", "golden_retriever",
           "labrador", "kuvasz", "poodle"]

top1 = guesses[0] == answer   # False
top5 = answer in guesses      # True
error = 0 if top5 else 1      # 0

첫 답이 테니스공이라 상위 1 기준으로는 틀렸습니다. 다섯 개 안에 정답이 있으니 상위 5 기준으로는 오차가 0입니다. 테스트 사진 약 10만 장에서 이 0과 1을 모아 평균 낸 값이 그 모델의 점수가 됩니다.

2012년 대회가 남긴 것

2012년 대회 전까지 상위 팀들은 사람이 직접 설계한 특징을 썼습니다. 특징은 사진에서 뽑아낸 값으로, 모서리나 색의 분포 같은 것입니다. 무엇을 어떻게 뽑을지를 사람이 정해 두고, 모델은 그렇게 뽑은 값만 받아 부류를 골랐습니다.

그해 판을 바꾼 것은 신경망입니다. 신경망은 계산 단계를 여러 겹 쌓은 구조입니다. 그 한 겹을 계층이라고 부릅니다. 앞 계층이 낸 값을 다음 계층이 받아 다시 계산하면서, 쓸모 있는 특징을 사람 대신 스스로 찾아냅니다.

SuperVision 팀은 합성곱 신경망으로 나왔습니다. 합성곱 신경망은 사진을 작은 조각으로 훑으며 특징을 스스로 배우는 신경망입니다.

크리제프스키·수츠케버·힌턴이 만든 이 신경망은 흔히 AlexNet이라고 불립니다. AlexNet 의 상위 5 오차는 15.3%였습니다. 2위 팀의 26.2%와 열 포인트 넘게 벌어졌습니다.

15.3% 는 대회 데이터 밖의 ImageNet 사진도 함께 훈련에 쓴 제출물의 값입니다. 대회 데이터만 쓴 제출물도 16.4%로 2위와 크게 벌어졌습니다.

이 결과 뒤로 이미지 인식 연구의 주류가 사람이 설계한 특징에서 딥러닝으로 옮겨 갔습니다. 딥러닝은 특징을 사람이 정하지 않고 여러 겹 신경망이 스스로 배우게 하는 방식입니다. 이후 대회의 상위권은 계층을 더 깊이 쌓은 합성곱 신경망들이 차지했습니다.

ImageNet 점수는 새 신경망 구조를 내놓을 때 함께 내는 벤치마크 숫자가 됐습니다. 벤치마크는 여러 방법을 같은 조건에서 견주려고 정해 둔 시험입니다.

ImageNet 으로 미리 훈련한 모델

백엔드 개발자가 ImageNet 을 가장 자주 만나는 곳은 모델 라이브러리의 「ImageNet 가중치」라는 말입니다. Keras 에서 모델을 불러올 때 쓰는 weights="imagenet" 인자가 그 예입니다. 가중치는 훈련이 끝난 모델이 기억하는 숫자들입니다. ImageNet 가중치는 ImageNet 으로 훈련을 마친 모델의 숫자라는 뜻입니다.

이렇게 큰 데이터로 먼저 훈련해 두는 일이 사전 훈련입니다. ImageNet 으로 사전 훈련한 합성곱 신경망은 사진에 가까운 앞쪽 계층에서 모서리·질감·모양 같은 일반적인 특징을 배웁니다. 이런 특징은 다른 사진 과제에도 쓸모가 있습니다.

그래서 새 과제를 풀 때 처음부터 훈련하지 않고 ImageNet 가중치에서 출발합니다. 다른 과제에서 배운 것을 이렇게 빌려 오는 일이 전이 학습입니다. 가진 사진이 수천 장뿐이어도 ImageNet 이 가르친 특징을 빌려 쓸 수 있습니다.

출발한 가중치를 새 사진으로 조금 더 다듬는 일은 파인튜닝이라고 부릅니다. 앞쪽 계층이 배운 일반적인 특징은 살리고, 새 과제에 맞게 조금씩만 고칩니다.

빌린 특징은 찍힌 대상이 ImageNet 사진과 비슷할수록 잘 들어맞습니다. ImageNet 은 인터넷에서 모은 일상 사진입니다. 엑스레이나 위성 사진처럼 생김새가 먼 사진에서는 빌린 특징이 덜 들어맞습니다.

쓰기 전에 걸리는 점

ImageNet 은 공개 데이터셋이지만 아무 데나 쓸 수 있는 물건은 아닙니다. 쓰기 전에 걸리는 점이 셋 있습니다.

걸리는 점 무엇이 문제인가
이용 조건 사진의 저작권은 ImageNet 이 갖지 않습니다. 받을 수 있는 목적은 비상업 연구와 교육입니다
레이블 하나 대회용 부분집합은 사진마다 레이블이 하나입니다. 여러 물체가 찍혀도 하나만 정답입니다
사진이 기운 쪽 인터넷에 많이 올라온 대상과 구도가 많이 들어 있습니다. 서비스에 들어오는 사진과 다를 수 있습니다

이용 조건은 사진 자체를 서비스에 싣는 일과 부딪힙니다. 사진의 권리가 원래 찍은 사람들에게 있기 때문입니다. ImageNet 가중치를 쓰는 경우는 사진 이용 조건과 별개로, 그 가중치를 내놓은 쪽의 라이선스를 따로 확인해야 합니다.

레이블은 사람이 확인했어도 틀린 것이 섞여 있습니다. 비슷한 견종이나 헷갈리는 물건에서 특히 그렇습니다. 이런 틀린 정답이 레이블 노이즈입니다.

모은 사진이 어느 쪽으로 기울어 있으면 모델도 그쪽으로 기웁니다. 모은 표본이 이렇게 한쪽으로 쏠린 상태가 표본 편향입니다.

훈련 때와 서비스 때 들어오는 사진의 생김새가 다른 상황은 분포 이동이라고 부릅니다. ImageNet 점수가 높다고 서비스 사진에서도 그만큼 맞힌다는 보장은 없습니다.

관련 항목

ImageNet 이 속하는 상위 분류

데이터셋 · 벤치마크 · 컴퓨터 비전 · 딥러닝 · 머신러닝

ImageNet 을 이루는 구성 요소

WordNet · 동의어 집합 · 레이블 · ILSVRC · 데이터 라벨링

ImageNet 을 나눈 세트와 채점 지표

훈련 데이터 · 검증 세트 · 테스트 세트 · 상위 5 오차 · 정확도 · 평가 지표

ImageNet 으로 겨룬 신경망 구조

합성곱 신경망 · AlexNet · VGGNet · GoogLeNet · ResNet

ImageNet 가중치를 가져다 쓰는 방법

사전 훈련 · 전이 학습 · 파인튜닝 · 가중치 · 특징 추출

ImageNet 으로 겨루는 이미지 인식 과제

이미지 분류 · 객체 탐지 · 객체 위치 추정 · 이미지 분할

ImageNet 의 흠에서 비롯되는 문제

과적합 · 데이터 누수 · 레이블 노이즈 · 표본 편향 · 분포 이동 · 저작권

ImageNet 과 같은 역할을 하는 공개 이미지 데이터셋

MNIST · CIFAR-10 · COCO · Open Images

다른 이름: 이미지넷 · ImageNet dataset · ImageNet-1K