============= λͺ©ν =============
YOLOv5 λͺ¨λΈμ ν΅ν μ λ° κ°μ²΄ μΈμ
==============================
1. λ°μ΄ν° μ μ€λΉνκΈ°
2. λ°μ΄ν° μ νμ λ³ν
3. λ°μ΄ν° μ μ ν΅ν λͺ¨λΈ νμ΅
4. νλ ¨ κ²°κ³Όλ₯Ό ν΅ν κ°μ²΄ μΈμ κ²μ¦
γ λ°μ΄ν° μ μ€λΉνκΈ° γ
λͺ¨λΈ νμ΅μ μν λ°μ΄ν° μ μ€λΉκ° νμμ μ΄λ€.
YOLOλ₯Ό νμ΅νκΈ° μν λ°μ΄ν° μ ννλ μλμ κ°λ€
'''
νμ΅μ μν μ΄λ―Έμ§ νμΌ
κ° μ΄λ―Έμ§μ 1:1λ‘ λ§€νλλ YOLO νμμ annotaion ν μ€νΈ νμΌ
'''
YOLOv5μ μ΄λ Έν μ΄μ νμμ .txtμ ν μ€νΈνμΌμΌλ‘
ν΄λΉ ν μ€νΈ νμΌλ€μ κ° μ΄λ―Έμ§μ λ§€νλμ΄ μ΄λ―Έμ§μ λ°μ΄λ© λ°μ€μ
λν μ€λͺ μ μν μλ£λ‘ νμ©λλ€.
μλ₯Ό λ€μ΄ μλμ κ°μ μ΄λ―Έμ§μ 1λ1λ‘ λ§€νλλ μ΄λ Έν μ΄μ
νμΌμ κ²½μ° μλμ κ°μ νμμΌλ‘ λͺ μλλ€.
ν μ€λ§λ€ ν κ°μ²΄μ μ 보λ₯Ό λ΄κ³ μμΌλ©°
λ°μ΄λ© λ°μ€μ κ° μ’νλ€μ ν΄λΉ μ΄λ―Έμ§λ₯Ό 0-1λ‘
μ κ·ν μμΌ°μ λμ κ°μ μλ―Ένλ€.
κ° μ€μλ ν΄λμ€(μΈλ±μ€), x, y, w, hμ μ 보λ₯Ό μλ―Ένκ³ μλ€.
0(Person) x1, y1, w1, h1
27(Tie) x2, y2, w2, h2
μ΄μ λ³ΈμΈμ΄ μ΄λ€ κ°μ²΄ μΈμμ μꡬνλλμ λ°λΌμ
κΈ°μ‘΄μ 곡κ°λμ΄ μλ λ°μ΄ν° μ μ νμ©ν΄μ ν΄λΉ λͺ¨λΈμ μ¬μ©ν μλ μκ³ ,
λ³ΈμΈμ΄ μ§μ μ΄λ―Έμ§ νμΌλ€μ μ€λΉνκ³ , λΌλ²¨λ§ νμ¬ λ°μ΄ν° μ μ ꡬμΆνμ¬
YOLO λͺ¨λΈμ μ¬μ©ν μλ μλ€.
1. κΈ°μ‘΄ λ°μ΄ν°μ νμ©
μ¬λ¬ νμ©λλ λ°μ΄ν°μ λ€μ΄ μ‘΄μ¬νμ§λ§
κ·Έ μ€μμ 보νΈμ μΌλ‘ μ¬μ©λλ COCO λ°μ΄ν° μ μ κ²½μ°
곡μ ννμ΄μ§μμ μ§μ λ€μ΄λ‘λ λ°μ μ μλ€.
COCO - Common Objects in Context
cocodataset.org
곡μ ννμ΄μ§μ λ°μ΄ν°μ λ€μ΄λ‘λ νμ΄μ§λ‘ κ°κ² λλ©΄
1λ1 λ§€νλλ μ΄λ―Έμ§μ μ΄λ Έν μ΄μ νμΌλ€μ΄ μμ΅λλ€.
ν΄λ¦ν΄μ λ€μ΄λ‘λ λμ§ μμ κ²½μ° λ§μ°μ€ μ°ν΄λ¦μΌλ‘ λ§ν¬ μ£Όμ 볡μ¬λ₯Ό ν ν
URLμ μ§μ λΆμ¬λ£λ μμΌλ‘ λ€μ΄λ‘λ κ°λ₯ν©λλ€.
2. μ¬μ©μ 컀μ€ν λ°μ΄ν° μ μμ±
μ°μ μ λ κΈ°μ‘΄μ λ°μ΄ν° μ μ νμ©ν΄ λͺ¨λΈμ νλ ¨μν€λ κ²μ΄ μλ
μ§μ μ΄λ―Έμ§λ₯Ό ꡬν΄μ λ°μ΄ν° μ μ μμ±νλ μμ μ ν΄λ³΄μμ΅λλ€.
[ μ΄λ―Έμ§ μμ§ ]
μ°μ μ΄λ―Έμ§λ₯Ό μμ§ν΄μΌ ν©λλ€.
λ¬΄λ£ μ΄λ―Έμ§ μ 곡 μ¬μ΄νΈλ₯Ό μ΄μ©νκ±°λ μ§μ μΌμΌν
λ€μ΄λ‘λ νλ λ°©λ²λ μ‘΄μ¬νμ§λ§,
μ λ μ°μ κ°λ¨ν νμ΄μ¬ Selenium ν¨ν€μ§λ₯Ό μ΄μ©ν μ½λλ₯Ό ν΅ν΄
κ΅¬κΈ ν¬λ‘¬μμ μ΄λ―Έμ§λ₯Ό ν¬λ‘€λ§ ν΄μμ΅λλ€.
γκ΅¬κΈ μ΄λ―Έμ§ ν¬λ‘€λ§γ
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
import time
import urllib.request
searchKey = input('κ²μ ν€μλ μ
λ ₯:')
# νμΌ κ²½λ‘μ ν¬λ‘¬ λλΌμ΄λ²(ν¬λ‘¬ λλΌμ΄λ².exe) νμΌμ΄ μλκ²½μ°
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
# νμΌ κ²½λ‘μ ν¬λ‘¬ λλΌμ΄λ² νμΌμ΄ μλ κ²½μ°
# driver = webdriver.Chrome()
driver.get("https://www.google.co.kr/imghp?hl=ko&tab=wi&authuser=0&ogbl")
elem = driver.find_element("name", "q")
elem.send_keys(searchKey)
elem.send_keys(Keys.RETURN)
SCROLL_PAUSE_TIME = 1
# Get scroll height
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
# Scroll down to bottom
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# Wait to load page
time.sleep(SCROLL_PAUSE_TIME)
# Calculate new scroll height and compare with last scroll height
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(0.5)
imgUrl = driver.find_element(
By.XPATH,
'//*[@id="Sva75c"]/div[2]/div[2]/div[2]/div[2]/c-wiz/div/div/div/div[3]/div[1]/a/img[1]'
).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, f'./images/{searchKey}{str(count)}.jpg')
count = count + 1
except KeyboardInterrupt:
pass
except Exception as e:
print('e : ', e)
pass
driver.close()
ν΄λΉ νμ΄μ¬ μ½λλ₯Ό ν΅ν΄ μ λ° κ΄λ ¨ μ΄λ―Έμ§ 100κ°λ₯Ό ν¬λ‘€λ§νμ΅λλ€.
λ°μ΄ν°μ μ λ§λ€κΈ° μ΄μ μ μ΄λ―Έμ§ μ΄λ Έν μ΄μ μμ μ ν΄μ£Όμ΄μΌ ν©λλ€.
μ΄λ―Έμ§ μ΄λ Έν μ΄μ (Image Annotation)μ΄λ μμ YOLOv5μ μ΄λ Έν μ΄μ νμμ
ν μ€νΈ νμΌμ μν΄ νμ΅ μ΄λ―Έμ§ μ 체μ νκ·Έλ₯Ό μ§μ , λλ λΆλ₯νκ³
λ°μ΄λ© λ°μ€λ₯Ό μ§μ νλ λ±μ νμλ₯Ό μλ―Έν©λλ€.
μ΄λ μ»΄ν¨ν° λΉμ λͺ¨λΈ νλ ¨μ νμμ μΈ μμ μ΄κΈ°λ ν©λλ€.
ν΄λΉ μμ μ CVATμ ν΅ν΄ μννμμ΅λλ€.
νμκ°μ ν λ¬΄λ£ μ΄μ© κ°λ₯νλ©°,
μ λ£ νμμ κ²½μ° AIλ₯Ό ν΅ν μλ λΌλ²¨λ§, μλ³Έ μ΄λ―Έμ§ μ§μ λ±
λ€μν μΆκ° κΈ°λ₯μ μ§μνκ³ μμ΅λλ€.
Computer Vision Annotation Tool
app.cvat.ai
[ μ΄λ―Έμ§ μ΄λ Έν μ΄μ ]
ν΄λΉ νμ΄μ§μμ Create new task λ²νΌμ ν΅ν΄
μλ‘μ΄ μμ μ μμ±, λΌλ²¨λͺ μ μ€μ ν λ€
μ΄λ―Έμ§λ₯Ό νλνλ μλμΌλ‘ μ§μ νμ¬ λ°μ€ λ°μ΄λ© μμ μ μλ£ν΄μ€λλ€.
μλ£ λ μμ μ κ²½μ° ν΄λΉ μμ μ μ°μΈ‘ Actions μμ λ©λ΄λ₯Ό ν΄λ¦νμ¬
Export task datasetλμ μ νν΄μ€λλ€.
μ΄ λ annotation λ³ν νμ μ COCO.json νμμ μ§μνλ
COCO 1.0μ μ΄μ©νμ΅λλ€.
μ¬κΈ°κΉμ§ μννμΌλ©΄ YOLOv5 λ°μ΄ν°μ λ³νμ μν
μ΄λ―Έμ§ μ€λΉκΉμ§ μλ£μ λλ€.
λ€μ μμ μμ λΌλ²¨λ§ λ°μ΄ν°λ₯Ό YOLOv5 νμμΌλ‘ λ³ννκ³
μ΄λ₯Ό ν΅ν΄ λ°μ΄ν° μ μ μ€λΉνκ³ λͺ¨λΈ νλ ¨νλ κ³Όμ κΉμ§ ν΄λ³΄κ² μ΅λλ€.