שילוב והגדרה של CVAT לסימון תמונות ווידאו
השקתם פיילוט של ראייה ממוחשבת, אספתם 50,000 תמונות, שכרתם שלושה מסמנים, אבל אחרי חודש גיליתם: סימון ידני הוא יקר, לוחות הזמנים בוערים, והאיכות היא 70% IoU. ראינו את זה עשרות פעמים. הפתרון הוא לפרוס את CVAT (Intel), לחבר סימון מקדים מבוסס AI, ולהקים צינור בקרת איכות אוטומטי. אנחנו מטפלים בכל דבר, מהפריסה ועד להכשרת הצוות. גישה זו מחזירה את עצמה תוך 2–3 חודשים עבור היקפים שמתחילים ב-5,000 אובייקטים מסומנים, וחוסכת $10,000–$30,000 בשנה עבור צוות של חמישה מסמנים. השילוב בדרך כלל עולה בין $5,000 ל-$15,000 כסכום חד-פעמי.
CVAT מול שירותים בתשלום
שירותים בתשלום גובים מ-$2 עד $5 לכל תמונה, אבל אין לכם שליטה על הנתונים, לא ניתן להתאים אישית את זרימת העבודה, ובקנה מידה של 10,000+ תמונות התקציב הופך קריטי. CVAT הוא כלי סימון בקוד פתוח שמתוחזק על ידי Intel. אתם מאחסנים נתונים על התשתית שלכם, מתאימים אישית את הממשק, ומוסיפים מודלים משלכם באמצעות פונקציות serverless. פרסנו CVAT עבור לקוחות בקמעונאות, רפואה ותחבורה אוטונומית — בכל מקרה הפתרון מחזיר את עצמו תוך 2–3 חודשים. מאגר רשמי: opencv/cvat.
האצת סימון עם AI Assist
AI assist הוא קלף המנצח העיקרי. המסמן פותח פריים, המודל כבר צייר 80% מהתיבות, האדם רק מתאים את הגבולות. בלי AI — 4–7 דקות לכל תמונה. עם AI ברמת דיוק של 90% — 15–30 שניות. זהו האצה של פי 8–16 — סימון בסיוע AI מהיר עד פי 16 מסימון ידני. יישמנו צינור כזה עבור 15 פרויקטים. הגורם המרכזי הוא איכות החיזוי: אם הדיוק יורד מתחת ל-70%, AI מתחיל להפריע. לכן, אנחנו תמיד מכיילים ערכי סף ובוחרים מודל עבור מערך הנתונים הספציפי.
הגדרת סימון בסיוע AI
אתם צריכים Nuclio serverless ומודל ארוז כפונקציה. העלו את המודל, CVAT קורא לו עבור כל פריים. אנחנו מרבים להשתמש בסימון YOLOv8 כמודל בסיס. דוגמת הגדרה עבור YOLOv8:
---
# docker-compose.override.yml
version: '3.3'
services:
cvat_server:
environment:
DJANGO_MODWSGI_EXTRA_ARGS: ""
ALLOWED_HOSTS: "*"
CVAT_REDIS_HOST: "cvat_redis"
CVAT_POSTGRES_HOST: "cvat_db"
CVAT_DEFAULT_STORAGE_TYPE: "cloud_storage"
AWS_ACCESS_KEY_ID: "${AWS_ACCESS_KEY_ID}"
AWS_SECRET_ACCESS_KEY: "${AWS_SECRET_ACCESS_KEY}"
AWS_STORAGE_BUCKET_NAME: "cvat-data"
cvat_worker_annotation:
deploy:
replicas: 4
cvat_worker_export:
deploy:
replicas: 2
traefik:
command:
- "--providers.docker.exposedByDefault=false"
- "--entrypoints.websecure.address=:443"
- "[email protected]"
# Быстрый деплой с SSL
git clone https://github.com/opencv/cvat.git
cd cvat
docker compose -f docker-compose.yml -f docker-compose.override.yml -f components/serverless/docker-compose.serverless.yml up -d
docker exec -it cvat_server python manage.py createsuperuserפונקציית Nuclio לזיהוי:
# nuclio/yolov8_detector/main.py
import json
import base64
import numpy as np
import cv2
from ultralytics import YOLO
model = YOLO('/opt/nuclio/yolov8l.pt')
def handler(context, event):
data = event.body
buf = base64.b64decode(data['image'])
img = cv2.imdecode(np.frombuffer(buf, np.uint8), cv2.IMREAD_COLOR)
threshold = data.get('threshold', 0.45)
results = model(img, conf=threshold)
annotations = []
for box in results[0].boxes:
x1, y1, x2, y2 = map(float, box.xyxy[0])
cls_name = model.names[int(box.cls)]
annotations.append({
'confidence': float(box.conf),
'label': cls_name,
'points': [x1, y1, x2, y2],
'type': 'rectangle'
})
return context.Response(
body=json.dumps(annotations),
headers={'Content-Type': 'application/json'},
status_code=200
)
---
# nuclio function.yaml
apiVersion: nuclio.io/v1beta1
kind: Function
metadata:
name: cvat-yolov8-detector
spec:
runtime: python:3.9
handler: main:handler
resources:
limits:
nvidia.com/gpu: 1
env:
- name: MODEL_PATH
value: /opt/nuclio/yolov8l.pt
אוטומציה של ייבוא/ייצוא נתונים דרך CVAT API
אוטומציה מפחיתה עבודה ידנית. אנחנו מיישמים זרימות עבודה של MLOps לסימון לשיפור מתמשך. דוגמת מחלקת Python:
from cvat_sdk import make_client
from cvat_sdk.models import TaskWriteRequest, DataRequest
class CVATIntegration:
def __init__(self, host: str, credentials: tuple):
self.client = make_client(host=host, credentials=credentials)
def create_task_from_s3(self, task_name: str, s3_prefix: str, labels: list) -> int:
task = self.client.tasks.create(TaskWriteRequest(
name=task_name,
labels=labels,
segment_size=100,
overlap=5
))
self.client.tasks.create_data(
id=task.id,
data_request=DataRequest(
cloud_storage_id=1,
filename=[f'{s3_prefix}/{f}' for f in self._list_s3_files(s3_prefix)]
)
)
return task.id
def export_annotations(self, task_id: int, format: str = 'YOLO 1.1') -> str:
export_path = f'/tmp/annotations_{task_id}.zip'
self.client.tasks.export_dataset(id=task_id, format=format, filename=export_path)
return export_path
def get_annotation_progress(self, task_id: int) -> dict:
task = self.client.tasks.retrieve(task_id)
return {'total_frames': task.size, 'annotated': task.jobs[0].stage if task.jobs else 0}
בעת אוטומציה דרך ה-API, חשוב להגדיר מדיניות ניסיונות חוזרים ומגבלות מתאימות. אנחנו משתמשים ב-exponential backoff על מגבלות קצב של CVAT. עבור פרויקטים גדולים (100,000+ תמונות), אנחנו מגדירים תורי משימות מקבילים.
מהירות סימון: AI Assist מול ידני
מספרים אמיתיים מפרויקט של סימון פגמים תעשייתיים (5,000 תמונות):
| שיטה | זמן לכל תמונה | סה"כ עבור 5,000 תמונות |
|---|---|---|
| סימון ידני מאפס | 4–7 דקות | 20–35 ימי עבודה |
| סימון מקדים AI + תיקון (דיוק 80%) | 45–90 שניות | 4–8 ימי עבודה |
| סימון מקדים AI + תיקון (דיוק 95%) | 15–30 שניות | 1–2 ימי עבודה |
אם דיוק החיזוי נמוך מ-70%, AI assist מאט את העבודה — תיקונים אורכים יותר זמן מאשר סימון מאפס. לכן אנחנו תמיד בודקים את המודל על מדגם מייצג לפני השילוב.
הבטחת בקרת איכות של סימון
בקרת איכות של סימון היא קריטית לביצועי המודל. עבודות חפיפה: 10–15% מהתמונות מסומנות על ידי שני מסמנים באופן עצמאי, ואז אנחנו משווים IoU. Honeypots: תמונות שהוכנו במיוחד עם סימון ידוע — אנחנו בודקים את הדיוק של כל מסמן. קונצנזוס: 3 מסמנים על מקרים קשים + הצבעת רוב.
בנוסף, אנחנו מגדירים אימות אוטומטי: בדיקה לאובייקטים שהוחמצו, כפילויות, עמידה בסכימת התוויות. כל המדדים נכנסים לדשבורד לניתוח. לאוטומציה של בקרות, אנחנו משתמשים ב-CVAT Analytics ובסקריפטים מותאמים אישית של Python.
טעות אופיינית היא דילוג על שלב האימות בהתחלה. אם מערך הנתונים מכיל דוגמאות רבות באיכות ירודה, מודל ה-AI מתדרדר במהירות. אנחנו ממליצים להקצות 10% מזמן הפרויקט לסקירת סימון.
שגיאות נפוצות בשילוב CVAT:
- אין ניסיונות חוזרים בבקשות API על מגבלות קצב.
- הרשאות S3 שגויות.
- שימוש במודל ללא בדיקה מוקדמת על מדגם מייצג.
- דילוג על עבודות חפיפה בהתחלה.
תהליך ולוחות זמנים
- ניתוח: חקר נתונים, בחירת מודל לסימון מקדים, עיצוב ארכיטקטורה.
- פריסה: הגדרת CVAT עם S3, SSL, גיבוי.
- שילוב AI: חיבור 1–3 מודלים דרך Nuclio, הגדרת ספים.
- בקרת איכות: הגדרת חפיפה, honeypots, קונצנזוס.
- הכשרת צוות: 2–3 מפגשים של 4 שעות כל אחד.
- תיעוד והעברת CI/CD.
| סוג עבודה | לוח זמנים |
|---|---|
| פריסת CVAT + הגדרה בסיסית | 1–2 שבועות |
| CVAT + סימון בסיוע AI | 3–5 שבועות |
| צינור מלא: CVAT + בקרת איכות + CI/CD | 6–10 שבועות |
מה כלול בעבודה?
כאשר אתם מזמינים שילוב CVAT מקיף, אתם מקבלים:
- מופע CVAT עובד עם SSL, גיבויים קבועים וניטור
- 1–3 מודלי AI ארוזים כפונקציות Nuclio עם כיוונון ספים
- צינור ייבוא/ייצוא נתונים אוטומטי דרך S3
- מערכת בקרת איכות: עבודות חפיפה, honeypots, קונצנזוס
- הכשרה למסמנים (2–4 שעות) ולמנהלים (1–2 שעות)
- תיעוד לניהול והרחבת המערכת
- תמיכה לחודש אחד לאחר המסירה
למה לשלב AI Assist?
הניסיון מראה: בפרויקטים עם יותר מ-3,000 תמונות, AI assist מחזיר את עצמו תוך 2–4 שבועות. אתם מפחיתים תלות במספר המסמנים, מקבלים איכות עקבית, ויכולים להתרחב בלי לגייס עובדים. אנחנו מבטיחים דיוק סימון מקדים של לפחות 80% — אחרת אנחנו מחזירים את העמלה עבור שילוב המודל.
סימון ראייה ממוחשבת נעשה יעיל עם CVAT. אנחנו מציעים שילוב turnkey — קבלו צינור מוכן עם צוות מיומן. צרו קשר לייעוץ על הפרויקט שלכם ולהערכת חיסכון בתקציב.
למהנדסים שלנו יש יותר מ-5 שנות ניסיון בראייה ממוחשבת. השלמנו יותר מ-30 שילובי CVAT לקמעונאות, לוגיסטיקה וטכנולוגיה רפואית.







