YOLO (You Only Look Once) — это алгоритм детекции объектов в изображениях и видео, который отличается высокой скоростью и сравнительно хорошей точностью. В отличие от классических методов, использующих двухступенчатую обработку (выделение регионов и классификация каждого региона), YOLO рассматривает детекцию как задачу регрессии. Входное изображение делится на сетку (S S), и для каждой ячейки предсказываются:
Особенность YOLO заключается в единовременной обработке изображения, что позволяет значительно ускорить процесс детекции.
YOLO основан на сверточной нейронной сети (CNN). Ключевые элементы архитектуры:
Принцип работы YOLO в реальном времени:
Библиотека ml5.js предоставляет удобный интерфейс для работы с YOLO в браузере. ml5.js использует предобученные модели, что упрощает интеграцию детекции объектов без необходимости глубоко погружаться в TensorFlow.js.
Для использования YOLO необходимо подключить библиотеку ml5.js:
<script src="https://cdn.jsdelivr.net/npm/ml5@latest/dist/ml5.min.js"></script>
Инициализация модели:
let yolo;
function setup() {
yolo = ml5.YOLO('https://teachablemachine.withgoogle.com/models/YOLO_MODEL/model.json', modelReady);
}
function modelReady() {
console.log('YOLO модель загружена и готова к работе');
}
Здесь YOLO_MODEL заменяется ссылкой на предобученную
модель YOLO или на локальный путь к JSON-модели.
После загрузки модели можно выполнять детекцию:
let img;
function preload() {
img = loadImage('example.jpg');
}
function detect() {
yolo.detect(img, function(err, results) {
if (err) {
console.error(err);
return;
}
console.log(results);
drawResults(results);
});
}
function drawResults(results) {
results.forEach(result => {
noFill();
stroke(0, 255, 0);
rect(result.x, result.y, result.width, result.height);
textSize(16);
fill(255, 0, 0);
text(result.label + ' ' + nf(result.confidence, 0, 2), result.x + 5, result.y + 20);
});
}
Каждый объект в массиве results содержит:
x, y, width,
height — координаты рамки.label — название класса объекта.confidence — вероятность обнаружения объекта.YOLO в ml5.js также поддерживает детекцию в реальном времени через камеру:
let video;
function setup() {
createCanvas(640, 480);
video = createCapture(VIDEO);
video.size(640, 480);
video.hide();
yolo = ml5.YOLO('https://teachablemachine.withgoogle.com/models/YOLO_MODEL/model.json', modelReady);
}
function modelReady() {
detectVideo();
}
function detectVideo() {
yolo.detect(video, function(err, results) {
if (err) {
console.error(err);
return;
}
drawVideoResults(results);
detectVideo();
});
}
function drawVideoResults(results) {
image(video, 0, 0);
results.forEach(result => {
noFill();
stroke(0, 255, 0);
rect(result.x, result.y, result.width, result.height);
textSize(16);
fill(255, 0, 0);
text(result.label + ' ' + nf(result.confidence, 0, 2), result.x + 5, result.y + 20);
});
}
Обработка видео выполняется рекурсивно, что обеспечивает непрерывную детекцию в реальном времени.
results.filter(r => r.confidence > 0.5);
YOLO в ml5.js подходит для:
Особенность ml5.js — легкая интеграция с HTML5 Canvas и p5.js, что позволяет строить визуальные интерфейсы с интерактивной визуализацией обнаруженных объектов.
YOLO в сочетании с ml5.js предоставляет мощный инструмент для распознавания объектов в реальном времени с минимальными усилиями по настройке модели и кода.