Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Flower Classifier Django (MVP)

Структура

hapima/
├── app/
│   ├── templates/app/upload.html
│   ├── admin.py
│   ├── forms.py
│   ├── models.py
│   ├── urls.py
│   └── views.py
├── ml/
│   ├── model.py
│   ├── predict.py
│   └── flower_model.pth   <- сюда положить веса
├── project/
│   ├── settings.py
│   ├── urls.py
│   ├── asgi.py
│   └── wsgi.py
├── static/css/styles.css
├── templates/base.html
├── media/
├── manage.py
└── requirements.txt

Куда класть обученную модель

Положите файл весов в путь:

ml/flower_model.pth

Если путь отличается, поменяйте константу MODEL_WEIGHTS_PATH в ml/model.py.

Где взять ml/flower_model.pth

Есть 3 рабочих варианта:

  1. Взять готовые веса из вашего обучения (самый правильный путь).
    • Если вы обучали модель в Jupyter/Colab, сохраните state dict:
torch.save(model.state_dict(), "flower_model.pth")
  • Скопируйте файл в проект: ml/flower_model.pth.
  1. Скачать готовые веса из вашего репозитория/облака.

    • Часто веса хранят в Releases GitHub, Google Drive, Яндекс.Диск или S3.
    • После скачивания просто переименуйте файл в flower_model.pth и положите в папку ml/.
  2. Быстро дообучить на датасете Flowers-5/Flowers-102 и сохранить веса.

    • Важно: архитектура при обучении должна совпадать с ml/model.py (ResNet18 + ваш num_classes).
    • После обучения сохраните только state_dict в ml/flower_model.pth.

Проверка совместимости весов

Веса должны быть сохранены как state_dict для модели ResNet18 с такой же последней fc-головой (число классов = длина FLOWER_CLASSES). Если классов другое количество, обновите список FLOWER_CLASSES и переобучите/пересохраните веса.

Запуск в PyCharm

  1. Откройте папку проекта в PyCharm.
  2. Создайте виртуальное окружение Python 3.10+.
  3. Установите зависимости:
pip install -r requirements.txt
  1. Выполните миграции:
python manage.py makemigrations
python manage.py migrate
  1. Запустите сервер:
python manage.py runserver
  1. Откройте http://127.0.0.1:8000/ и загрузите изображение цветка.

Авторизация

  • Теперь загрузка изображения доступна только авторизованным пользователям.
  • Регистрация: http://127.0.0.1:8000/signup/
  • Вход: http://127.0.0.1:8000/accounts/login/
  • Выход доступен кнопкой в верхней панели интерфейса.

Поток работы

  1. На главной странице загрузите картинку.
  2. Нажмите «Готово».
  3. Django передаст изображение в LangGraph-пайплайн из ml/flower_pipeline.py.
  4. Первый узел запускает модель из ml/flower_model.pth и определяет цветок.
  5. Второй узел добавляет названия на русском, английском и латыни.
  6. Третий узел добавляет краткое описание цветка.
  7. Четвёртый узел проверяет уверенность модели и формирует подсказку для пользователя.
  8. Django сохраняет файл и результат в media/uploads/, после чего показывает расширенный ответ на странице.

Частая ошибка: size mismatch для fc.weight / fc.bias

Если видите ошибку вида:

size mismatch for fc.weight: ... [1000, 512] ... expected [5, 512]

значит вы подложили веса от ImageNet-модели (1000 классов) или от модели с другим числом классов.

Что делать:

  1. Использовать веса именно вашей обученной flower-модели, где число классов совпадает с FLOWER_CLASSES.
  2. Либо привести FLOWER_CLASSES к реальному числу классов модели и переобучить/пересохранить чекпойнт.
  3. Убедиться, что сохраняете state_dict после замены финального слоя на нужное число классов.

Теперь приложение покажет понятную ошибку на странице вместо падения Django.

Частая ошибка: no such table: app_uploadedflowerimage

Это означает, что миграции не были применены к базе данных SQLite.

Выполните в терминале из корня проекта:

python manage.py makemigrations
python manage.py migrate

После этого перезапустите сервер:

python manage.py runserver

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages