diff --git a/README.md b/README.md index 9cea089..57c5663 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,20 @@ COCO80 기반 **YOLO26m** 객체 탐지 결과를 받아, 탐지된 **Person** 영역의 상세 속성을 분석하는 ClearML Agent입니다. -## 역할 +## 개요 -1. YOLO26m이 COCO80 클래스로 이미지를 분석하고 Person의 바운딩 박스(`xywh`)를 전달 -2. 해당 영역을 크롭한 뒤 보행자 속성 인식 모델로 상세 속성 추론 -3. 결과를 ClearML 아티팩트로 업로드 +1. YOLO26m이 COCO80 클래스로 이미지를 분석하고 Person의 바운딩 박스(`xywh`)를 전달합니다. +2. 해당 영역을 크롭한 뒤 보행자 속성 인식 모델로 상세 속성을 추론합니다. +3. 결과를 ClearML 아티팩트로 업로드합니다. + +## 프로젝트 구조 + +| 파일 | 역할 | +|------|------| +| `main.py` | ClearML Task 초기화 및 아티팩트 업로드 (Agent 진입점) | +| `start.py` | 이미지 로드, 크롭, 모델 추론 로직 | +| `inference.py` | 단일 이미지 로컬 추론 스크립트 | +| `train.py` / `test.py` | 모델 학습 및 평가 | ## 입력 @@ -20,13 +29,34 @@ COCO80 기반 **YOLO26m** 객체 탐지 결과를 받아, 탐지된 **Person** | 대상 | 내용 | |------|------| | 콘솔 | 속성명·값 목록 (예: `gender: female`, `age: teenager`) | -| 파일 | 크롭 이미지 `cropped_image.jpg` | -| ClearML | `final_result` 아티팩트 — `{"output": [...], "status": "PASS"}` | +| ClearML | `final_result` 아티팩트 — `{"output": {...}, "status": "PASS"}` | + +`output`은 속성명을 키, 속성값을 값으로 하는 딕셔너리입니다. + +```json +{ + "output": { + "gender": "female", + "age": "teenager" + }, + "status": "PASS" +} +``` ## 실행 +### ClearML Agent (권장) + ```bash -python main.py \ +uv run python main.py \ + --image_url "https://example.com/image.jpg" \ + --xywh "404,290,74,193" +``` + +### 로컬 테스트 (ClearML 없이) + +```bash +uv run python start.py \ --image_url "https://example.com/image.jpg" \ --xywh "404,290,74,193" ``` @@ -36,12 +66,17 @@ python main.py \ - Python 3.11+ - PyTorch, torchvision, ClearML, requests - 사전 학습 체크포인트: `checkpoints/market/resnet50_nfc/net_last.pth` +- 속성 라벨 정의: `doc/label.json`, `doc/attribute.json` ### 설치 ```bash uv sync -# 또는 +``` + +또는 + +```bash pip install -r requirements.txt ``` @@ -51,8 +86,13 @@ pip install -r requirements.txt |------|-----| | Project | `Person_Attribute_Recognition` | | Task | `model-yolo-person-classify` | +| Artifact | `final_result` | ## 모델 -- **탐지**: YOLO26m (COCO80) -- **속성 인식**: ResNet50 + NFC (Market-1501 Attribute, 기본값) +| 단계 | 모델 | 비고 | +|------|------|------| +| 탐지 | YOLO26m (COCO80) | 상위 파이프라인에서 수행 | +| 속성 인식 | ResNet50 + NFC | Market-1501 Attribute (기본값) | + +`start.py`의 `run()` 함수에서 `dataset`, `backbone`, `use_id` 파라미터로 모델 설정을 변경할 수 있습니다.