이때까지 딥러닝을 공부하면서 사용했던 데이터셋들은 Tensorflow에서 제공해주는 CIFAR10만 사용하였습니다.
이번에는 데이터 수집 - 전처리 - 모델링 과정으로 직접 구현해보겠습니다.
GOAL
- 직접 데이터를 크롤링하여 데이터 셋을 만들고 전처리 과정 경험
- 직접 만든 데이터를 가지고 CNN 분류 모델 구현
DATASET
- 먼저 남자와 여자 얼굴 사진으로 데이터 셋을 만들기 위해 크롤링을 했습니다.
- 먼저 구글로 크롤링을 하였고 하기 전에 구글 드라이브를 운영체제에 맞게 다운 받아줘야 합니다.
https://chromedriver.chromium.org/downloads
- 코드는 조코딩님의 코드를 참고하여 필요한 부분을 바꿨습니다.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import urllib.request
driver = webdriver.Chrome()
driver.get("https://www.google.co.kr/imghp?hl=ko&tab=wi&authuser=0&ogbl")
elem = driver.find_element_by_name("q")
elem.send_keys("크롤링할 사진 키워드")
elem.send_keys(Keys.RETURN)
SCROLL_PAUSE_TIME = 1
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(SCROLL_PAUSE_TIME)
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
try:
driver.find_element_by_css_selector(".mye4qd").click()
except:
break
last_height = new_height
images = driver.find_elements_by_css_selector(".rg_i.Q4LuWd")
count = 1
for image in images:
try:
image.click()
time.sleep(2)
imgURL = driver.find_element_by_css_selector(".n3VNCb").get_attribute('src')
opener=urllib.request.build_opener()
opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1941.0 Safari/537.36')]
urllib.request.install_opener(opener)
urllib.request.urlretrieve(imgURL, '크롤링 성공한 사진 저장 위치/image_{}.jpg'.format(str(count)))
count = count + 1
if count == 100:
break
except:
pass
driver.close()
- 결과)
- "한국 남자 연예인 얼굴 사진"을 키워드로 크롤링한 결과입니다.
보시면 얼굴만 크롤링한 것이 아니라 여러 얼굴이 들어간 사진 어깨 아래로 들어간 사진 등 데이터로 쓰기에는 조금 무리가 있어 보입니다. 그래서 저는 얼굴만 크롭 해서 데이터 셋을 만들고자 했습니다.
autocrop의 발견
- 검색 중 얼굴만 크롭 해주는 파이썬 라이브러리를 찾아 적용해 보았는데 나름 만족스러운 결과가 나와 데이터 셋에 사용하기로 하였습니다.
- autocrop -i 크롭 할 사진 폴더 -o 성공한 크롭 사진 폴더 -r 실패한 크롭 사진 폴더 -w 넓이 -H 높이
위의 명령어로 cmd에서 사용하면 빠르고 나름 정확하게 크롭이 되는 것을 확인할 수 있었습니다.
- 하지만 autocrop을 써도 정확하게 분류가 되지 않거나 섞이므로 일일이 확인하여 만들어야 합니다.
이 과정이 생각보다 오래 걸렸습니다.
그 결과 남자와 여자 연예인 얼굴 사진을 각각 1000장 정도로 구성했습니다.
이제 이 사진들을 train과 test로 랜덤으로 구분하여 폴더를 나누는 작업을 해야 합니다.
- 맨날 공부할 때는 준비된 데이터 셋으로 구현하다가 직접 데이터 셋을 만들어 보니 구하기도 어렵고
생각보다 깔끔한 데이터 세트는 나오지 않은 것 같습니다.
- 이제 이 데이터 셋을 train과 test로 구분하고 VGGNet16으로 분류하는 작업을 계속해보겠습니다!
'Project' 카테고리의 다른 글
PyQt5를 이용한 Data Augmentation Tool 구현 - 1 (UI 구현) (0) | 2022.07.05 |
---|---|
남녀 얼굴을 분류하는 딥러닝 모델 구현 - 4 (개선) (2) | 2021.08.25 |
남녀 얼굴을 분류하는 딥러닝 모델 구현 - 3 (개선) (0) | 2021.08.24 |
남녀 얼굴을 분류하는 딥러닝 모델 구현 - 2 (전처리 및 모델링) (9) | 2021.08.23 |
Image to Cartoon Image (OpenCV를 이용해 만화풍 이미지 만들기) (0) | 2021.07.11 |