PPE 미착용 감지: Construction-PPE로 Ultralytics YOLO 학습하기
Construction-PPE가 헬멧, 조끼, 장갑이 없는 경우를 어떻게 라벨링하는지 확인한 다음, Ultralytics YOLO를 학습시켜 현장 카메라에서 PPE 미착용을 감지하세요.
Paula Derrenger11 분 읽기
PPE 미착용을 안정적으로 감지하려면 카메라에 보이는 부분만 라벨링하세요. 새 Ultralytics Construction-PPE 데이터셋에서는 강철 빔 뒤에 가려진 머리를 헬멧 미착용으로 간주하지 않습니다. 실제로 보이며 헬멧을 쓰지 않은 머리에만 no_helmet 박스를 지정하고, 가려져 있거나 프레임 밖에 있는 머리에는 장비 미착용 라벨을 지정하지 않습니다.
2026년 11월 3일, Ultralytics 8.4.200을 통해 이 데이터셋을 공개했습니다. 이미지 1,000개, 클래스 12개, 사람, 지게차, 보호 장비 및 눈에 보이는 장비 미착용 사례를 포함한 검토 완료 바운딩 박스 14,863개로 구성되며, 이미지와 어노테이션은 CC BY 4.0 라이선스가 적용됩니다. 클래스에는 전용 no_vest과 forklift가 포함되며, 어노테이션은 Ultralytics 팀이 검토했습니다. 이 가이드에서는 데이터셋의 구성, PPE 미착용 라벨링 규칙, 그리고 데이터셋을 사용해 Ultralytics YOLO26 모델을 학습, 검증 및 배포하는 방법을 다룹니다.
Construction-PPE는 12개 클래스로 구성된 검토 완료 PPE 감지 데이터셋입니다.#
Construction-PPE는 건설 및 산업 현장을 위한 독창적인 객체 감지 데이터셋으로, Ultralytics 팀이 2026년 11월에 제작하여 오픈소스로 공개했습니다. 이미지에는 건설 현장, 작업장, 창고, 하역 구역 및 유지보수 작업이 담겨 있으며, 다양한 시점, 조명, 작업자 배치와 지게차 활동을 포함합니다. 이 데이터셋은 보호 장비의 모습과 보호 장비가 눈에 보이게 없는 상태를 모두 감지기가 학습할 수 있도록 제작되었습니다.
학습을 시작하기 전에 알아야 할 주요 정보는 Construction-PPE 데이터셋 문서에서 확인할 수 있습니다.
- 규모: 이미지 1,000개, 클래스 12개에 걸쳐 바운딩 박스 14,863개
- 분할: 학습/검증용으로 고정된 800/200 분할을 사용하며, 별도의 테스트 분할은 없습니다.
- 형식: Ultralytics YOLO 형식의 바운딩 박스로, 변환 없이 바로 학습에 사용할 수 있습니다.
- 이미지: 사람이 수집하고 생성한 이미지로, 다양한 해상도의 가로형, 세로형 및 정사각형 구성을 포함합니다.
- 어노테이션: 전문가의 수동 어노테이션과 AI 자동 어노테이션을 결합했으며, 2026년 11월 Ultralytics 팀이 완료했습니다.
- 라이선스: 이미지와 어노테이션에는 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스가 적용되며, 저작자 표시를 하면 상업적으로 사용할 수 있습니다.
생성된 이미지는 실제 사건을 촬영한 사진이 아니므로, 이 데이터셋으로 학습한 모델의 최종 테스트는 자체 카메라 영상으로 수행해야 합니다.
Ultralytics Platform에서 모든 이미지와 어노테이션을 살펴보고, 데이터셋을 작업 공간에 복제하거나 데이터셋에서 바로 학습할 수 있습니다.

모든 PPE 클래스에는 장비 미착용 클래스가 하나씩 대응합니다.#
12개 클래스는 장비 클래스 5개, 장비 미착용 클래스 5개, 현장을 이동하는 사람과 차량을 위한 클래스 2개로 구성됩니다. 아래 ID는 어노테이션 및 construction-ppe.yaml의 ID와 일치합니다.
| ID | 클래스 | 박스 지정 대상 |
|---|---|---|
| 0 | helmet | 보호 헬멧 또는 안전모 |
| 1 | gloves | 작업용 장갑 |
| 2 | vest | 고시인성 안전 조끼, 재킷 또는 셔츠 |
| 3 | boots | 보호용 작업 부츠 또는 작업화 |
| 4 | goggles | 보호 안경 |
| 5 | Person | 사람 |
| 6 | no_helmet | 헬멧을 쓰지 않은 채 보이는 머리 |
| 7 | no_goggle | 보호 안경을 착용하지 않은 채 보이는 눈 주변 |
| 8 | no_gloves | 장갑을 착용하지 않은 채 보이는 손 |
| 9 | no_boots | 보호용 작업화를 착용하지 않은 채 보이는 발 또는 신발 |
| 10 | forklift | 지게차 |
| 11 | no_vest | 고시인성 안전복을 착용하지 않은 채 보이는 몸통 |
각 장비 클래스에는 이에 대응하는 "미착용" 클래스가 있습니다. 이러한 짝을 통해 모델은 장비가 없는 모습에 대한 직접적인 예시를 학습하므로, 맨머리나 조끼를 입지 않은 몸통을 별도의 감지 대상으로 표시할 수 있습니다. 따라서 코드에서 박스가 없다는 점을 바탕으로 미착용 여부를 추론할 필요가 없습니다.

PPE 미착용 라벨은 추정이 아니라 보이는 신체 부위를 표시합니다.#
장비 미착용 클래스는 정확하게 정의해야 합니다. 빔에 가려지거나 프레임 가장자리에서 잘린 머리를 포함해 헬멧 착용 여부를 확인할 수 없는 모든 머리에 박스를 지정한다면, 모델은 가려진 상태 자체가 위반을 의미한다고 학습하게 됩니다.
Construction-PPE는 모든 미착용 클래스에 동일한 규칙을 적용합니다. 장비 미착용 박스는 장비가 있어야 하는 위치의 보이는 신체 부위를 표시하며, 신체 부위가 가려져 있거나 프레임 밖에 있다는 사실만으로는 장비 미착용을 판단하지 않습니다. 구체적으로는 다음과 같습니다.
- 헬멧을 쓰지 않은 채 보이는 머리에
no_helmet박스를 지정합니다. - 공구 상자 뒤에 숨겨진 손이 아니라, 장갑을 착용하지 않은 채 보이는 손에
no_gloves박스를 지정합니다. - 고시인성 의류를 착용하지 않은 채 보이는 몸통에
no_vest박스를 지정합니다. - 보호용 작업화가 아닌 신발이나 발이 보이면 해당 부위에
no_boots박스를 지정합니다. - 보호 안경을 착용하지 않은 채 보이는 눈 주변에
no_goggle박스를 지정합니다. - 장비 클래스는 눈에 보이는 장비 자체에 박스를 지정하므로, 조끼 하나와 조끼를 입은 사람 하나에 각각 별도의 박스가 지정됩니다.

왼쪽 작업자는 들고 있는 합판에 머리가 가려져 있으므로, 라벨에는 헬멧 착용 여부에 관한 정보가 없습니다. 오른쪽 작업자는 맨머리와 고시인성 의류를 입지 않은 몸통이 보이므로 두 부위 모두 장비 미착용 박스가 지정됩니다.
이는 이 데이터셋을 넘어 데이터 라벨링에서도 중요합니다. Construction-PPE를 자체 카메라 이미지로 확장할 경우 동일한 규칙으로 라벨링해야 합니다. 그렇지 않으면 모델이 같은 질문에 대해 서로 상충하는 답을 받게 됩니다. Ultralytics Academy의 어노테이션 모범 사례 강의에서는 이런 규칙을 라벨링 가이드에 작성하는 방법과 사람 참여 검토를 통해 자동화가 놓치는 사례를 찾아내는 이유를 설명합니다.
지게차와 no_vest 클래스로 차량 구역도 동일한 모델에서 처리할 수 있습니다.#
많은 현장 안전 규칙은 장비 미착용뿐 아니라 사람과 차량이 같은 공간을 공유하는 상황도 다룹니다. forklift 클래스는 차량과 작업자를 동일한 감지기에 포함하므로, YOLO26 모델 하나로 지게차, 주변 사람, 고시인성 의류를 입지 않은 채 보이는 몸통을 한 번에 감지할 수 있습니다.
전용 no_vest 클래스를 사용하면 Construction-PPE로 학습한 모델이 하역장에서 forklift, Person 및 no_vest 박스를 한 번에 반환할 수 있습니다.

이 박스들을 하나의 이벤트로 연결하는 작업은 애플리케이션 로직에 해당합니다. 각 no_vest 박스를 올바른 사람과 연결하고, 지게차와 "가까운" 상태를 어떻게 정의할지 결정하며, 조건이 얼마나 오래 지속되어야 하는지 설정해야 합니다. 근접도를 측정하려면 거리 계산 가이드에서 선택한 박스 중심점 사이의 픽셀 거리를 계산할 수 있습니다. 실제 거리를 구하려면 카메라 보정이 필요합니다.
몇 줄의 코드로 Construction-PPE에서 YOLO26 학습하기#
Ultralytics Python 패키지부터 시작하세요. YOLO는 처음 사용할 때 데이터셋 아카이브를 다운로드하고 압축을 해제합니다.
from ultralytics import YOLO
# COCO로 사전 학습된 YOLO26 nano 모델에서 시작합니다.
model = YOLO("yolo26n.pt")
# Construction-PPE 아카이브로 학습합니다.
model.train(
data="https://github.com/ultralytics/assets/releases/download/v0.0.0/construction-ppe.zip",
epochs=100,
imgsz=640,
)CLI에서는 다음 한 줄로 동일한 작업을 수행할 수 있습니다.
yolo detect train model=yolo26n.pt data=https://github.com/ultralytics/assets/releases/download/v0.0.0/construction-ppe.zip epochs=100 imgsz=640YOLO26n 모델은 파이프라인을 확인하기 위한 첫 실행에 적합합니다. 현장 카메라 거리에서는 장갑, 고글 및 부츠가 작은 객체이므로, 학습을 확정하기 전에 YOLO26s 또는 YOLO26m과 같은 더 큰 모델 크기도 비교해 보세요. 학습 문서에서는 이미지 크기, 배치 크기 및 기타 모든 인수를 다룹니다. 브라우저에서 무료 GPU를 사용하고 싶다면 Ultralytics가 제공하는 Construction-PPE용 Colab 노트북을 사용할 수도 있습니다.
코드를 사용하지 않으시나요? Ultralytics Platform에서 학습하세요.#
Ultralytics Platform에서 Construction-PPE 데이터셋을 열고 YOLO26 모델로 클라우드 학습을 시작한 다음, 브라우저에서 에포크, 이미지 크기 및 GPU를 선택하세요. Platform은 손실 곡선, 에포크별 정밀도, 재현율 및 mAP를 추적하고 여러 실행 결과를 나란히 비교할 수 있게 합니다. 자체 카메라 이미지를 추가하려면 Explore에서 데이터셋을 복제하고(Ultralytics Platform Explore 가이드 참조), 이미지를 업로드한 다음 어노테이션 편집기에서 라벨링하세요. 편집기에서 Smart Annotation이 검토용 박스 초안을 생성할 수 있습니다.
전체 평균이 아니라 클래스별로 모델을 평가하세요.#
하나의 mAP 수치만으로는 안전팀이 알아야 할 사항을 파악하기 어렵습니다. 사람, 헬멧 및 조끼는 안정적으로 감지하면서도 no_gloves 또는 no_goggle 사례 대부분을 놓치는 모델도 전체 점수는 높게 나올 수 있습니다. 클래스별 지표로 검증하세요.
from ultralytics import YOLO
model = YOLO("runs/detect/train/weights/best.pt")
metrics = model.val() # uses the dataset's 200-image validation split
print(f"mAP50: {metrics.box.map50:.3f} mAP50-95: {metrics.box.map:.3f}")
for c in metrics.box.ap_class_index:
print(f"{model.names[c]:>10} mAP50-95: {metrics.box.maps[c]:.3f}")먼저 장비 미착용 행을 확인하고, 검증 과정에서 저장된 혼동 행렬을 여세요. helmet과 no_helmet를 혼동하거나 미착용 클래스가 거의 감지되지 않는다면, 놓친 이미지를 살펴보고 다른 사항을 변경하기 전에 학습 분할에 해당 클래스의 인스턴스가 몇 개 포함되어 있는지 확인하세요. YOLO 성능 지표 가이드에서 각 차트를 읽는 방법을 설명합니다.
검증 이미지 200개는 학습 세트와 동일한 데이터 수집본에서 가져온 것입니다. 배포 전에 실제 운영할 카메라로 별도의 데이터 세트를 수집하고 그 데이터 세트로도 검증하여 현장 성능을 측정하세요.
PPE 미착용 감지를 검토 가능한 이벤트로 전환하세요.#
장비 미착용이 별도의 클래스이므로, 첫 검토 규칙은 간단하게 설정할 수 있습니다. 신뢰도 임계값을 넘는 PPE 미착용 박스가 있는 프레임에 표시를 추가하면 됩니다.
from ultralytics import YOLO
MISSING = {"no_helmet", "no_goggle", "no_gloves", "no_boots", "no_vest"}
model = YOLO("runs/detect/train/weights/best.pt")
for r in model.predict("site_camera_frame.jpg", conf=0.4):
for cls, conf in zip(r.boxes.cls.int().tolist(), r.boxes.conf.tolist()):
if r.names[cls] in MISSING:
print(f"Review: {r.names[cls]} ({conf:.2f})")동영상에서는 predict을 track로 바꾸세요. 객체 추적은 프레임에 걸쳐 감지 결과에 ID를 할당합니다. 그런 다음 애플리케이션에서 각 PPE 미착용 박스를 사람 트랙과 연결합니다. 예를 들어 어떤 Person 박스에 해당 박스가 포함되는지 확인하고, 지속 시간 및 이벤트 규칙을 적용하면 검토자는 연속된 여러 프레임 대신 하나의 이벤트를 확인할 수 있습니다.
Ultralytics 8.4.202부터 RTSP 스트림과 웹캠에서 저장한 예측 결과는 각 스트림의 자체 프레임 레이트를 사용하므로 녹화된 클립이 올바른 속도로 재생됩니다. 모델이 준비되면 엣지 장치용으로 모델을 내보내거나 ONNX, TensorRT, OpenVINO 또는 다른 형식으로 변환하거나, Platform에서 배포하여 전용 엔드포인트를 사용할 수 있습니다.
감지기는 카메라에 보이는 내용을 보고합니다. 헬멧의 인증 여부나 조끼의 손상 여부는 판단할 수 없으므로, 감지 이벤트는 이를 판단할 수 있는 사람에게 전달하세요.
Construction-PPE를 사용해야 하는 경우#
Construction-PPE를 시작점으로 삼아 건설 현장, 작업장, 창고 또는 하역 구역에서 5가지 PPE 유형과 각 장비의 미착용 상태를 감지하세요. 다음과 같은 요구 사항에 적합합니다.
- 장비 감지에 그치지 않는 미착용 감지. 보이는 신체 부위에 일관된 규칙으로 라벨링된 전용 미착용 클래스 5개는 장비가 없는 상태에 대한 직접적인 학습 예시를 모델에 제공합니다.
- 하나의 모델로 차량과 보행자 인식.
forklift,Person및no_vest를 함께 사용해 하역장 상황을 처리할 수 있습니다. - 명확한 데이터셋 라이선스와 학습 준비가 완료된 라벨. 이미지와 어노테이션에는 CC BY 4.0 라이선스가 적용되어 저작자 표시를 하면 상업적으로 사용할 수 있으며, YOLO 형식 라벨은 변환 없이 YOLO26 학습에 사용할 수 있습니다. 해당 데이터셋으로 학습한 YOLO 모델에는 별도의 라이선스가 적용됩니다. 아래 라이선스 질문을 참조하세요.
프로젝트에 대규모의 안전모와 조끼 데이터만 필요한 경우, Ultralytics Platform에서 이미지 10,138개와 클래스 2개로 구성된 Safety Helmet and Reflective Jacket도 제공합니다. 안전모만 다루는 경우, Safety Helmet Detection은 head, helmet 및 person 라벨이 지정된 이미지 5,000개를 제공합니다. 첫 규칙 정의부터 배포 모니터링까지 현장 작업 흐름 전체를 알아보려면 Ultralytics를 사용한 PPE 감지 및 작업장 안전 가이드를 읽어보세요.
자주 묻는 질문
no_helmet및no_vest과 같은 전용 장비 미착용 클래스로 학습하고, 신체 부위가 보이는 경우에만 해당 클래스에 라벨을 지정하세요. 알림을 신뢰하기 전에 자체 카메라 이미지에서 클래스별 지표를 확인하세요. Construction-PPE는 일관된 가시성 규칙에 따라 라벨링된 이러한 클래스 5개를 제공합니다.필요한 클래스에 따라 다릅니다. Ultralytics Construction-PPE는 CC BY 4.0 라이선스가 적용된 검토 완료 이미지 1,000개에 걸쳐 장비 미착용 클래스 5개,
forklift및Person을 포함한 12개 클래스를 다룹니다. 안전모와 조끼만 필요한 경우 Ultralytics Platform의 Safety Helmet and Reflective Jacket으로 데이터를 보강할 수 있으며, Safety Helmet Detection은 안전모만 다룹니다. 현장에 배포하려면 어느 경우든 자체 카메라 이미지를 추가하세요.2026년 11월 공개된 버전은 이미지 1,000개, 바운딩 박스 14,863개, 클래스 12개로 구성되며 학습/검증 분할은 800/200입니다. 클래스는 helmet, gloves, vest, boots, goggles, Person, no_helmet, no_goggle, no_gloves, no_boots, forklift 및 no_vest입니다.
ultralytics패키지를 설치하거나 업데이트하고,yolo26n.pt을 불러온 다음, Construction-PPE 아카이브 URL을data으로 지정해model.train()를 호출하세요. 예를 들어epochs=100와imgsz=640를 사용할 수 있습니다. Ultralytics Platform의 클라우드 학습을 사용하면 코드 없이도 학습할 수 있습니다.전용 미착용 클래스는 장비가 없는 모습에 대한 직접적인 예시를 모델에 제공하므로, 맨머리가 보이면 이를 별도의 객체로 감지할 수 있습니다. "사람 박스 안에 헬멧 박스가 없으면 미착용"이라는 간단한 규칙은 가시성도 확인하지 않으면 가려진 머리를 맨머리로 잘못 판단할 수 있습니다. Construction-PPE는 신체 부위가 보이는 경우에만 장비 미착용 라벨을 지정하므로 첫 번째 접근 방식을 지원합니다.
예. 이미지와 어노테이션은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스로 공개되어 있으며, 저작자 표시를 하면 상업적 이용을 포함한 공유 및 수정이 허용됩니다. Ultralytics 팀을 저작자로 표시하고, 데이터셋과 라이선스 링크를 포함하며, 변경 사항을 표시하세요. 이 라이선스는 데이터셋에만 적용됩니다. 해당 데이터셋으로 학습한 Ultralytics YOLO 모델에는 별도의 라이선스가 적용됩니다(다음 질문 참조).
Construction-PPE로 학습한 모델을 포함해 모든 Ultralytics YOLO 학습 모델에는 기본적으로 AGPL-3.0이 적용됩니다. Ultralytics YOLO 코드 또는 모델을 사용하려면 전체 프로젝트를 AGPL-3.0에 따라 오픈소스로 공개하거나 Ultralytics Enterprise License를 취득해야 합니다. 내부 사용과 R&D에도 이 조건이 적용됩니다. 프로젝트를 비공개로 유지하려면 Enterprise License가 필요합니다.
작성자
댓글
질문하거나 결과를 공유하거나 다른 사람을 도와주세요.










