Skip to content
This repository was archived by the owner on Jul 22, 2026. It is now read-only.

Commit 9b00d8e

Browse files
committed
conf
2 parents 729f653 + 6ce38fd commit 9b00d8e

3 files changed

Lines changed: 267 additions & 9 deletions

File tree

.github/workflows/ci.yml

Lines changed: 250 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -300,24 +300,266 @@ jobs:
300300
ACCURACY=$(grep -oE '[0-9]+\.?[0-9]*%' accuracy.txt | head -1 || echo "0%")
301301
echo "$ACCURACY" > accuracy_value.txt
302302
303-
- name: Update README (master only)
304-
if: github.ref == 'refs/heads/master'
303+
- name: Update README (main only)
305304
run: |
306-
ACCURACY=$(cat accuracy_value.txt | sed 's/%//g')
305+
ACCURACY=$(sed 's/%//g' accuracy_value.txt)
306+
CURRENT_ACCURACY=$(sed -nE 's/.*<!--ACCURACY_PLACEHOLDER-->Accuracy: ([0-9]+(\.[0-9]+)?)% \(updated: [0-9-]+\)<!--END_ACCURACY-->.*/\1/p' README.md | head -n1)
307+
308+
if [ -n "$CURRENT_ACCURACY" ] && [ "$CURRENT_ACCURACY" = "$ACCURACY" ]; then
309+
echo "Accuracy unchanged; keeping existing README update date"
310+
exit 0
311+
fi
312+
307313
DATE=$(date '+%Y-%m-%d')
308-
sed -i "s/<!--ACCURACY_PLACEHOLDER-->.*<!--END_ACCURACY-->/<!--ACCURACY_PLACEHOLDER-->Accuracy: ${ACCURACY}% (updated: ${DATE})<!--END_ACCURACY-->/" README.md
314+
UPDATE_TEXT="<!--ACCURACY_PLACEHOLDER-->Accuracy: ${ACCURACY}% (updated: ${DATE})<!--END_ACCURACY-->"
315+
ESCAPED_UPDATE_TEXT=$(printf '%s\n' "$UPDATE_TEXT" | sed 's/[&|\\]/\\&/g')
316+
sed -i "s|<!--ACCURACY_PLACEHOLDER-->.*<!--END_ACCURACY-->|${ESCAPED_UPDATE_TEXT}|" README.md
309317
310-
- name: Commit and push changes (master only)
311-
if: github.ref == 'refs/heads/master'
318+
- name: Commit and push changes (main only)
319+
if: github.ref == 'refs/heads/main' && github.repository == 'embedded-dev-research/itlab_2023'
312320
run: |
313321
git config --global user.name "GitHub Actions"
314322
git config --global user.email "actions@github.com"
315323
git add README.md
316-
if git diff-index --quiet HEAD --; then
324+
if git diff --cached --quiet; then
317325
echo "No changes to commit"
318326
else
319327
git commit -m "[CI] Update accuracy: $(cat accuracy_value.txt)"
320-
git push origin master
328+
for attempt in 1 2 3 4 5; do
329+
git pull --rebase origin main && git push origin HEAD:main && break
330+
git rebase --abort || true
331+
[ "$attempt" -eq 5 ] && { echo "Failed to push README update after ${attempt} attempts"; exit 1; }
332+
sleep 5
333+
done
334+
fi
335+
336+
download-dataset:
337+
runs-on: ubuntu-latest
338+
steps:
339+
- uses: actions/checkout@v4
340+
- name: Cache ImageNet-Paste dataset
341+
id: cache-imagenet
342+
uses: actions/cache@v4
343+
with:
344+
path: docs/ImageNet
345+
key: imagenet-paste-v1
346+
restore-keys: |
347+
imagenet-paste-v1-
348+
imagenet-paste-
349+
350+
- name: Setup Python
351+
uses: actions/setup-python@v4
352+
with:
353+
python-version: '3.10'
354+
355+
- name: Install Python dependencies from requirements.txt
356+
run: |
357+
cd app/Converters
358+
pip install -r requirements.txt
359+
cd ../..
360+
361+
- name: Download ImageNet-Paste dataset
362+
if: steps.cache-imagenet.outputs.cache-hit != 'true'
363+
env:
364+
HF_TOKEN: ${{ secrets.HF_TOKEN }}
365+
run: |
366+
mkdir -p docs/ImageNet/test
367+
cd app/Converters
368+
python download_imagenet.py
369+
cd ../..
370+
- name: Save ImageNet-Paste dataset
371+
uses: actions/cache/save@v4
372+
with:
373+
path: docs/ImageNet
374+
key: imagenet-paste-v1
375+
376+
evaluate-models-onnx:
377+
runs-on: ubuntu-latest
378+
needs: [build-linux, download-dataset]
379+
permissions:
380+
contents: write
381+
strategy:
382+
fail-fast: false
383+
matrix:
384+
model: [googlenet, densenet, resnet, yolo]
385+
include:
386+
- model: googlenet
387+
parser: parser_onnx.py
388+
model_file: GoogLeNet.onnx
389+
model_path: docs/models/GoogLeNet.onnx
390+
model_url: ''
391+
extra_args: "--onednn 10000"
392+
- model: densenet
393+
parser: parser_onnx.py
394+
model_file: densenet121_Opset16.onnx
395+
model_url: https://github.com/onnx/models/raw/refs/heads/main/Computer_Vision/densenet121_Opset16_timm/densenet121_Opset16.onnx?download=
396+
extra_args: "--onednn 10000"
397+
- model: resnet
398+
parser: parser_onnx.py
399+
model_file: resnest101e_Opset16.onnx
400+
model_url: https://github.com/onnx/models/raw/refs/heads/main/Computer_Vision/resnest101e_Opset16_timm/resnest101e_Opset16.onnx?download=
401+
extra_args: "--onednn 10000"
402+
- model: yolo
403+
parser: parser_onnx.py
404+
model_file: yolo11x-cls.pt
405+
model_url: https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo11x-cls.pt
406+
extra_args: "--onednn 10000"
407+
408+
steps:
409+
- uses: actions/checkout@v4
410+
with:
411+
fetch-depth: 0
412+
413+
- name: Download binary and libs
414+
uses: actions/download-artifact@v4
415+
with:
416+
name: mnist-RELEASE
417+
path: build/
418+
419+
- name: Set binary path
420+
id: set_eval_binary
421+
run: |
422+
echo "EVAL_BINARY=build/bin/ACC" >> $GITHUB_OUTPUT
423+
424+
- name: Install system dependencies
425+
run: |
426+
sudo apt-get update
427+
sudo apt-get install -y libgtk-3-0 libtbb12 libjpeg-dev libpng-dev libtiff-dev libopenjp2-7 libdnnl3
428+
sudo ldconfig
429+
430+
- name: Download model (if URL provided)
431+
if: matrix.model_url != ''
432+
run: |
433+
mkdir -p docs/models
434+
wget -O docs/models/${{ matrix.model_file }} ${{ matrix.model_url }}
435+
436+
- name: Setup Python
437+
uses: actions/setup-python@v4
438+
with:
439+
python-version: '3.10'
440+
441+
- name: Install Python dependencies from requirements.txt
442+
run: |
443+
cd app/Converters
444+
pip install -r requirements.txt
445+
cd ../..
446+
447+
- name: Cache model JSON files
448+
id: cache-model-json
449+
uses: actions/cache@v4
450+
with:
451+
path: docs/jsons
452+
key: model-json-${{ matrix.model }}-${{ hashFiles('app/Converters/parser_onnx.py', 'app/Converters/requirements.txt') }}
453+
restore-keys: |
454+
model-json-${{ matrix.model }}-
455+
model-json-
456+
457+
- name: Generate model JSON
458+
if: steps.cache-model-json.outputs.cache-hit != 'true'
459+
run: |
460+
mkdir -p docs/jsons
461+
cd app/Converters
462+
python ${{ matrix.parser }} ${{ matrix.model }}
463+
cd ../..
464+
465+
- name: Restore ImageNet-Paste dataset
466+
id: cache-imagenet
467+
uses: actions/cache/restore@v4
468+
with:
469+
path: docs/ImageNet
470+
key: imagenet-paste-v1
471+
restore-keys: |
472+
imagenet-paste-v1-
473+
imagenet-paste-
474+
475+
- name: Prepare environment
476+
run: |
477+
chmod +x "${{ steps.set_eval_binary.outputs.EVAL_BINARY }}"
478+
echo "LD_LIBRARY_PATH=$PWD/build/bin/all_libs:/usr/lib/x86_64-linux-gnu" >> $GITHUB_ENV
479+
480+
- name: Run evaluation
481+
run: |
482+
DATASET_PATH="docs/ImageNet/test"
483+
MODEL="${{ matrix.model }}"
484+
EXTRA_ARGS="${{ matrix.extra_args }}"
485+
486+
"${{ steps.set_eval_binary.outputs.EVAL_BINARY }}" \
487+
--model $MODEL \
488+
$EXTRA_ARGS > accuracy_$MODEL.txt 2>&1
489+
490+
if [ $? -ne 0 ]; then
491+
echo "Ошибка при оценке модели $MODEL"
492+
cat accuracy_$MODEL.txt
493+
exit 1
494+
fi
495+
496+
echo "Результат оценки:"
497+
cat accuracy_$MODEL.txt
498+
499+
- name: Extract accuracy value
500+
run: |
501+
ACCURACY=$(grep -oE '[0-9]+\.?[0-9]*%' accuracy_${{ matrix.model }}.txt | head -1 || echo "0%")
502+
echo "$ACCURACY" > accuracy_value_${{ matrix.model }}.txt
503+
echo "Accuracy for ${{ matrix.model }}: $ACCURACY"
504+
505+
- name: Upload accuracy artifacts
506+
uses: actions/upload-artifact@v4
507+
with:
508+
name: accuracy-${{ matrix.model }}
509+
path: |
510+
accuracy_${{ matrix.model }}.txt
511+
accuracy_value_${{ matrix.model }}.txt
512+
513+
- name: Update README for model
514+
run: |
515+
TOP1_ACC=$(sed -nE 's/^Top-1 Accuracy: ([0-9]+(\.[0-9]+)?)%$/\1/p' accuracy_${{ matrix.model }}.txt | head -n1)
516+
TOP5_ACC=$(sed -nE 's/^Top-5 Accuracy: ([0-9]+(\.[0-9]+)?)%$/\1/p' accuracy_${{ matrix.model }}.txt | head -n1)
517+
518+
if [ -z "$TOP1_ACC" ] || [ -z "$TOP5_ACC" ]; then
519+
echo "Ошибка: Не удалось извлечь точность из файла accuracy_${{ matrix.model }}.txt"
520+
cat accuracy_${{ matrix.model }}.txt
521+
exit 1
522+
fi
523+
524+
CURRENT_TOP1=$(sed -nE "s/.*<!--ACCURACY_${{ matrix.model }}_PLACEHOLDER-->Accuracy: Top-1: ([0-9]+(\\.[0-9]+)?)% \\| Top-5: ([0-9]+(\\.[0-9]+)?)% \\(updated: [0-9-]+\\)<!--END_ACCURACY_${{ matrix.model }}-->.*/\\1/p" README.md | head -n1)
525+
CURRENT_TOP5=$(sed -nE "s/.*<!--ACCURACY_${{ matrix.model }}_PLACEHOLDER-->Accuracy: Top-1: ([0-9]+(\\.[0-9]+)?)% \\| Top-5: ([0-9]+(\\.[0-9]+)?)% \\(updated: [0-9-]+\\)<!--END_ACCURACY_${{ matrix.model }}-->.*/\\3/p" README.md | head -n1)
526+
527+
if [ -n "$CURRENT_TOP1" ] && [ -n "$CURRENT_TOP5" ] && \
528+
[ "$CURRENT_TOP1" = "$TOP1_ACC" ] && [ "$CURRENT_TOP5" = "$TOP5_ACC" ]; then
529+
echo "Accuracy for ${{ matrix.model }} unchanged; keeping existing README update date"
530+
exit 0
531+
fi
532+
533+
DATE=$(date '+%Y-%m-%d')
534+
535+
UPDATE_TEXT="<!--ACCURACY_${{ matrix.model }}_PLACEHOLDER-->Accuracy: Top-1: ${TOP1_ACC}% | Top-5: ${TOP5_ACC}% (updated: ${DATE})<!--END_ACCURACY_${{ matrix.model }}-->"
536+
ESCAPED_UPDATE_TEXT=$(printf '%s\n' "$UPDATE_TEXT" | sed 's/[&|\\]/\\&/g')
537+
538+
if grep -q "<!--ACCURACY_${{ matrix.model }}_PLACEHOLDER-->" README.md; then
539+
sed -i "s|<!--ACCURACY_${{ matrix.model }}_PLACEHOLDER-->.*<!--END_ACCURACY_${{ matrix.model }}-->|${ESCAPED_UPDATE_TEXT}|" README.md
540+
else
541+
echo "Ошибка: Плейсхолдер <!--ACCURACY_${{ matrix.model }}_PLACEHOLDER--> не найден в README.md"
542+
echo "Содержимое README.md:"
543+
cat README.md
544+
exit 1
545+
fi
546+
547+
- name: Commit and push changes (main only)
548+
if: github.ref == 'refs/heads/main' && github.repository == 'embedded-dev-research/ITLabAI'
549+
run: |
550+
git config --global user.name "GitHub Actions"
551+
git config --global user.email "actions@github.com"
552+
git add README.md
553+
if git diff --cached --quiet; then
554+
echo "No changes to commit"
555+
else
556+
git commit -m "[CI] Update accuracy for ${{ matrix.model }}: $(cat accuracy_value_${{ matrix.model }}.txt)"
557+
for attempt in 1 2 3 4 5; do
558+
git pull --rebase origin main && git push origin HEAD:main && break
559+
git rebase --abort || true
560+
[ "$attempt" -eq 5 ] && { echo "Failed to push README update after ${attempt} attempts"; exit 1; }
561+
sleep 5
562+
done
321563
fi
322564
323565
download-dataset:

README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
## Model Performance
66

77
### AlexNet-MNIST Accuracy
8+
<<<<<<< HEAD
89
<!--ACCURACY_PLACEHOLDER--><!--END_ACCURACY-->
910

1011
### GoogLeNet Accuracy
@@ -18,6 +19,21 @@
1819

1920
### YOLO Accuracy
2021
<!--ACCURACY_yolo_PLACEHOLDER--><!--END_ACCURACY_yolo-->
22+
=======
23+
<!--ACCURACY_PLACEHOLDER-->Accuracy: 98.01% (updated: 2026-04-02)<!--END_ACCURACY-->
24+
25+
### GoogLeNet Accuracy
26+
<!--ACCURACY_googlenet_PLACEHOLDER-->Accuracy: Top-1: 43.44% | Top-5: 69.29% (updated: 2026-04-08)<!--END_ACCURACY_googlenet-->
27+
28+
### DenseNet Accuracy
29+
<!--ACCURACY_densenet_PLACEHOLDER-->Accuracy: Top-1: 65.48% | Top-5: 86.69% (updated: 2026-04-10)<!--END_ACCURACY_densenet-->
30+
31+
### ResNet Accuracy
32+
<!--ACCURACY_resnet_PLACEHOLDER-->Accuracy: Top-1: 78.03% | Top-5: 94.03% (updated: 2026-04-09)<!--END_ACCURACY_resnet-->
33+
34+
### YOLO Accuracy
35+
<!--ACCURACY_yolo_PLACEHOLDER-->Accuracy: Top-1: 54.63% | Top-5: 78.43% (updated: 2026-04-10)<!--END_ACCURACY_yolo-->
36+
>>>>>>> origin/main
2137
2238
## Short description
2339
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.

app/Graph/acc_check.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ int main(int argc, char* argv[]) {
1616
std::string model_name = "alexnet_mnist";
1717
RuntimeOptions options;
1818
size_t num_photo = 1000;
19-
size_t batch_size = 250;
19+
size_t batch_size = 32;
2020

2121
for (int i = 1; i < argc; ++i) {
2222
if (std::string(argv[i]) == "--model" && i + 1 < argc) {

0 commit comments

Comments
 (0)