{const s =42, pad =30;const W =12* s + pad *2, H =9* s + pad *2;const c = iouCalc;const svg = d3.create("svg").attr("viewBox",`0 0 ${W}${H}`).attr("width","100%").style("max-width","560px").style("font-family","Pretendard, sans-serif");// gridfor (let i =0; i <=12; i++) svg.append("line").attr("x1", pad + i * s).attr("y1", pad).attr("x2", pad + i * s).attr("y2", pad +9* s).attr("stroke","#eee");for (let j =0; j <=9; j++) svg.append("line").attr("x1", pad).attr("y1", pad + j * s).attr("x2", pad +12* s).attr("y2", pad + j * s).attr("stroke","#eee");const rect = (b, fill, stroke, label) => { svg.append("rect").attr("x", pad + b.x1* s).attr("y", pad + b.y1* s).attr("width", (b.x2- b.x1) * s).attr("height", (b.y2- b.y1) * s).attr("fill", fill).attr("fill-opacity",0.25).attr("stroke", stroke).attr("stroke-width",2.5).attr("rx",3); svg.append("text").attr("x", pad + b.x1* s +8).attr("y", pad + b.y1* s +18).attr("font-size","13").attr("font-weight","700").attr("fill", stroke).text(label); };rect(c.a,"#1F3F7A","#1F3F7A","A");rect(c.b,"#E65100","#E65100","B");// intersectionif (c.inter>0) { svg.append("rect").attr("x", pad + c.ix1* s).attr("y", pad + c.iy1* s).attr("width", c.iw* s).attr("height", c.ih* s).attr("fill","#2E7D32").attr("fill-opacity",0.45).attr("stroke","#2E7D32").attr("stroke-width",1.5); }return svg.node();}
mAP(mean Average Precision)라는 종합 지표도 자주 보게 된다 — 신뢰도 임계값을 바꿔가며 정밀도·재현율을 종합한 점수로, “이 모델의 전반적 탐지 실력” 정도로 읽으면 된다. 계산 절차는 이 수업 범위 밖이다.
11.6 YOLO: 한 번만 본다
11.6.1 아이디어
초기 탐지 모델은 “물체가 있을 만한 후보 영역을 먼저 찾고, 각 영역을 분류”하는 2단계 방식이었다 — 정확하지만 느렸다.
YOLO(You Only Look Once)는 이름 그대로 답했다: 이미지를 그리드로 나누고, 모든 셀이 자기 구역의 박스·클래스·신뢰도를 동시에 예측한다. CNN 순전파 한 번으로 탐지가 끝나므로 실시간 처리가 가능하다 — 공장 라인 위를 지나가는 부품을 검사할 수 있는 속도다.
깊이 계약 확인
YOLO의 내부 구조(앵커, 손실 함수 구성, 버전별 차이)는 이 수업의 범위 밖이다. 여러분에게 필요한 것은 “그리드 기반 동시 예측이라 빠르다”는 개념과, 아래의 파인튜닝 사용법이다. 문제집과 시험은 IoU·NMS·정밀도/재현율 계산까지만 다룬다.
11.6.2 파인튜닝: 이미 배운 원리다
사전학습된 YOLO는 COCO 데이터셋(80개 클래스, 33만 장)으로 학습되어 “물체다움”에 대한 일반적인 감각을 이미 갖고 있다. 여러분이 할 일은 Ch08의 전이학습 그대로다:
사전학습 YOLO를 가져온다 (특성 추출 능력 재사용)
출력을 내 클래스(예: 소화기, 표지판)에 맞게 교체한다
내 데이터 200~300장으로 파인튜닝한다
소량의 데이터로 되는 이유도 Ch08에서 배운 그대로다 — 에지·형태 같은 저수준 특성은 이미 학습되어 있고, 여러분의 데이터는 “내 물체가 어떻게 생겼는지”만 가르치면 된다.
11.7 데이터셋 만들기: 라벨링
11.7.1 라벨이 곧 정답지다
탐지 모델의 학습 데이터는 이미지 + 라벨(박스 좌표와 클래스)의 쌍이다. 여러분이 그린 박스가 모델에게는 정답지이므로, 라벨 품질이 곧 모델 품질이다.
도구: makesense.ai — 브라우저에서 계정 없이 동작하고, 이미지가 서버로 업로드되지 않으며, YOLO 포맷으로 바로 내보낼 수 있다. 절차: 이미지 업로드 → 클래스 정의 → 박스 그리기 → Export (YOLO format).
11.7.2 YOLO 라벨 포맷 — 좌표 정규화
내보낸 라벨 파일의 한 줄은 이렇게 생겼다: 클래스번호 x_c y_c w h — 모두 이미지 크기로 나눈 0~1 값이다.