Skip to content
This repository was archived by the owner on Aug 29, 2024. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
c686d76
Обновил задание 3 для 2023 года
Dimassio Mar 12, 2023
dff5945
Поменял дедлайн
Dimassio Mar 12, 2023
e5938f3
Merge pull request #4 from abbyy-edu/task3_2023update
zimka Mar 12, 2023
00f181e
Update readme
egiby Mar 14, 2023
7e0c2f7
update grader version
egiby Mar 14, 2023
f74b83d
Merge branch 'main' of github.com:abbyy-edu/course_ocr
egiby Mar 14, 2023
f9d3730
add and test lmdb reader
egiby Mar 29, 2023
337fa6d
new data and deadline
egiby Mar 30, 2023
a6fd4c8
update deadline for hw2 once again
egiby Apr 8, 2023
a46a3da
Call pip for the default python explicitly
zimka Apr 23, 2023
fae6da4
Update setuptools
zimka Apr 23, 2023
0577adb
Install ocr_task1 in non-dev mode
zimka Apr 23, 2023
a367cda
Dowgraed pip
zimka Apr 23, 2023
885a75a
Fix broken github actions (#6)
zimka Apr 24, 2023
e7ac29a
Поправил баг при подсчете результата, добавил информацию о дедлайне (#7)
Dimassio Apr 24, 2023
f9a1520
Поправил ссылку на датасет
Apr 25, 2023
856208a
Merge pull request #9 from abbyy-edu/task3_datalink
zimka Apr 25, 2023
8a50758
Fix README
zimka Mar 4, 2024
0fda05a
Merge pull request #10 from a4-edu/bzimka/fix
zimka Mar 4, 2024
0f44104
Обновил задание на 2024 год
Dimassio Mar 25, 2024
db5c711
Merge pull request #11 from a4-edu/task3_update
zimka Mar 25, 2024
b77a0bc
Update README.md
zimka Mar 25, 2024
4cc2404
Update README and data_reader
egiby Apr 2, 2024
68929a7
Update metric evaluation
egiby Apr 2, 2024
f45d4c2
Update baseline
egiby Apr 2, 2024
220a01d
Fix README a bit
egiby Apr 2, 2024
cb2de86
Fix an old copypaste
egiby Apr 3, 2024
902a3ed
Merge pull request #12 from a4-edu/task2_update2024
egiby Apr 3, 2024
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
12 changes: 6 additions & 6 deletions .github/workflows/compute_task1_score.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ jobs:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8 pytest numpy
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
python -m pip install pip
python -m pip install flake8 pytest numpy
if [ -f requirements.txt ]; then python -m pip install -r requirements.txt; fi
- name: Install task1 package
run: |
pip install -e task1/
- name: COMPUTE SCORE
python -m pip install -e task1/
- name: Compute task1 score
run: |
python -m course_ocr_t1.metrics ${{ github.actor }}
python -m course_ocr_t1.metrics ${{ github.actor }}
6 changes: 3 additions & 3 deletions .github/workflows/compute_task2_score.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ jobs:
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8 pytest numpy
python -m pip install flake8 pytest numpy
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Install task2 package
run: |
pip install -e task2/
- name: COMPUTE SCORE
python -m pip install -e task2/
- name: Compute task2 score
run: |
python -m course_ocr_t2.evaluate ${{ github.actor }}
6 changes: 3 additions & 3 deletions .github/workflows/compute_task3_score.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ jobs:
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8 pytest numpy shapely
python -m pip install flake8 pytest numpy shapely
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Install task3 package
run: |
pip install -e task3/
- name: COMPUTE SCORE
python -m pip install -e task3/
- name: Compute task3 score
run: |
python -m course_ocr_t3.evaluate ${{ github.actor }}
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Курс ABBYY "Автоматическая обработка и распознавание документов"
# Курс кафедры А4 МФТИ "Автоматическая обработка и распознавание документов"

Репозиторий содержит материалы домашних заданий для студентов. Детальные описания заданий смотрите в README соответствующих разделов.

8 changes: 4 additions & 4 deletions task1/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
## Задача
Реализовать какой-либо алгоритм кропа с использованием нейросетей, обучить и протестировать его на публичном датасете [MIDV-500](https://github.com/fcakyon/midv500).

Можно либо скачать полноразмерную версию датасета по официальной инструкции пакета (\~70Gb), либо [скачать](https://disk.yandex.ru/d/dibfy51-opgACw) сжатую версию датасета(`max(w,h)=800pix`, \~7Gb).
Можно либо скачать полноразмерную версию датасета по официальной инструкции пакета (\~70Gb), либо [скачать](https://disk.yandex.ru/d/8ZxmzGCbgfe5OQ) сжатую версию датасета(`max(w,h)=800pix`, \~7Gb).

## Метрика
Для каждого примера датасета **из test сплита** вам необходимо предсказать четырехугольник документа (смотрите пример baseline).
Expand Down Expand Up @@ -46,9 +46,9 @@ GroundTruth четырехугольники сохранены в `task1/gt_qua


## Сроки
При выполнении дз в период \[21.02.2023-14.03.2023\] засчитывается полный набранный балл в соответствии с критериями.
При выполнении дз в период \[04.03.2024-31.03.2024\] засчитывается полный набранный балл в соответствии с критериями.

Далее за каждую неделю позже срока (с округлением вверх): -5b
Например:
- 15.03.2023: -5b
- 29.03.2023: -15b
- 01.04.2024: -5b
- 15.04.2024: -15b
25 changes: 25 additions & 0 deletions task1/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
[build-system]
build-backend = "flit_core.buildapi"
requires = ["flit_core >=3.8.0,<4"]

[project]
name = "course_ocr_t1"
version = "0.1.1"
authors = [
{name = "Boris Zimka", email = "zimka@phystech.edu"},
]
description = "Task1 for OCR course."
requires-python = ">=3.7"
classifiers = [
'Development Status :: 3 - Alpha',
'Intended Audience :: End Users/Desktop',
'Intended Audience :: Science/Research',
'Operating System :: OS Independent',
'Programming Language :: Python :: 3 :: Only',
'Topic :: Scientific/Engineering'
]
dependencies = [
"numpy",
"matplotlib",
"shapely"
]
26 changes: 0 additions & 26 deletions task1/setup.py

This file was deleted.

508 changes: 83 additions & 425 deletions task2/Baseline.ipynb

Large diffs are not rendered by default.

37 changes: 22 additions & 15 deletions task2/README.md
Original file line number Diff line number Diff line change
@@ -1,41 +1,48 @@
# Задание 2: распознавание рукописных китайских иероглифов
# Задание 2: распознавание номеров автомобилей

## Описание

Предлагается реализовать и протестировать обучаемое распознавание символов на примере датасета `CASIA Offline Chinese Handwriting`
Предлагается реализовать и протестировать end-to-end модель распознавания на примере датасета [CCPD](https://github.com/detectRecog/CCPD) (Towards End-to-End License Plate Detection and Recognition: A Large Dataset and Baseline)

Данные можно взять [тут](https://drive.google.com/drive/folders/13hx2EY658ebmyOvkmfBPTcyNNeUZfIQt?usp=sharing), от оригинальных отличаются переводом формата из бинарного в архив с .png изображениями. Лицензию на использование данных можно посмотреть на [официальном сайте](http://www.nlpr.ia.ac.cn/databases/handwriting/Application_form.html)
Данные можно взять [тут](https://disk.yandex.ru/d/66ZlIo_zarluNA), автомобильные номера вырезаны по разметке и приведены к размеру 64x172

## Задача

Реализовать алгоритм распознавания китайских рукописных символов и протестировать его на данной тестовой выборке. Можно использовать как идеи с лекции, так и любые другие способы, которые покажутся вам уместными.
Реализовать алгоритм распознавания китайских автомобильных номеров и протестировать его на данной тестовой выборке. Можно использовать как идеи с лекции, так и любые другие способы, которые покажутся вам уместными

### Условия

- Разрешается использовать готовые реализации стандартных и нестандарных слоев или лоссов
- Разрешается использование дополнительных синтетических данных при обучении (псевдорукописные шрифты и прочее), однако способ их получения должен быть описан в решении
- Разрешается использование дополнительных синтетических данных при обучении, однако способ их получения должен быть описан в решении
- Разрешается модифицировать ОБУЧАЮЩУЮ выборку любым способом, аугментации приветствуются. Тестовую выборку использовать кроме как для тестирования запрещено
- Запрещено использовать любые другие датасеты, а также альтернативные сплиты casia hwdb (в них часть тестовой выборки может оказаться в вашей обучающей)
- Запрещено использовать любые другие датасеты, а также альтернативные сплиты CCPD

## Метрика

Accuracy по результатам на тестовой выборке. Код для сохранения результата и локального вычисления метрики можно найти в `Baseline.ipynb`
Character accuracy по результатам на тестовой выборке

Для работы автоматического подсчета метрики в github actions нужно закоммитить файл pred.txt в свой репозиторий. Если github actions не включены - включите их в `https://github.com/{USERNAME}/course_ocr/actions`
$$CharAccuracy = (1 - CER) * 100\% $$
$$CER = \frac{\sum_0^n edit\_distance(pred_i, gtruth_i)}{\sum_0^n len(gtruth_i)}$$

Для работы автоматического подсчета метрики в github actions нужно закоммитить файл pred.txt в свой репозиторий. Пример заполнения pred.txt и работы с кодом чтения датасета см. в `Baseline.ipynb`

Если github actions не включены - включите их в `https://github.com/{USERNAME}/course_ocr/actions`

## Оценка

За домашнюю работу можно получить 0-100%, плюс некоторый бонус за высокую метрику. Чтобы решение было зачтено, весь код (модели, скрипты, ноутбуки) для воспроизведения результатов должен быть в вашем репозитории

### Критерии

1. Обучена и сдана какая-то отличная от baseline модель, успешно посчиталась метрика через gitlab actions: +30%
2. Качество модели на тесте не ниже `Baseline.ipynb` (80%+): +20%
3. Модель использует ArcFace либо другой специальный лосс, дающий существенно разделимые образы классов: +20%
4. Качество модели на тесте не ниже 86%: +10%
5. Качество модели на тесте не ниже 90%: +20%
6. За каждый процент выше 90 - бонус +5% (91 - бонус 5%, 93 - бонус суммарно 15% и тд)
1. Обучено и сдано какое-то решение, успешно посчиталась метрика через gitlab actions, качество выше 50%: +30%
2. Метрика на тесте не ниже 80% И в решении используется end-to-end подход: +20%
3. Метрика на тесте не ниже 90%: +10%
4. Метрика на тесте не ниже 92%: +10%
5. Метрика на тесте не ниже 93%: +10%
6. Метрика на тесте не ниже 94%: +10%
7. Метрика на тесте не ниже 95%: +10%
8. За каждый процент выше 95 - бонус +5% (96 - бонус 5%, и тд)

## Дедлайн

Дедлайн - 19.04.2022, не включительно. При сдаче после этого срока все баллы за задание уменьшаются в два раза
Дедлайн - 01.05.2024, включительно. При сдаче после этого срока все баллы за задание уменьшаются в два раза
20 changes: 11 additions & 9 deletions task2/course_ocr_t2/evaluate.py
Original file line number Diff line number Diff line change
@@ -1,29 +1,31 @@
from pathlib import Path
import editdistance

def evaluate(gt_path, pred_path):
gt = dict()
with open(gt_path) as gt_f:
for line in gt_f:
name, cls = line.strip().split()
gt[name] = cls
name, gtruth = line.strip().split()
gt[name] = gtruth

n_good = 0
n_all = len(gt)
ed_sum = 0
len_sum = 0
with open(pred_path) as pred_f:
for line in pred_f:
name, cls = line.strip().split()
if cls == gt[name]:
n_good += 1
name, pred = line.strip().split()
ed = editdistance.eval(pred, gt[name])
ed_sum += ed
len_sum += len(gtruth)

return n_good / n_all
return 1 - ed_sum / len_sum


def _run_evaluation():
base = Path(__file__).absolute().parent.parent
gt_path = base / 'gt.txt'
pred_path = base / 'pred.txt'
score = evaluate(gt_path, pred_path)
print('Accuracy = {:1.4f}'.format(score))
print('Char Accuracy = {:1.4f}'.format(score * 100))


if __name__ == '__main__':
Expand Down
Loading