Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 512новых вакансий за сутки·54 396вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 565
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 395 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python8 752
  • Облачные технологии6 631
  • QA вакансии2 183
  • Android1 322
  • Инженер данных860
  • Продакт-менеджер316

Разработка

  • iOS1 238
  • Backend вакансии1 196
  • AI вакансии549
  • Fullstack вакансии500
  • Frontend вакансии426
  • Mobile вакансии28

По стеку

  • Go5 209
  • Java3 131
  • Kotlin1 113
  • Node.js1 008
  • Rust833
  • .NET656
  • PHP322
  • C++270
  • C#207

DevOps и инфраструктура

  • Kubernetes3 882
  • Linux-инфраструктура2 817
  • DevOps вакансии2 655
  • Terraform / IaC2 191
  • Мониторинг и Observability1 071
  • CI/CD919
  • SRE308
  • Кибербезопасность38

Аналитика и данные

  • Аналитик данных522
  • Data Scientist435
  • Бизнес-аналитик397
  • Системный аналитик67

Другие направления

  • Проджект-менеджер109
  • UI/UX дизайн67
  • Ручное тестирование14

По регионам

  • Вакансии в США22 951
  • Вакансии в Европе10 259
  • Работа в России2 963
  • Вакансии в Канаде2 034

По формату

  • Удалённые вакансии39 691
  • Релокация в США22 951
  • Гибридная работа3 633
  • Офисная работа2 761

По уровню

  • Senior вакансии19 599
  • Middle вакансии11 130
  • Junior вакансии3 562

Сейчас нанимают

Все компании
  • Wise192 вакансии
  • Rakuten189 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis42 вакансии
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме OpenCVВсе вопросы
OpenCVMiddleПроектирование систем

Как оценивать качество computer vision pipeline: метрики, golden datasets и regression tests?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Качество CV-pipeline оценивают через IoU/mAP для детекции, mIoU для сегментации, фиксированный golden dataset с аннотациями и pytest-регрессионные тесты на precision, recall и latency.

Трекинг

  • MOTA (Multi-Object Tracking Accuracy) — учитывает FP, FN и ID switches.
  • IDF1 — согласованность идентификаторов объектов.
import numpy as np

def compute_iou(box1, box2):
    """box = [x1, y1, x2, y2]"""
    x1 = max(box1[0], box2[0])
    y1 = max(box1[1], box2[1])
    x2 = min(box1[2], box2[2])
    y2 = min(box1[3], box2[3])

    intersection = max(0, x2 - x1) * max(0, y2 - y1)
    area1 = (box1[2] - box1[0]) * (box1[3] - box1[1])
    area2 = (box2[2] - box2[0]) * (box2[3] - box2[1])
    union = area1 + area2 - intersection

    return intersection / union if union > 0 else 0.0

def evaluate_detections(predictions, ground_truths, iou_threshold=0.5):
    """
    predictions: list of dicts {box, confidence, class_id}
    ground_truths: list of dicts {box, class_id}
    """
    tp, fp, fn = 0, 0, 0
    matched = set()

    for pred in sorted(predictions, key=lambda x: -x["confidence"]):
        best_iou, best_idx = 0, -1
        for i, gt in enumerate(ground_truths):
            if i in matched or gt["class_id"] != pred["class_id"]:
                continue
            iou = compute_iou(pred["box"], gt["box"])
            if iou > best_iou:
                best_iou, best_idx = iou, i

        if best_iou >= iou_threshold:
            tp += 1
            matched.add(best_idx)
        else:
            fp += 1

    fn = len(ground_truths) - len(matched)
    precision = tp / (tp + fp) if (tp + fp) > 0 else 0
    recall = tp / (tp + fn) if (tp + fn) > 0 else 0
    return {"precision": precision, "recall": recall, "tp": tp, "fp": fp, "fn": fn}

Зачем нужна формальная оценка качества CV-pipeline

Computer vision pipeline часто деградирует незаметно: изменилось освещение на камере, появился новый тип объектов, обновилась модель DNN. Без метрик, тестовых наборов и регрессионных тестов деградация обнаруживается только в production. Правильная система оценки включает три слоя: метрики качества, golden datasets и автоматические regression tests.

1. Метрики для разных задач

Детекция объектов

  • IoU (Intersection over Union) — перекрытие предсказанного и ground truth bounding box. Порог 0.5 — стандарт PASCAL VOC.
  • Precision / Recall — на конкретном пороге confidence.
  • mAP (mean Average Precision) — усреднение AP по классам и порогам IoU. Стандарт COCO: mAP@[0.5:0.95].

Сегментация

  • Pixel Accuracy — доля правильно классифицированных пикселей.
  • mIoU — среднее IoU по классам сегментации.
  • Dice Coefficient — 2*|A∩B| / (|A|+|B|), особенно для медицинских изображений.

2. Golden datasets

Golden dataset — фиксированный набор изображений с размеченными ground truth аннотациями, представляющий реальные условия эксплуатации. Правила составления:

  • Включите edge cases: плохое освещение, частичные перекрытия, мелкие объекты.
  • Зафиксируйте версию датасета в git (хэш или тег).
  • Разделите на подмножества: ночь/день, разные камеры, разные условия.
  • Никогда не модифицируйте golden dataset — только добавляйте новые подмножества.

3. Regression tests с pytest

import pytest
import cv2
import json
import numpy as np
from pathlib import Path

GOLDEN_DIR = Path("tests/golden")
ANNOTATIONS = json.loads((GOLDEN_DIR / "annotations.json").read_text())


def load_detector():
    net = cv2.dnn.readNetFromONNX("models/detector.onnx")
    net.setPreferableBackend(cv2.dnn.DNN_BACKEND_OPENCV)
    net.setPreferableTarget(cv2.dnn.DNN_TARGET_CPU)
    return net


@pytest.fixture(scope="module")
def detector():
    return load_detector()


@pytest.mark.parametrize("image_name", ANNOTATIONS.keys())
def test_detection_regression(detector, image_name):
    image = cv2.imread(str(GOLDEN_DIR / "images" / image_name))
    assert image is not None, f"Image not found: {image_name}"

    # Run detector
    predictions = run_detector(detector, image)  # ваша функция
    ground_truths = ANNOTATIONS[image_name]

    metrics = evaluate_detections(predictions, ground_truths, iou_threshold=0.5)

    # Пороги регрессии
    assert metrics["precision"] >= 0.85, (
        f"{image_name}: precision {metrics['precision']:.3f} < 0.85"
    )
    assert metrics["recall"] >= 0.80, (
        f"{image_name}: recall {metrics['recall']:.3f} < 0.80"
    )


def test_latency_regression(detector):
    """Проверка, что pipeline не стал медленнее."""
    import time
    image = cv2.imread(str(GOLDEN_DIR / "images" / "benchmark.jpg"))
    times = []
    for _ in range(20):
        start = time.perf_counter()
        run_detector(detector, image)
        times.append(time.perf_counter() - start)

    p95 = np.percentile(times, 95)
    assert p95 < 0.1, f"P95 latency {p95*1000:.1f}ms exceeds 100ms threshold"

Подводные камни

  • Optimistic golden dataset — если датасет состоит только из «хороших» снимков, метрики будут завышены и не отражают реальные условия.
  • Нет разбивки по подгруппам — среднее mAP может быть 0.85, но ночные снимки дают 0.3. Всегда считайте метрики по срезам (slice-based evaluation).
  • Confidence threshold влияет на precision/recall — тест должен явно фиксировать порог; разные пороги дают несопоставимые цифры.
  • Аннотации дрейфуют — если ground truth разметчики меняются, аннотации могут стать несогласованными. Используйте inter-annotator agreement (Cohen's kappa).
  • Тест на latency зависит от железа CI — запускайте latency-тесты на dedicated runner или с явной пометкой «flaky на виртуалках».
  • Переобучение на golden dataset — если разработчики видят golden dataset и «подгоняют» модель под него, набор теряет ценность. Держите test set изолированным.

Типичные ошибки

  • Отвечать определением без production-сценария.
  • Не называть runtime boundary, security boundary или failure mode.
  • Игнорировать версию API, observability и тестовую проверку.

Что проверяет интервьюер

  • Объясняет механизм своими словами и без выдуманных API.
  • Называет реальные риски, диагностику и критерий корректности.
  • Связывает ответ с текущей документацией и миграционными ограничениями.

Как вы знаете этот вопрос?

Проверить себя по теме OpenCV →

Источники

  • https://docs.opencv.org/4.x/dc/d71/tutorial_py_optimization.html
←Предыдущий вопросКак работает camera calibration и distortion correction?Следующий вопрос→Как OpenCV интегрируется с фреймворками глубокого обучения (модуль DNN)?

Связанные темы

OpenCVopencv-productionrisk-analysistechnical-depth

Частые вопросы на собеседовании

  • Что такое пороговая обработка (thresholding) в OpenCV и каковы её типы (binary, Otsu, adaptive)?
  • Что такое OpenCV и каковы его основные области применения?
  • Как преобразовать цветное изображение в оттенки серого в OpenCV?
  • В каких data/AI-задачах OpenCV даёт реальный выигрыш, а где лучше выбрать другой инструмент или более простой pipeline?