README.md

Нейронные сети на Repka Pi

Документация по данному репозиторию доступна по ссылке

Предварительная настройка

  1. Создайте директорию workspace в любом для вас удобном месте:

    mkdir workspace
    
  2. Перейдите в директорию workspace:

    cd workspace
    
  3. Далее клонируем репозиторий с нейронными сетями ml-repka:

    Необходимые модели для нейросетей находятся по адресу: https://download.repka-pi.ru/ml/

    Куда необходимо переместить модели после скачивания? Ответ:

    yolov3.weights ==> humandetect_yolo/data

    frozen_inference_graph.pb ==> humandetect_tf/data

    yolov3-tiny.weights ==> humandetect_yolo_tiny/data

    git clone https://gitflic.ru/project/repka_pi/ml-repka.git
    
  4. Скачиваем Golang:

    wget https://go.dev/dl/go1.22.3.linux-arm64.tar.gz
    
  5. После скачивания производим распаковку:

    tar -C /usr/local -xzf go1.22.3.linux-arm64.tar.gz
    
  6. После закрытия терминала данная переменная среды слетит. Для того, чтобы это не произошло необходимо добавить команду ниже в самый конец файлов ~/.profile или ~/.bashrc

    export PATH=$PATH:/usr/local/go/bin
    
  7. После установки Golang необходимо проверить версию:

    go version
    
  8. Т.к. для сборки OpenCV необходима дополнительная память, увеличим размер swap и перезагрузимся:

    swapoff /swapfile 
    fallocate -l 6G /swapfile 
    mkswap /swapfile 
    swapon /swapfile 
    reboot
    
  9. После перезагрузки необходимо убедиться, что размер swap увеличился до 6G:

    swapon --show
    
  10. Увеличим размер директории /tmp
    Внимание! Данный пункт актуален для обладателей Repka Pi с 1GB оперативной памяти
    Обращаем внимания, что после перезагрузки директория /tmp вернется к исходному размеру

    mount -o remount,size=1G /tmp
    
  11. Убедимся, что настройка применилась:

    df -h /tmp
    
  12. Подготовительные работы перед установкой ml_repka завершены!

Установка OpenCV

  1. Перейдем в репозиторий ml_repka:

    cd workspace/ml_repka
    
  2. В первую очередь необходимо установить OpenCV, для этого переходим в директорию install:

    cd install
    
  3. Запускаем установка OpenCV.
    В репозитории ml_repka используется OpenCV версии 4.9.0. Но если вы хотите попробовать другую версию OpenCV, то в файле /install/Makefile возможно заменить переменную OPENCV_VERSION
    Установка OpenCV весьма долгий процесс, поэтому РЕКОМЕНДУЕТСЯ запускать ее непосредственно на Repka Pi, а не через удаленное подключение по SSH.
    В моем случае установка продлилась: 3 часа 40 минут

    make install_raspi
    
  4. После того, как установка завершена, проверим версию OpenCV:

    opencv_version
    

Установка ncnn

  1. Перейдите в директорию workspace:

    cd workspace
    
  2. Склонируем репозиторий ncnn:

    git clone https://github.com/Tencent/ncnn.git
    
  3. После клонирования перейдем в директорию с репозиторием:

    cd ncnn
    
  4. Обновим все сабмодули репозитория:

    git submodule update --init
    
  5. Создадим директорию для сборки и перейдем в нее:

    mkdir build
    cd build
    
  6. Далее подготовим репозиторий к сборке:

    cmake -DCMAKE_BUILD_TYPE=Release -DNCNN_BUILD_EXAMPLES=ON -DNCNN_BUILD_TOOLS=OFF ..
    
  7. Приступим к сборке ncnn
    Установка ncnn весьма долгий процесс, поэтому РЕКОМЕНДУЕТСЯ запускать ее непосредственно на Repka Pi, а не через удаленное подключение по SSH.

    make -j2
    
  8. Произведем установку ncnn:

    make install
    
  9. После закрытия терминала данная переменная среды слетит. Для того, чтобы это не произошло необходимо добавить команду ниже в самый конец файлов ~/.profile или ~/.bashrc

    export ncnn_DIR=/root/workspace/ncnn/build/install/lib/cmake/ncnn
    

Установка и запуск распознавания лица

Для выполнения данного шага необходимо пройти шаг 1, 2.1

  1. Перейдем в репозиторий ml_repka:

    cd workspace/ml_repka
    
  2. Собираем распознаватель лица:

    make build-facedetect
    
  3. Возможна ситуация, когда распознаватель лица не запустится.
    Одним из вариантов решения данной проблемы - замена значения переменной SOURCE на 1 в файле Makefile.

    make run-facedetect
    

Установка и запуск распознавания людей

  1. Перейдем в репозиторий ml_repka:

    cd workspace/ml_repka
    
  2. Собираем распознаватель людей:

    make build-humandetect
    
  3. Далее запустим распознаватель людей:
    Перед запуском распознавателя людей необходимо заменить переменную THREADS на 1 в Makefile, т.к. с бОльшим количеством ядер распознаватель людей работает нестабильно.
    Либо же, вы можете изменить частоту процессора на 1 или 1.2 GHz - с такой конфигурацией распознаватель будет работать.
    Возможна ситуация, когда распознаватель лица не запустится.
    Одним из вариантов решения данной проблемы - замена значения переменной SOURCE на 1 в файле Makefile.

    make run-humandetect
    

Конфигурирование Makefile

В корне репозитория находится файл Makefile. В нем заданы все основные команды для запуска нейронных сетей на Repka Pi. В нем же есть возможность сконфигурировать аргументы с которыми запускаются нейронные сети.

Список аргументов:

SOURCE - аргумент, отвечающий за источник видеопотока (напр. это может быть ваша вебкамера /dev/video0 или же какой-то видеофайл /some/path/video.mp4)

FPS - ограничение кадров в секунду, которые снимаются, обрабатываются и выводятся с видеопотока. В случае установки значения 0, ограничение не будет работать.

HEIGHT - ограничение по высоте (и ширине пропорционально) для обработки видеопотока. В случае установки значения 0, будет использоваться оригинальный размер.

THREADS - кол-во потоков ОС, которые будут заниматься обработкой видеопотока.

Информация:
Для оптимальной работы на Repka Pi 3 необходимо выставить данные параметры: FPS = 0 HEIGHT = 0 THREADS = 0

Также стоит упомянуть, что не для всех нейронных сетей необходимы все четыре аргумента. Ниже представлена таблица соотношения нейронных сетей и используемых в ней аргументов:

Таблица соотношения нейронных сетей и используемых в ней аргументов.png.png

Шаг 5. Альтернативный вариант запуска

Также для запуска нейронных сетей вы можете не пользоваться Makefile. Есть альтернативный вариант запуска:

facedetect

go vet ./facedetect/...; go run ./facedetect <Источник видеопотока> <Ограничение FPS>

facedetect-ssd

go vet ./facedetect_ssd/...; go run ./facedetect_ssd <Источник видеопотока> <Ограничение FPS>

facedetect-yn

cd facedetect_yn
cmake -B build .
cmake --build build -j$(nproc)
./build/demo -s=<Источник видеопотока> -H=<Ограничение высоты>

humandetect-tf

go vet ./humandetect_tf/...; go run ./humandetect_tf <Источник видеопотока> <Ограничение FPS> <Ограничение высоты>

humandetect-yolo

go vet ./humandetect_yolo/...; go run ./humandetect_yolo <Источник видеопотока> <Ограничение FPS>

humandetect-yolo-tiny

go vet ./humandetect_yolo_tiny/...; go run ./humandetect_yolo_tiny <Источник видеопотока> <Ограничение FPS>

humandetect-cv-nanodet-plus

cd humandetect_cv_nanodet_plus
rm -rf build
cmake -B build .
cmake --build build -j$(nproc)
./build/opencv_zoo_object_detection_nanodet -s=<Источник видеопотока> -m=object_detection_nanodet_2022nov.onnx

humandetect-ncnn-nanodet-plus

cd humandetect_ncnn_nanodet_plus
rm -rf build
cmake -B build .
cmake --build build -j$(nproc)
./build/nanodet_demo 2 <Источник видеопотока> nanodet-plus-m_320-sim-opt-fp16

humandetect-ncnn-nanodet

cd humandetect_ncnn_nanodet
rm -rf build
cmake -B build .
cmake --build build -j$(nproc)
./build/nanodet_m_demo <Источник видеопотока> <Кол-во потоков ОС для обработки>

humandetect-pytorch-nanodet-plus

cd humandetect_pytorch_nanodet_plus
python3 demo.py video --config data/config/nanodet-plus-m_320.yml --model data/models/nanodet-plus-m_320.pth --path <Источник видеопотока>

humandetect-mp

cd humandetect_mp
cmake -B build .
cmake --build build -j$(nproc)
./build/opencv_zoo_person_detection_mediapipe -d=<Источник видеопотока>

humandetect-ncnn-yolofastest-v2

cd humandetect_ncnn_yolofastest_v2
rm -rf build
cmake -B build .
cmake --build build -j$(nproc)
./build/yolofastest_demo <Источник видеопотока> <Кол-во потоков ОС для обработки>

humanseg

cd humanseg
cmake -B build .
cmake --build build -j$(nproc)
./build/opencv_zoo_human_segmentation -i=<Источник видеопотока>

Об используемый моделях нейронных сетей

Каскады Хаара

Источник модели: https://github.com/hybridgroup/gocv/blob/release/cmd/facedetect/main.go

Детектор лица Виолы-Джонса, предложенный исследователями Полом Виолой и Майклом Джонсом в 2001 году, стал одним из первых крупных прорывов в этой области.

Используя функции обнаружения линий или краев, предложенные в детекторе Виолы-Джонса, компании Haar Cascades удалось обеспечить столь необходимый прорыв в области обнаружения лиц. Хотя он значительно улучшил скорость и точность обнаружения, он имел свои ограничения и не смог обнаружить лица на зашумленных изображениях. За прошедшие годы произошло много улучшений. Алгоритм Хаара Каскад использовался не только для обнаружения лиц, но также для обнаружения глаз, обнаружения номерных знаков и т. д.

Запускаем

  make docker-facedetect

Производительность

Наименование устройства FPS
Intel i5-1135 13
Repka-pi 3 X

SSD Caffe

Источник модели: https://github.com/hybridgroup/gocv/blob/release/cmd/ssd-facedetect/main.go

Детектор Single Shot. Само название модели раскрывает большую часть подробностей о модели. Да, модель SSD обнаруживает объект за один проход по входному изображению, в отличие от других моделей, которые просматривают изображение более одного раза, чтобы получить выходной результат.

Запускаем

  make docker-facedetect-ssd

Производительность

Наименование устройства FPS
Intel i5-1135 16
Repka-pi 3 X

FaceDetectorYN

Источник модели: https://github.com/opencv/opencv_zoo/tree/main/models/face_detection_yunet

Традиционно OpenCV оснащался детекторами лиц, такими как каскады Хаара и детекторы HOG, которые хорошо работали для фронтальных лиц, но в остальном терпели неудачу. В недавнем выпуске OpenCV (4.5.4, октябрь 2021 г.) была добавлена модель распознавания лиц YuNet, которая решает эту проблему.

Это детектор лиц на основе CNN, разработанный Чэнжуем Ваном и Юантао Фэном. Это очень легкая и быстрая модель. При размере модели менее МБ ее можно загрузить практически на любое устройство. В качестве основы он использует mobilenet и содержит в общей сложности 85 000 параметров.

Запускаем

  make docker-facedetect-yn

Производительность

Наименование устройства FPS
Intel i5-1135 60
Repka-pi 3 5

Blazeface

Запуск не производился. Но нейросеть перспективная.

Источник: https://github.com/zineos/blazeface

Yolo v3

Источник модели: https://pjreddie.com/darknet/yolo/

YOLOv3 (You Only Look Once, Version 3) — это алгоритм обнаружения объектов в реальном времени, который идентифицирует конкретные объекты в видео, прямых трансляциях или изображениях. Алгоритм машинного обучения YOLO использует функции, изученные глубокой сверточной нейронной сетью, для обнаружения объектов, расположенных на изображении. Джозеф Редмон и Али Фархади — создатели версий YOLO 1–3, причем третья версия алгоритма машинного обучения YOLO является наиболее точной версией исходного алгоритма машинного обучения. Джозеф Редмон и Али Фархади создали первую версию алгоритмов YOLO в 2016 году. Два года спустя, в 2018 году, они выпустили версию 3. YOLOv3 — это улучшенная версия YOLO и YOLOv2. YOLO реализован с использованием библиотек глубокого обучения Keras или OpenCV.

  make docker-humandetect-yolo

Производительность

Наименование устройства FPS
Intel i5-1135 2
Repka-pi 3 менее 1

Yolo v3 tiny

Источник модели: https://pjreddie.com/darknet/yolo/

Отличается от Yolo v3 меньшим количеством слоев и меньшей точностью. Также кол-во выходных слоев 2 вместо 3 (у YoLo).

  make docker-humandetect-yolo-tiny

Производительность

Наименование устройства FPS
Intel i5-1135 14
Repka-pi 3 1

TF MobileNet

Источник модели: https://github.com/hybridgroup/gocv/blob/release/cmd/dnn-detection/main.go

Модель mobilenet-ssd представляет собой сеть однократного мультибоксового обнаружения (SSD), предназначенную для обнаружения объектов. Эта модель реализована с использованием платформы Caffe*. Подробности об этой модели можно найти в репозитории.

Входные данные модели представляют собой большой двоичный объект, состоящий из одного изображения 1, 3, 300, 300 в порядке BGR, также как и модель Densnet-121. Средние значения BGR необходимо вычесть следующим образом: (127,5, 127,5, 127,5) перед передачей объекта изображения в сеть. Кроме того, значения необходимо разделить на 0,007843.

  make docker-humandetect-tf

Производительность

Наименование устройства FPS
Intel i5-1135 16
Repka-pi 3 1

Nanodet plus на бекенде pytorch

Источник модели: https://github.com/opencv/opencv_zoo/tree/main/models/object_detection_nanodet

NanoDet — это одноэтапная модель обнаружения объектов без привязки в стиле FCOS, которая использует обобщенную фокальную потерю в качестве потери классификации и регрессии. В NanoDet-Plus предлагается новую стратегию назначения меток с простым модулем управления назначением (AGM) и динамический программный модуль назначения меток (DSLA) для решения проблемы оптимального назначения меток при обучении упрощенной модели.

Примечание:

  • Эта версия NanoDet: Nanodet-m-plus-1.5x_416
  make docker-humandetect-pytorch-nanodet-plus

Производительность

Наименование устройства FPS
Intel i5-1135 10
Repka-pi 3 -

Nanodet plus 1.5 416 x 416 на чистом OpenCV

Источник модели: https://github.com/opencv/opencv_zoo/tree/main/models/object_detection_nanodet

  make docker-humandetect-cv-nanodet-plus

Производительность

Наименование устройства FPS
Intel i5-1135 18
Repka-pi 3 2

Nanodet m plus на бекенде NCNN

Источник модели: https://github.com/RangiLyu/nanodet/blob/main/demo_ncnn/README.md

  make docker-humandetect-ncnn-nanodet-plus

Производительность

Наименование устройства FPS
Intel i5-1135 65
Repka-pi 3 3

Nanodet m на бекенде NCNN

Источник модели: https://github.com/Qengineering/NanoDet-ncnn-Raspberry-Pi-4

  make docker-humandetect-ncnn-nanodet

Производительность

Наименование устройства FPS
Intel i5-1135 120
Repka-pi 3 6

MediaPipe Pose

Источник модели: https://github.com/opencv/opencv_zoo/tree/main/models/person_detection_mediapipe

Эта модель определяет ключевые точки верхней части тела и всего тела человека и загружается с сайта https://github.com/PINTO0309/PINTO_model_zoo/blob/main/053_BlazePose/20_densify_pose_detection/download.sh или преобразовано из TFLite в ONNX, используя следующие инструменты:

Модель TFLite для ONNX с пользовательской опцией уплотнения MediaPipe: https://github.com/PINTO0309/tflite2tensorflow упрощено onnx-simplifier Якоря SSD генерируются из GenMediaPipePalmDectionSSDAnchors https://github.com/VimalMollyn/GenMediaPipePalmDectionSSDAnchors

  make docker-humandetect-mp

Производительность

Наименование устройства FPS
Intel i5-1135 50
Repka-pi 3 6

Yolo fastest v2 m на бекенде NCNN

Источник модели: https://github.com/dog-qiuqiu/Yolo-FastestV2

На основе сверхлегкого универсального алгоритма обнаружения целей yolo объем вычислений составляет всего 250 мфлопс, размер модели ncnn составляет всего 666 КБ, Raspberry Pi 3b может работать со скоростью до 15 кадров в секунду+

Различные веса потерь для разных выходных слоев масштаба. Основа заменена на более легкую shufflenetV2. Механизм сопоставления привязок и потери заменяются YoloV5, а потеря классификации заменяется перекрестной энтропией softmax из сигмоида.

  make docker-humandetect-ncnn-yolofastest-v2

Производительность

Наименование устройства FPS
Intel i5-1135 140
Repka-pi 3 10

PPHumanseg

Источник модели: https://github.com/opencv/opencv_zoo/tree/main/models/human_segmentation_pphumanseg

Задача сегментации для изображений людей.

Эта модель портирована из PaddleHub с использованием этого скрипта из OpenCV.

  make docker-humanseg

Производительность

Наименование устройства FPS
Intel i5-1135 48
Repka-pi 3 5

Результаты бенчмарков на фреймворке NCNN

Источник: https://github.com/Tencent/ncnn/blob/master/benchmark/README.md

Benchncnn можно использовать для проверки производительности вывода нейронной сети.

Требуются только файлы параметров сети (.param ncnn).

Двоичные файлы больших моделей (ncnn bin) не загружаются, а генерируются случайным образом для проверки скорости.

Если модель не указана, будет использован список по умолчанию. Дополнительные модели сетей могут быть добавлены позже.

Команда

Копируем все *.param из /ncnn/benchmark/ в /ncnn/build/benchmark/

./benchncnn [loop count] [num threads] [powersave] [gpu device] [cooling down] [(key=value)...]
  param=model.param
  shape=[227,227,3],..

Параметры

  • loop count - Кол-во повторений
  • num threads - Кол-во потоков
  • powersave - Параметр для энергосберегающих ядер (если есть)
  • gpu device - Выбор устройства
  • cooling down - Охлаждение
Параметр Значения По умолчанию
loop count 1~N 4
num threads 1~N max_cpu_count
powersave 0=all cores, 1=little cores only, 2=big cores only 0
gpu device -1=cpu-only, 0=gpu0, 1=gpu1 … -1
cooling down 0=disable, 1=enable 1
param ncnn model.param filepath -
shape model input shapes with, whc format -

Выполняем команду на запуск бенчмарка

cp /ncnn/benchmark/*.param /ncnn/build/benchmark/ ;\
cd /ncnn/build/benchmark ;\
./benchncnn 4 4 0 -1 1

Intel i5-1135

loop_count = 4
num_threads = 4
powersave = 0
gpu_device = -1
cooling_down = 1
          squeezenet  min =    5.59  max =    7.34  avg =    6.43
     squeezenet_int8  min =    6.59  max =    9.34  avg =    7.43
           mobilenet  min =    7.46  max =    8.82  avg =    7.94
      mobilenet_int8  min =    6.56  max =    8.09  avg =    7.13
        mobilenet_v2  min =    8.28  max =    8.91  avg =    8.53
        mobilenet_v3  min =    5.92  max =    7.42  avg =    6.44
          shufflenet  min =    4.04  max =    4.52  avg =    4.26
       shufflenet_v2  min =    4.11  max =    4.69  avg =    4.40
             mnasnet  min =    6.11  max =    6.19  avg =    6.15
     proxylessnasnet  min =    5.59  max =    8.35  avg =    6.58
     efficientnet_b0  min =    8.33  max =    9.30  avg =    8.65
   efficientnetv2_b0  min =   10.42  max =   14.00  avg =   11.72
        regnety_400m  min =   10.16  max =   10.83  avg =   10.40
           blazeface  min =    1.00  max =    1.13  avg =    1.06
           googlenet  min =   17.23  max =   20.18  avg =   18.23
      googlenet_int8  min =   13.66  max =   16.99  avg =   15.49
            resnet18  min =   20.75  max =   21.38  avg =   21.15
       resnet18_int8  min =   12.62  max =   12.99  avg =   12.83
             alexnet  min =   15.90  max =   16.97  avg =   16.34
               vgg16  min =  102.71  max =  105.85  avg =  104.34
          vgg16_int8  min =   77.57  max =   82.93  avg =   80.38
            resnet50  min =   42.14  max =   44.36  avg =   42.76
       resnet50_int8  min =   28.72  max =   37.81  avg =   32.65
      squeezenet_ssd  min =   20.03  max =   21.72  avg =   20.79
 squeezenet_ssd_int8  min =   18.77  max =   21.48  avg =   19.86
       mobilenet_ssd  min =   14.83  max =   19.97  avg =   16.74
  mobilenet_ssd_int8  min =    9.36  max =    9.71  avg =    9.59
      mobilenet_yolo  min =   36.56  max =   40.00  avg =   37.91
  mobilenetv2_yolov3  min =   24.87  max =   26.23  avg =   25.52
         yolov4-tiny  min =   46.84  max =   49.81  avg =   48.16
           nanodet_m  min =    9.77  max =   10.03  avg =    9.88
    yolo-fastest-1.1  min =    3.90  max =    4.12  avg =    4.04
      yolo-fastestv2  min =    4.39  max =    4.71  avg =    4.58
  vision_transformer  min =  261.02  max =  271.67  avg =  265.27
          FastestDet  min =    5.13  max =    6.70  avg =    6.03

Repka-pi 3 (1.X GHz x 4)

loop_count = 4
num_threads = 4
powersave = 0
gpu_device = -1
cooling_down = 1
          squeezenet  min =   76.24  max =  120.23  avg =   97.54
     squeezenet_int8  min =   63.45  max =   65.50  avg =   64.02
           mobilenet  min =  101.85  max =  102.03  avg =  101.94
      mobilenet_int8  min =   59.11  max =   59.45  avg =   59.25
        mobilenet_v2  min =   99.67  max =  100.27  avg =   99.88
        mobilenet_v3  min =   78.92  max =   79.71  avg =   79.20
          shufflenet  min =   54.33  max =   55.11  avg =   54.58
       shufflenet_v2  min =   42.43  max =   45.42  avg =   43.31
             mnasnet  min =   88.61  max =   92.87  avg =   89.85
     proxylessnasnet  min =   93.97  max =   95.53  avg =   94.73
     efficientnet_b0  min =  125.71  max =  129.26  avg =  126.85
   efficientnetv2_b0  min =  139.83  max =  141.40  avg =  140.73
        regnety_400m  min =  103.72  max =  147.50  avg =  117.06
           blazeface  min =   13.65  max =   13.92  avg =   13.79
           googlenet  min =  213.94  max =  217.71  avg =  215.13
      googlenet_int8  min =  167.84  max =  173.75  avg =  169.48
            resnet18  min =  257.77  max =  261.17  avg =  259.22
       resnet18_int8  min =  134.86  max =  135.66  avg =  135.27
             alexnet  min =  152.24  max =  153.27  avg =  152.87
               vgg16  min = 1037.71  max = 1063.01  avg = 1047.76
          vgg16_int8  min =  661.61  max =  713.52  avg =  688.23
            resnet50  min =  558.95  max =  603.01  avg =  570.88
       resnet50_int8  min =  355.93  max =  367.14  avg =  358.91
      squeezenet_ssd  min =  228.83  max =  231.76  avg =  230.74
 squeezenet_ssd_int8  min =  162.13  max =  203.04  avg =  172.51
       mobilenet_ssd  min =  224.50  max =  270.76  avg =  236.26
  mobilenet_ssd_int8  min =  125.41  max =  162.50  avg =  134.97
      mobilenet_yolo  min =  463.72  max =  508.83  avg =  478.34
  mobilenetv2_yolov3  min =  322.56  max =  325.75  avg =  323.61
         yolov4-tiny  min =  389.57  max =  398.84  avg =  393.23
           nanodet_m  min =  114.32  max =  115.73  avg =  115.03
    yolo-fastest-1.1  min =   73.63  max =   74.31  avg =   73.95
      yolo-fastestv2  min =   55.28  max =   57.77  avg =   56.04
  vision_transformer  min = 3687.04  max = 6926.74  avg = 4678.55
          FastestDet  min =   58.73  max =   60.93  avg =   59.37

Raspberry Pi 3 Model B+ Broadcom BCM2837B0, Cortex-A53 (ARMv8) (1.4GHz x 4)

pi@raspberrypi:~/ncnn/build/benchmark $ ./benchncnn 4 4 0 -1 1
loop_count = 4
num_threads = 4
powersave = 0
gpu_device = -1
cooling_down = 1
          squeezenet  min =   84.74  max =   85.60  avg =   85.22
     squeezenet_int8  min =   74.48  max =   74.80  avg =   74.68
           mobilenet  min =  107.84  max =  110.13  avg =  108.66
      mobilenet_int8  min =   66.91  max =   67.12  avg =   67.03
        mobilenet_v2  min =  110.64  max =  112.73  avg =  111.68
        mobilenet_v3  min =   85.78  max =   86.74  avg =   86.44
          shufflenet  min =   58.38  max =   60.32  avg =   59.33
       shufflenet_v2  min =   46.76  max =   47.53  avg =   47.19
             mnasnet  min =   95.53  max =   95.88  avg =   95.78
     proxylessnasnet  min =  102.24  max =  105.58  avg =  103.38
     efficientnet_b0  min =  134.87  max =  136.98  avg =  135.86
   efficientnetv2_b0  min =  146.62  max =  148.06  avg =  147.13
        regnety_400m  min =  118.60  max =  119.51  avg =  119.03
           blazeface  min =   15.42  max =   15.61  avg =   15.52
           googlenet  min =  223.78  max =  224.85  avg =  224.22
      googlenet_int8  min =  188.23  max =  190.15  avg =  189.21
            resnet18  min =  270.86  max =  272.66  avg =  271.93
       resnet18_int8  min =  159.57  max =  160.39  avg =  160.07
             alexnet  min =  157.79  max =  160.77  avg =  159.09
            resnet50  min =  583.57  max =  591.41  avg =  587.42
       resnet50_int8  min =  383.96  max =  401.37  avg =  391.87
      squeezenet_ssd  min =  247.90  max =  249.77  avg =  248.98
 squeezenet_ssd_int8  min =  191.65  max =  192.81  avg =  192.17
       mobilenet_ssd  min =  240.11  max =  241.02  avg =  240.62
  mobilenet_ssd_int8  min =  136.30  max =  137.26  avg =  136.73
      mobilenet_yolo  min =  523.59  max =  539.91  avg =  529.98
  mobilenetv2_yolov3  min =  356.44  max =  366.85  avg =  362.06
         yolov4-tiny  min =  410.25  max =  422.18  avg =  417.17
           nanodet_m  min =  114.98  max =  115.83  avg =  115.40
    yolo-fastest-1.1  min =   79.85  max =   80.83  avg =   80.28
      yolo-fastestv2  min =   62.36  max =   62.91  avg =   62.60
          FastestDet  min =   67.11  max =   68.51  avg =   67.98

Raspberry Pi 4 Model B Broadcom BCM2711B0, Cortex-A72 (ARMv8) (1.8GHz x 4)

pi@raspberrypi:~/ncnn/build/benchmark $ ./benchncnn 10 4 0 -1 1
loop_count = 10
num_threads = 4
powersave = 0
gpu_device = -1
cooling_down = 1
          squeezenet  min =   46.28  max =   46.91  avg =   46.65
     squeezenet_int8  min =   42.18  max =   44.98  avg =   42.59
           mobilenet  min =   60.74  max =   61.79  avg =   61.17
      mobilenet_int8  min =   34.19  max =   34.55  avg =   34.37
        mobilenet_v2  min =   61.63  max =   62.02  avg =   61.88
        mobilenet_v3  min =   47.08  max =   48.40  avg =   47.53
          shufflenet  min =   32.91  max =   33.30  avg =   33.09
       shufflenet_v2  min =   24.37  max =   24.73  avg =   24.56
             mnasnet  min =   51.80  max =   52.14  avg =   51.98
     proxylessnasnet  min =   53.02  max =   53.58  avg =   53.32
     efficientnet_b0  min =   73.92  max =   74.44  avg =   74.19
   efficientnetv2_b0  min =   79.10  max =   79.60  avg =   79.34
        regnety_400m  min =   65.27  max =   66.12  avg =   65.70
           blazeface  min =    8.62  max =    8.75  avg =    8.69
           googlenet  min =  113.74  max =  115.14  avg =  114.35
      googlenet_int8  min =  100.87  max =  101.71  avg =  101.25
            resnet18  min =  122.27  max =  125.39  avg =  123.12
       resnet18_int8  min =   82.19  max =   94.12  avg =   83.92
             alexnet  min =   75.75  max =   78.08  avg =   76.40
               vgg16  min =  541.66  max =  552.56  avg =  547.09
          vgg16_int8  min =  391.44  max =  395.73  avg =  394.23
            resnet50  min =  261.90  max =  263.91  avg =  262.83
       resnet50_int8  min =  195.60  max =  198.08  avg =  196.65
      squeezenet_ssd  min =  127.01  max =  129.85  avg =  127.61
 squeezenet_ssd_int8  min =  104.98  max =  107.67  avg =  105.47
       mobilenet_ssd  min =  120.43  max =  123.28  avg =  121.46
  mobilenet_ssd_int8  min =   70.70  max =   72.85  avg =   71.14
      mobilenet_yolo  min =  270.89  max =  273.42  avg =  272.33
  mobilenetv2_yolov3  min =  183.85  max =  185.73  avg =  184.88
         yolov4-tiny  min =  205.95  max =  209.90  avg =  207.22
           nanodet_m  min =   68.08  max =   68.69  avg =   68.38
    yolo-fastest-1.1  min =   47.97  max =   48.20  avg =   48.06
      yolo-fastestv2  min =   37.17  max =   37.69  avg =   37.47
  vision_transformer  min = 1872.31  max = 1964.95  avg = 1909.21
          FastestDet  min =   38.39  max =   39.17  avg =   38.69

Raspberry Pi 5 Broadcom BCM2712, Cortex-A76 (ARMv8) (2.4GHz x 4)

pi@raspberrypi:~/ncnn/benchmark $ ./benchncnn 10 4 0 -1 -1 >> text.out
loop_count = 10
num_threads = 4
powersave = 0
gpu_device = -1
cooling_down = 1
          squeezenet  min =    6.74  max =    8.16  avg =    7.38
     squeezenet_int8  min =    6.97  max =    7.67  avg =    7.21
           mobilenet  min =    9.00  max =   72.98  avg =   33.88
      mobilenet_int8  min =    8.68  max =    8.80  avg =    8.74
        mobilenet_v2  min =   10.46  max =   10.63  avg =   10.52
        mobilenet_v3  min =    7.30  max =    7.44  avg =    7.35
          shufflenet  min =    4.14  max =    4.18  avg =    4.16
       shufflenet_v2  min =    3.37  max =    3.41  avg =    3.39
             mnasnet  min =    6.83  max =    8.55  avg =    7.10
     proxylessnasnet  min =    7.85  max =    7.97  avg =    7.88
     efficientnet_b0  min =   12.28  max =   12.37  avg =   12.33
   efficientnetv2_b0  min =   13.54  max =   13.84  avg =   13.69
        regnety_400m  min =   10.93  max =   11.07  avg =   10.99
           blazeface  min =    1.45  max =    1.48  avg =    1.47
           googlenet  min =   25.13  max =   25.47  avg =   25.35
      googlenet_int8  min =   24.00  max =   24.23  avg =   24.12
            resnet18  min =   19.84  max =   20.19  avg =   19.96
       resnet18_int8  min =   16.68  max =   16.83  avg =   16.74
             alexnet  min =   21.21  max =   21.54  avg =   21.36
               vgg16  min =  127.75  max =  134.00  avg =  129.24
          vgg16_int8  min =  106.39  max =  110.66  avg =  107.01
            resnet50  min =   45.94  max =   46.54  avg =   46.21
       resnet50_int8  min =   40.16  max =   42.58  avg =   40.75
      squeezenet_ssd  min =   30.10  max =   30.95  avg =   30.37
 squeezenet_ssd_int8  min =   27.71  max =   29.03  avg =   28.15
       mobilenet_ssd  min =   24.16  max =   24.89  avg =   24.52
  mobilenet_ssd_int8  min =   21.79  max =   22.37  avg =   22.05
      mobilenet_yolo  min =   58.06  max =   58.45  avg =   58.19
  mobilenetv2_yolov3  min =   37.49  max =   37.94  avg =   37.68
         yolov4-tiny  min =   44.45  max =   60.58  avg =   46.29
           nanodet_m  min =   11.01  max =   11.28  avg =   11.18
    yolo-fastest-1.1  min =    5.53  max =    5.97  avg =    5.62
      yolo-fastestv2  min =    4.76  max =    4.84  avg =    4.80
  vision_transformer  min =  600.65  max =  622.47  avg =  611.65
          FastestDet  min =    4.83  max =    6.94  avg =    5.34

Raspberry Pi 5 Broadcom BCM2712, VideoCore VII Graphics (Vulkan 1.2)

fan@raspberrypi:~/ncnn/benchmark $ ../build/benchmark/benchncnn 10 $(nproc) 0 0
[0 V3D 7.1.7]  queueC=0[1]  queueG=0[1]  queueT=0[1]
[0 V3D 7.1.7]  bugsbn1=0  bugbilz=0  bugcopc=0  bugihfa=0
[0 V3D 7.1.7]  fp16-p/s/a=1/1/0  int8-p/s/a=1/1/0
[0 V3D 7.1.7]  subgroup=16  basic/vote/ballot/shuffle=1/0/0/0
[0 V3D 7.1.7]  fp16-matrix-16_8_8/16_8_16/16_16_16=0/0/0
[1 llvmpipe (LLVM 15.0.6, 128 bits)]  queueC=0[1]  queueG=0[1]  queueT=0[1]
[1 llvmpipe (LLVM 15.0.6, 128 bits)]  bugsbn1=0  bugbilz=0  bugcopc=0  bugihfa=0
[1 llvmpipe (LLVM 15.0.6, 128 bits)]  fp16-p/s/a=1/1/1  int8-p/s/a=1/1/1
[1 llvmpipe (LLVM 15.0.6, 128 bits)]  subgroup=4  basic/vote/ballot/shuffle=1/1/1/1
[1 llvmpipe (LLVM 15.0.6, 128 bits)]  fp16-matrix-16_8_8/16_8_16/16_16_16=0/0/0
loop_count = 10
num_threads = 4
powersave = 0
gpu_device = 0
cooling_down = 1
          squeezenet  min =  120.75  max =  121.31  avg =  120.94
     squeezenet_int8  min =    9.57  max =   24.49  avg =   11.23
           mobilenet  min =  160.32  max =  160.75  avg =  160.53
      mobilenet_int8  min =   11.29  max =   11.47  avg =   11.37
        mobilenet_v2  min =  121.05  max =  121.93  avg =  121.46
        mobilenet_v3  min =  117.90  max =  119.20  avg =  118.48
          shufflenet  min =   70.82  max =   71.55  avg =   71.04
       shufflenet_v2  min =   97.74  max =   98.58  avg =   98.00
             mnasnet  min =  118.21  max =  118.76  avg =  118.44
     proxylessnasnet  min =  124.28  max =  124.92  avg =  124.52
     efficientnet_b0  min =  187.48  max =  188.38  avg =  187.93
   efficientnetv2_b0  min =  270.11  max =  280.80  avg =  272.26
        regnety_400m  min =  142.14  max =  143.25  avg =  142.66
           blazeface  min =   31.97  max =   32.41  avg =   32.17
           googlenet  min =  346.30  max =  347.47  avg =  346.81
      googlenet_int8  min =   30.77  max =   32.26  avg =   31.52
            resnet18  min =  346.96  max =  347.50  avg =  347.26
       resnet18_int8  min =   19.95  max =   20.95  avg =   20.48
             alexnet  min =  181.57  max =  182.03  avg =  181.75
               vgg16  min = 1776.00  max = 1776.66  avg = 1776.40
          vgg16_int8  min =  134.10  max =  141.76  avg =  136.32
            resnet50  min =  841.90  max =  842.50  avg =  842.16
       resnet50_int8  min =   54.29  max =   55.22  avg =   54.54
      squeezenet_ssd  min =  461.71  max =  468.09  avg =  466.97
 squeezenet_ssd_int8  min =   38.05  max =   39.00  avg =   38.58
       mobilenet_ssd  min =  379.50  max =  381.66  avg =  380.14
  mobilenet_ssd_int8  min =   29.91  max =   30.77  avg =   30.13
      mobilenet_yolo  min =  753.61  max =  755.06  avg =  753.97
  mobilenetv2_yolov3  min =  382.18  max =  389.90  avg =  386.97
         yolov4-tiny  min =  673.87  max =  674.71  avg =  674.07
           nanodet_m  min =  206.55  max =  210.48  avg =  209.69
    yolo-fastest-1.1  min =  109.98  max =  111.18  avg =  110.45
      yolo-fastestv2  min =   86.07  max =   87.16  avg =   86.51
  vision_transformer  min = 20594.51  max = 20601.53  avg = 20596.59
          FastestDet  min =   90.25  max =   91.00  avg =   90.64

Raspberry Pi Zero 2 W Broadcom BCM2710A1, Cortex-A53 (ARMv8) (1.0GHz x 4)

loop_count = 8
num_threads = 4
powersave = 0
gpu_device = -1
cooling_down = 1
          squeezenet  min =  119.52  max =  120.29  avg =  119.93
     squeezenet_int8  min =   96.32  max =   96.96  avg =   96.55
           mobilenet  min =  162.60  max =  165.49  avg =  163.19
      mobilenet_int8  min =   90.78  max =   91.39  avg =   91.03
        mobilenet_v2  min =  145.71  max =  148.83  avg =  147.39
        mobilenet_v3  min =  113.89  max =  151.95  avg =  119.04
          shufflenet  min =   72.72  max =   73.27  avg =   72.96
       shufflenet_v2  min =   63.64  max =   64.50  avg =   64.13
             mnasnet  min =  126.07  max =  126.93  avg =  126.53
     proxylessnasnet  min =  139.90  max =  140.84  avg =  140.35
     efficientnet_b0  min =  201.88  max =  202.55  avg =  202.14
   efficientnetv2_b0  min =  227.22  max =  228.84  avg =  228.09
        regnety_400m  min =  156.49  max =  157.47  avg =  156.96
           blazeface  min =   22.79  max =   23.28  avg =   23.10
           googlenet  min =  323.74  max =  324.90  avg =  324.45
      googlenet_int8  min =  250.86  max =  252.82  avg =  251.63
            resnet18  min =  351.37  max =  355.67  avg =  353.45
       resnet18_int8  min =  194.83  max =  196.68  avg =  195.51
             alexnet  min =  271.18  max =  273.53  avg =  272.18
            resnet50  min =  777.44  max =  797.47  avg =  782.63
       resnet50_int8  min =  496.78  max =  498.86  avg =  497.57
      squeezenet_ssd  min =  376.10  max =  382.41  avg =  379.13
 squeezenet_ssd_int8  min =  255.99  max =  257.57  avg =  256.78
       mobilenet_ssd  min =  338.64  max =  339.93  avg =  339.50
  mobilenet_ssd_int8  min =  190.24  max =  190.68  avg =  190.48
      mobilenet_yolo  min =  746.83  max =  748.14  avg =  747.53
  mobilenetv2_yolov3  min =  487.99  max =  491.18  avg =  489.37
         yolov4-tiny  min =  644.73  max =  652.24  avg =  646.64
           nanodet_m  min =  165.27  max =  167.12  avg =  166.27
    yolo-fastest-1.1  min =   98.74  max =  100.02  avg =   99.17
      yolo-fastestv2  min =   80.52  max =   81.86  avg =   81.29
Конвейеры
0 успешных
0 с ошибкой