Происхождение материалов
Источник
Материал основан на разделе Hardware Kits (папка kits/) репозитория harvard-edge/cs249r_book, сайт mlsysbook.ai/kits. Лицензия оригинала — CC BY-NC-SA 4.0 (файл kits/LICENSE).
Перевод выполнил Сергей Монин.
Что переведено
- Главная страница (
index.qmd), включая блок «Часть экосистемы MLSysBook» (shared/config/_ecosystem-cards.qmd). Блок переведён списком; интерактивная отметка «Вы здесь» не переносится, так как в mdBook нет скриптов сайта. - «Начало работы» (
getting-started.qmd), «Платформы» (platforms.qmd), «Настройка среды разработки» (ide-setup.qmd). - Arduino Nicla Vision (
arduino/nicla_vision/): обзор, настройка, классификация изображений, распознавание ключевых слов, классификация движения и обнаружение аномалий, обнаружение объектов. - Seeed XIAOML Kit, XIAO ESP32S3 (
seeed/xiao_esp32s3/): обзор, настройка, классификация изображений, распознавание ключевых слов, классификация движения, обнаружение объектов. - Grove Vision AI V2 (
seeed/grove_vision_ai_v2/): обзор, настройка и приложения без кода, классификация изображений, обнаружение объектов (в оригинале страница помечена «в разработке»). - Raspberry Pi (
raspi/): обзор, настройка (установка ОС, SSH, SWAP, камера, удалённый рабочий стол VNC, обновление системы, особенности моделей Zero и 4/5), классификация изображений, обнаружение объектов, малые языковые модели (SLM, Ollama), визуально-языковые модели (VLM, Florence-2). - Общие лабораторные работы (
shared/): обзор, инженерия признаков для распознавания ключевых слов, блок спектральных признаков DSP. - Текст, заголовки, таблицы, подписи к таблицам и рисункам, врезки, примечания, тексты ссылок и alt-тексты изображений.
- Комментарии в примерах кода переведены там, где это пояснения на естественном языке. Имена функций, переменных и библиотек и команды оставлены как в оригинале. Строки вывода (
Serial.println,ei_printf,print, подписи графиков matplotlib) в части лабораторных работ (XIAOML Kit — классификация движения, Grove Vision AI V2 — классификация изображений, общая лабораторная по спектральным признакам DSP) переведены на русский; в остальных они оставлены на английском, как в оригинале и на скриншотах.
Схемы
Схемы переведены двумя способами.
- Схема архитектуры Florence-2 (в оригинале TikZ, который mdBook не отображает) перерисована как SVG с русскими подписями:
05-raspberry-pi/vlm/images/svg/florence2-architecture.svg. - Самостоятельные схемы из курса перерисованы как SVG с русскими подписями, без логотипов и без скриншотов:
05-raspberry-pi/llm/images/svg/:llm-block-fc-proj.svg,llm-block-image.svg,llm-rag-scheme-1.svg,llm-rag-scheme-2.svg;05-raspberry-pi/object_detection/images/svg/:od-pipeline.svg,od-model-deploy.svg;04-grove-vision/setup_and_no_code_apps/images/svg/grove-person-detection.svg;04-grove-vision/image_classification/images/svg/:grove-ml-pipeline.svg,grove-inference-leds.svg;03-seeed-xiao/image_classification/images/svg/xiao-pipeline.svg.
Исходные растровые файлы этих схем остаются в папках images/png/ и images/jpeg/ рядом с главами, но в тексте они больше не используются.
Что изменено при переносе в mdBook
- Таблицы Quarto (сеточные таблицы) переписаны в формат Markdown-таблиц. Содержимое ячеек не менялось.
- Атрибуты Quarto удалены:
{#sec-…}у заголовков,{.unnumbered},{width=…},{fig-align=…},{.striped .hover}. Подпись таблицы вынесена в курсивную строку под таблицей. - Команды LaTeX и служебные маркеры Quarto удалены:
\noindent,\clearpage,\part{…}, маркеры викторин::: {.quiz-end}. - Врезки Quarto (
::: callout-…) переписаны как цитаты с жирным заголовком. - Рисунки Quarto заменены HTML-блоками
<img>с альтернативным текстом и подписью. Версии, предназначенные только для PDF (content-visible when-format="pdf"), удалены; для HTML сохранена версия для веб-страниц. - Видео Quarto (
{{< video … >}}) заменены ссылками на YouTube. Подключение общего блока ({{< include … >}}) заменено его текстом. - Перекрёстные ссылки Quarto (
@sec-…,@fig-…,@tbl-…) заменены текстом или ссылками на переведённые страницы книги. Все внутренние ссылки проверены скриптомscripts/check_links.py. - Таблица оглавления
SUMMARY.mdсоздана скриптомscripts/make_summary.py. Для названий глав книги в скрипте добавлены подписи (CHAPTER_TITLES). - Изображения скопированы в папку
images/каждой главы. Подписи и альтернативный текст переведены.
Исправления в примерах кода и опечатки оригинала
В примерах кода исправлены ошибки, которые мешали запуску или вели к неверному результату. Исправления минимальны, логика примеров не менялась.
- Импорт
from flask import …без скобок переносит строку с ошибкой синтаксиса: добавлены скобки. - Строка
mimetype=…, разорванная переносом внутри строкового литерала: собрана в одну строку. - Присваивание
url = "…" "…"без скобок: добавлены скобки, иначе вторая часть строки терялась. - Пути к моделям, разорванные обратным слэшем внутри строки (в них попадали пробелы): собраны в одну строку.
except Queue.Emptyзаменено наexcept Emptyс импортом изqueue.- В примере LLM вместо
response_2иresиспользованы правильные переменные. - В вызове
ollama.generateдобавлена пропущенная запятая передoptions=. - В функции
rag_beesудалён дублирующийprint, стоявший вне функции. - Команда
sudo apt-get installlibportaudiocpp0исправлена наsudo apt-get install libportaudiocpp0 portaudio19-dev. - В команде обучения YOLO пропущен обратный слэш в строке
epochs={EPOCHS}; добавлен. cd /Documents/YOLOзаменено наcd ~/Documents/YOLO.- В примере Florence-2
< MORE_DETAILED_CAPTION>и<CAPTION,>приведены к виду<MORE_DETAILED_CAPTION>и<CAPTION>. - В JavaScript-примере однострочный комментарий, разорванный переносом, собран в одну строку.
- Время обработки запроса в примере Ollama: в тексте оригинала указано «около 16 наносекунд», в самом выводе — 1 908 757 000 нс (около 1,9 с). Указано значение из вывода.
- В примере вызова функций модель указана как
phi3.5:3.8b(как в коде), а неllava-phi3, как было в тексте оригинала. - Пустая ссылка на скрипт
calc_distance_image.pyзаменена ссылкой на репозиторий EdgeML-with-Raspberry-Pi. - Опечатки исправлены: «Florense-2», «Movilinet», «Jupiter Notebook», «CRTL+X», «witch», «to detect bees» (в примере о коробках и колёсах) и «from 0 to 256» (исправлено на 0–255).
- В главе «Обнаружение объектов» заголовок проекта «Image Classification project» исправлен на «проект обнаружения объектов».
Дополнительные исправления после вычитки
Код:
While True:→while True:; в скетче со светодиодами (Nicla Vision, классификация изображений) типографские апострофы'uncertain’заменены на обычные, а лишний отступ передwhile True:убран.- В коде C++ для Grove Vision AI V2 комментарии
#заменены на//. - Строковые константы, разорванные переносом внутри
ei_printf(...)иSerial.printf(...)(Nicla Vision KWS, XIAO KWS), собраны из соседних литералов. sudo shutdown -h no→sudo shutdown -h now;ls -f→ls -l(длинный формат); вsudo apt-get install libatlas-base-dev\добавлен пробел перед обратным слэшем.- Имя модели в примере FOMO согласовано с командой переименования (
...-FOMO-int8.eim);/arduinor_rec.wav→/arduino_rec.wav;plt.title('...Welch's...')→ строка в двойных кавычках;{{в выводе Florence-2 →{; ключ<REGION_TO_DESCRIPTION>в выводе задачи «регион в описание». - Пути и команды с именем автора (
mjrovai) заменены наusername. - Опечатки в именах:
helloword.py→helloworld.py,HelloWord→HelloWorld,WiFI/WiFIScan/SimpleWiFIServer→WiFi/WiFiScan/SimpleWiFiServer, «Hello Word» → «Hello World»,LoRaWan→LoRaWAN,SSMA→SSCMA,YOLOV8→YOLOv8, «German Sheppard» → «German Shepherd», «Marvin Prison» → «Mervin Praison».
Числа и факты:
- Год выпуска MobileNetV1: в оригинале указан 2007, в переводе — 2017 (во всех главах про классификацию изображений).
- Число признаков для изображения : 27 640 → 27 648.
- Пиковый ток 14 мА при 5,23 В → 140 мА (при 730 мВт, XIAO) и 14 мА → 140 мА (0,7 Вт, Grove Vision AI V2, внешние светодиоды).
- Выводы I2S-микрофона XIAO: «IO41 (тактовый сигнал) и IO41 (данные)» → «IO42 (тактовый сигнал) и IO41 (данные)».
- Вывод
top_k_indices: пример с тремя индексами заменён пятью (283, 286, 282, 288, 479); размер входа92×92→96×96. - В итогах лабораторной по классификации изображений на Grove Vision AI V2: «архитектура Edge TPU» → «блок NPU Ethos-U55» (в модуле нет Edge TPU).
- Копипаст в оригинале: в XIAO «Обнаружение объектов» классы «коробка/колесо» заменены на «фрукт/жук»; в Grove «Когда XIAO подключён» заменено на Grove Vision AI (V2); в Grove повторявшийся «Шаг 3» перенумерован.
Ссылки и вёрстка:
- Ссылка на лабораторную Grove Vision AI V2 заменена относительной; в URL Colab-блокнота добавлено
%20. - Закомментированный рисунок
iic.pngв XIAO «Классификация изображений» возвращён в текст; удалены два служебных HTML-комментария, оставшихся после переноса из Quarto. - Заключённые в
<em>подписи к DALL·E больше не показывают литеральные звёздочки; цитаты после рисунков отделены пустой строкой, чтобы отображаться как цитаты.
Терминология (единообразно по книге и по глоссариям репозитория): VLM — «визуально-языковая модель»; wake word — «слово пробуждения»; fine-tuning — «дообучение»; no-code — «без кода»; SD card — «SD-карта»; Boards/Library Manager — «менеджер плат/библиотек»; power spectrum — «спектр мощности»; Impulse (Edge Impulse) не переводится. Десятичные дроби в тексте записаны через запятую; точка оставлена в версиях, идентификаторах моделей и значениях из интерфейсов и кода.
Что оставлено на языке оригинала
- Названия продуктов, компаний, библиотек и моделей: Grove Vision AI V2, XIAOML Kit, Nicla Vision, Raspberry Pi, Arduino IDE, SenseCraft AI, Edge Impulse, Roboflow, Ultralytics, Ollama, Hugging Face, Llama, Gemma, Phi, LLaVA, Florence-2, MobileNet, EfficientDet, YOLOv8, FOMO, TFLite, OpenCV, PyTorch, TensorFlow.
- Обозначения компонентов: ESP32-S3, XIAO ESP32S3 Sense, OV2640, MP34DT05, GC2145, STM32H747, Ethos-U55, PSRAM, QSPI, microSD, LSM6DS3TR-C, LSM6DSOX.
- Метрики и обозначения: mAP, IoU, NMS, FPS, CIDEr, recall@1, F1, int8, float32, Q4_0.
- Код, команды, имена файлов и переменных и подписи в веб-интерфейсах (например, Flask-страницы). Строки вывода программ оставлены на английском, кроме исключений, перечисленных выше.
- Промпты для моделей и ответы моделей (например,
What is the capital of France?). Модели обучены на английских запросах, поэтому они не переводились. - Цены в долларах (ориентировочные, как в оригинале).
- Символы ✓ в таблицах доступности и возможностей.
- Китайский иероглиф «小» в объяснении названия «XIAO»: рядом приведён перевод («крошечный»).
- Скриншоты интерфейсов сторонних программ (Edge Impulse Studio, Arduino IDE, SenseCraft AI, Roboflow, Raspberry Pi Imager, Ollama, htop и другие): текст на них остаётся на английском. Каждый рисунок имеет русскую подпись и альтернативный текст.
- Фотографии плат, устройств и изображения-иллюстрации: оставлены без изменений.
- Рисунки из научных статей и внешних публикаций (архитектура Florence-2 и распределение набора FLD-5B, сравнение LLM и SLM, графики бенчмарков). Их не перерисовывали: это чужие иллюстрации. У них русская подпись, исходный текст на рисунке остаётся английским.
- Составные схемы с фотографиями и логотипами:
kws_diagram.jpg(распознавание ключевых слов),objxclas.jpg(классификация и обнаружение объектов, на схеме фотографии яблока, апельсина и банана). Текст на них оставлен на английском; русские подписи и пояснения даны в тексте главы.
Что не перерисовано
- Растровые схемы, которые не перерисованы в SVG, в основном являются скриншотами программ и составными иллюстрациями, описанными выше. Часть растровых схем (например,
spectral_block.jpeg,pa_block.jpg,impulse-block.jpg,model_1.jpg,model_2.jpg) при переносе не просматривалась по отдельности. Их текст нужно проверить и при необходимости перерисовать.
Что требует внимания
- Цены и версии программного обеспечения (Raspberry Pi OS, Python 3.11, версии библиотек и моделей) ориентировочные. Перед работой проверьте их актуальность.
- Ссылки на блокноты и скрипты в репозитории авторов (GitHub), на страницы Edge Impulse, Hugging Face и YouTube указаны по оригиналу. Их доступность не проверялась.
- Правописание в этой книге с буквой «ё» («всё», «ещё», «развёртывание», «объём»).
- Расхождение, унаследованное от оригинала: в лабораторной по классификации изображений на Nicla Vision в коде светодиодов порог «неопределённого» класса равен 0,5, а в тексте говорится о 0,8.
- В примере RAG (Raspberry Pi, малые языковые модели) документы и запросы переведены на русский, а показанные результаты получены на английском наборе. Модель эмбеддингов
nomic-embed-textориентирована на английский язык, поэтому на русском корпусе качество поиска может отличаться.