Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
e1f90af
numPhoto
Semyon1104 Feb 24, 2026
fe9785a
cl
Semyon1104 Feb 24, 2026
d76e10d
numPhoto
Semyon1104 Feb 24, 2026
25c23eb
--model in py_onnx
Semyon1104 Feb 24, 2026
93bbb72
load dataset
Semyon1104 Feb 24, 2026
6d562cf
reqs.txt
Semyon1104 Feb 24, 2026
2929f06
load dataset
Semyon1104 Feb 24, 2026
a4d1611
add onnx acc
Semyon1104 Feb 24, 2026
69c19fa
format
Semyon1104 Feb 27, 2026
a5838d9
format
Semyon1104 Feb 27, 2026
3f9fa39
googlenet
Semyon1104 Feb 27, 2026
a8409f1
Merge branch 'Semyon1104/Acc_Parametrized' of https://github.com/embe…
Semyon1104 Feb 27, 2026
5c4e528
reqs
Semyon1104 Feb 27, 2026
7b96923
cashe
Semyon1104 Feb 27, 2026
392ea50
Update ci.yml
Semyon1104 Feb 27, 2026
6c3b056
secret
Semyon1104 Feb 27, 2026
2554a45
usw token
Semyon1104 Feb 27, 2026
aab38cc
restore_keys
Semyon1104 Feb 28, 2026
978481f
Update ci.yml
Semyon1104 Mar 2, 2026
7748c55
restore-save
Semyon1104 Mar 2, 2026
c561374
debug
Semyon1104 Mar 3, 2026
4ff9e1d
check del
Semyon1104 Mar 3, 2026
9dc92bb
download to folders
Semyon1104 Mar 3, 2026
df7b5a7
cashe json and 10 for resnet
Semyon1104 Mar 4, 2026
7ff4e1b
debug
Semyon1104 Mar 4, 2026
5c93127
Update ci.yml
Semyon1104 Mar 4, 2026
b0924af
Update ci.yml
Semyon1104 Mar 4, 2026
73f3046
Update ci.yml
Semyon1104 Mar 6, 2026
20e4039
Merge branch 'main' into Semyon1104/Acc_Parametrized
Semyon1104 Mar 7, 2026
4e6a9bc
static
Semyon1104 Mar 7, 2026
4eb3771
cl
Semyon1104 Mar 7, 2026
040794f
batch 32 for accuracy
Semyon1104 Mar 11, 2026
d75a28d
fix batch 32
Semyon1104 Mar 11, 2026
510e764
one graph && batching
Semyon1104 Mar 11, 2026
aeeb3c6
clean
Semyon1104 Mar 11, 2026
dab3fdb
up to 1000
Semyon1104 Mar 11, 2026
2fe1f5a
batch32
Semyon1104 Mar 12, 2026
209921c
Merge branch 'Semyon1104/Acc_Parametrized' of https://github.com/embe…
Semyon1104 Mar 12, 2026
b235670
placeholders
Semyon1104 Mar 12, 2026
5440df4
Update ci.yml
Semyon1104 Mar 12, 2026
2d0c1f2
fix cashe
Semyon1104 Mar 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
284 changes: 283 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ jobs:
token: ${{ secrets.CODECOV_TOKEN }}
slug: embedded-dev-research/ITLabAI

evaluate-model:
evaluate-model-alexnet:
runs-on: ubuntu-latest
needs: [build-linux]
permissions:
Expand Down Expand Up @@ -319,3 +319,285 @@ jobs:
git commit -m "[CI] Update accuracy: $(cat accuracy_value.txt)"
git push origin master
fi

evaluate-models-onnx:
runs-on: ubuntu-latest
needs: [build-linux]
permissions:
contents: write
strategy:
fail-fast: false
matrix:
model: [googlenet, densenet, resnet, yolo]
include:
- model: googlenet
parser: parser_onnx.py
model_file: GoogLeNet.onnx
model_path: docs/models/GoogLeNet.onnx
model_url: ''
extra_args: "--onednn 10000"
- model: densenet
parser: parser_onnx.py
model_file: densenet121_Opset16.onnx
model_url: https://github.com/onnx/models/raw/refs/heads/main/Computer_Vision/densenet121_Opset16_timm/densenet121_Opset16.onnx?download=
extra_args: "--onednn 1000"
- model: resnet
parser: parser_onnx.py
model_file: resnest101e_Opset16.onnx
model_url: https://github.com/onnx/models/raw/refs/heads/main/Computer_Vision/resnest101e_Opset16_timm/resnest101e_Opset16.onnx?download=
extra_args: "--onednn 1000"
- model: yolo
parser: parser_onnx.py
model_file: yolo11x-cls.pt
model_url: https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo11x-cls.pt
extra_args: "--onednn 1000"

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Download binary and libs
uses: actions/download-artifact@v4
with:
name: mnist-RELEASE
path: build/

- name: Set binary path
id: set_eval_binary
run: |
echo "EVAL_BINARY=build/bin/ACC" >> $GITHUB_OUTPUT

- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y libgtk-3-0 libtbb12 libjpeg-dev libpng-dev libtiff-dev libopenjp2-7 libdnnl3
sudo ldconfig

- name: Download model (if URL provided)
if: matrix.model_url != ''
run: |
mkdir -p docs/models
echo "Скачивание ${{ matrix.model_file }} из ${{ matrix.model_url }}"
wget -O docs/models/${{ matrix.model_file }} ${{ matrix.model_url }}
ls -la docs/models/

- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.10'

- name: Install Python dependencies from requirements.txt
run: |
cd app/Converters
pip install -r requirements.txt
cd ../..

- name: Cache model JSON files
id: cache-model-json
uses: actions/cache@v4
with:
path: docs/jsons
key: model-json-${{ matrix.model }}-${{ hashFiles('app/Converters/parser_onnx.py', 'app/Converters/requirements.txt') }}
restore-keys: |
model-json-${{ matrix.model }}-
model-json-

- name: Generate model JSON
if: steps.cache-model-json.outputs.cache-hit != 'true'
run: |
mkdir -p docs/jsons
cd app/Converters
python ${{ matrix.parser }} ${{ matrix.model }}
cd ../..

- name: Cache ImageNet-Paste dataset
id: cache-imagenet-restore
uses: actions/cache/restore@v4
with:
path: docs/ImageNet
key: imagenet-paste-${{ github.run_id }}-${{ hashFiles('app/Converters/download_imagenet.py') }}
restore-keys: |
imagenet-paste-

- name: Download ImageNet-Paste dataset
if: steps.cache-imagenet-restore.outputs.cache-hit != 'true'
env:
HF_TOKEN: ${{ secrets.HF_TOKEN }}
run: |
mkdir -p docs/ImageNet/test
cd app/Converters
python download_imagenet.py
cd ../..

- name: Save ImageNet-Paste dataset
if: steps.cache-imagenet-restore.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: docs/ImageNet
key: imagenet-paste-v1-${{ hashFiles('app/Converters/download_imagenet.py') }}

- name: Prepare environment
run: |
chmod +x "${{ steps.set_eval_binary.outputs.EVAL_BINARY }}"
echo "LD_LIBRARY_PATH=$PWD/build/bin/all_libs:/usr/lib/x86_64-linux-gnu" >> $GITHUB_ENV

- name: Increase system limits
run: |
sudo prlimit --pid $$ --as=unlimited
ulimit -s unlimited
ulimit -c unlimited
echo "Новые лимиты:"
ulimit -a

- name: Run evaluation
run: |
DATASET_PATH="docs/ImageNet/test"
MODEL="${{ matrix.model }}"
EXTRA_ARGS="${{ matrix.extra_args }}"

echo "Запуск оценки для модели $MODEL"
echo "Команда: ${{ steps.set_eval_binary.outputs.EVAL_BINARY }} --model $MODEL $EXTRA_ARGS"

echo "Системная информация до запуска:"
echo "--- Память ---"
free -h
echo "--- CPU ---"
top -bn1 | head -5
echo "--- Диск ---"
df -h docs/ImageNet/test/

TIMESTAMP=$(date +%s)
MONITOR_LOG="monitor_$MODEL.log"

monitor_process() {
local pid=$1
local log_file=$2

echo "Мониторинг процесса $pid..."

while kill -0 $pid 2>/dev/null; do
NOW=$(date '+%H:%M:%S')

MEM=$(ps -o rss= -p $pid 2>/dev/null | awk '{print $1/1024 " MB"}' || echo "N/A")

CPU=$(ps -o pcpu= -p $pid 2>/dev/null || echo "N/A")

TOTAL_MEM=$(free -m | awk 'NR==2{print $3 " MB / " $2 " MB"}')

echo "[$NOW] PID: $pid | MEM: $MEM | CPU: $CPU% | System MEM: $TOTAL_MEM" >> $log_file

sleep 2
done

echo "Процесс $pid завершен" >> $log_file
}

echo "Запуск ACC в фоновом режиме..."
"${{ steps.set_eval_binary.outputs.EVAL_BINARY }}" \
--model $MODEL \
$EXTRA_ARGS > accuracy_$MODEL.txt 2>&1 &
ACC_PID=$!

echo "PID процесса: $ACC_PID"

monitor_process $ACC_PID $MONITOR_LOG &
MONITOR_PID=$!

wait $ACC_PID
EXIT_CODE=$?

kill $MONITOR_PID 2>/dev/null || true

echo "Результаты мониторинга:"
if [ -f "$MONITOR_LOG" ]; then
cat "$MONITOR_LOG"
else
echo "Лог мониторинга не создан"
fi

echo "Системная информация после запуска:"
free -h

echo "Код завершения: $EXIT_CODE"

if [ $EXIT_CODE -eq 143 ]; then
echo "Ошибка 143 (SIGTERM) - процесс убит системой"

if sudo dmesg | tail -20 | grep -i "killed process" | grep -q "$ACC_PID"; then
echo "Подтверждено: процесс убит OOM Killer"
sudo dmesg | tail -20 | grep -i "killed process" | tail -5
else
echo "Не найдено подтверждение OOM Killer в логах"
sudo dmesg | tail -20
fi

elif [ $EXIT_CODE -ne 0 ]; then
echo "Ошибка при оценке модели $MODEL (код: $EXIT_CODE)"
else
echo "Оценка успешно завершена"
fi

echo "Лог ACC:"
if [ -f "accuracy_$MODEL.txt" ]; then
cat "accuracy_$MODEL.txt"
else
echo "Файл лога не создан"
fi

# Выход с ошибкой если нужно
if [ $EXIT_CODE -ne 0 ]; then
exit $EXIT_CODE
fi

- name: Extract accuracy value
run: |
ACCURACY=$(grep -oE '[0-9]+\.?[0-9]*%' accuracy_${{ matrix.model }}.txt | head -1 || echo "0%")
echo "$ACCURACY" > accuracy_value_${{ matrix.model }}.txt
echo "Accuracy for ${{ matrix.model }}: $ACCURACY"

- name: Upload accuracy artifacts
uses: actions/upload-artifact@v4
with:
name: accuracy-${{ matrix.model }}
path: |
accuracy_${{ matrix.model }}.txt
accuracy_value_${{ matrix.model }}.txt

- name: Update README for model (master only)
if: github.ref == 'refs/heads/master'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Our main branch is called main this code will not be run whatsoever

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

run: |
TOP1_ACC=$(grep -oE 'Top-1 Accuracy: [0-9]+\.?[0-9]*%' accuracy_${{ matrix.model }}.txt | grep -oE '[0-9]+\.?[0-9]*')
TOP5_ACC=$(grep -oE 'Top-5 Accuracy: [0-9]+\.?[0-9]*%' accuracy_${{ matrix.model }}.txt | grep -oE '[0-9]+\.?[0-9]*')
DATE=$(date '+%Y-%m-%d')

if [ -z "$TOP1_ACC" ] || [ -z "$TOP5_ACC" ]; then
echo "Ошибка: Не удалось извлечь точность из файла accuracy_${{ matrix.model }}.txt"
cat accuracy_${{ matrix.model }}.txt
exit 1
fi

UPDATE_TEXT="<!--ACCURACY_${{ matrix.model }}_PLACEHOLDER-->Accuracy: Top-1: ${TOP1_ACC}% | Top-5: ${TOP5_ACC}% (updated: ${DATE})<!--END_ACCURACY_${{ matrix.model }}-->"

if grep -q "<!--ACCURACY_${{ matrix.model }}_PLACEHOLDER-->" README.md; then
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we update README in that regard? Since we have more model and only one placeholder as of now

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

sed -i "s|<!--ACCURACY_${{ matrix.model }}_PLACEHOLDER-->.*<!--END_ACCURACY_${{ matrix.model }}-->|${UPDATE_TEXT}|" README.md
echo "Обновлена точность для ${{ matrix.model }} в README"
else
echo "Ошибка: Плейсхолдер <!--ACCURACY_${{ matrix.model }}_PLACEHOLDER--> не найден в README.md"
echo "Содержимое README.md:"
cat README.md
exit 1
fi
Comment on lines +585 to +590
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is better to report an error if we didn't find something

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed


- name: Commit and push changes (main only)
if: github.ref == 'refs/heads/main'
run: |
git config --global user.name "GitHub Actions"
git config --global user.email "actions@github.com"
git add README.md
if git diff-index --quiet HEAD --; then
echo "No changes to commit"
else
git commit -m "[CI] Update accuracy for ${{ matrix.model }}: $(cat accuracy_value_${{ matrix.model }}.txt)"
git push origin master
fi
16 changes: 15 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,21 @@
# AlexNet-MNIST-Inference
## Model Performance

<!--ACCURACY_PLACEHOLDER-->Accuracy: Stat: 98.01% (updated: 2025-04-28)<!--END_ACCURACY-->
### AlexNet-MNIST Accuracy
<!--ACCURACY_PLACEHOLDER--><!--END_ACCURACY-->

### GoogLeNet Accuracy
<!--ACCURACY_googlenet_PLACEHOLDER--><!--END_ACCURACY_googlenet-->

### DenseNet Accuracy
<!--ACCURACY_densenet_PLACEHOLDER--><!--END_ACCURACY_densenet-->

### ResNet Accuracy
<!--ACCURACY_resnet_PLACEHOLDER--><!--END_ACCURACY_resnet-->

### YOLO Accuracy
<!--ACCURACY_yolo_PLACEHOLDER--><!--END_ACCURACY_yolo-->

## Short description
A lightweight C++ library for performing high-performance inference on classification tasks. Designed for efficiency and educational purposes, this project demonstrates how classic CNNs can be optimized for small-scale tasks in native environments.
### Key Features:
Expand Down
Loading
Loading