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.
Есть 3 рабочих варианта:
- Взять готовые веса из вашего обучения (самый правильный путь).
- Если вы обучали модель в Jupyter/Colab, сохраните state dict:
torch.save(model.state_dict(), "flower_model.pth")- Скопируйте файл в проект:
ml/flower_model.pth.
-
Скачать готовые веса из вашего репозитория/облака.
- Часто веса хранят в Releases GitHub, Google Drive, Яндекс.Диск или S3.
- После скачивания просто переименуйте файл в
flower_model.pthи положите в папкуml/.
-
Быстро дообучить на датасете 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.
- Создайте виртуальное окружение Python 3.10+.
- Установите зависимости:
pip install -r requirements.txt- Выполните миграции:
python manage.py makemigrations
python manage.py migrate- Запустите сервер:
python manage.py runserver- Откройте
http://127.0.0.1:8000/и загрузите изображение цветка.
- Теперь загрузка изображения доступна только авторизованным пользователям.
- Регистрация:
http://127.0.0.1:8000/signup/ - Вход:
http://127.0.0.1:8000/accounts/login/ - Выход доступен кнопкой в верхней панели интерфейса.
- На главной странице загрузите картинку.
- Нажмите «Готово».
- Django передаст изображение в LangGraph-пайплайн из
ml/flower_pipeline.py. - Первый узел запускает модель из
ml/flower_model.pthи определяет цветок. - Второй узел добавляет названия на русском, английском и латыни.
- Третий узел добавляет краткое описание цветка.
- Четвёртый узел проверяет уверенность модели и формирует подсказку для пользователя.
- Django сохраняет файл и результат в
media/uploads/, после чего показывает расширенный ответ на странице.
Если видите ошибку вида:
size mismatch for fc.weight: ... [1000, 512] ... expected [5, 512]
значит вы подложили веса от ImageNet-модели (1000 классов) или от модели с другим числом классов.
Что делать:
- Использовать веса именно вашей обученной flower-модели, где число классов совпадает с
FLOWER_CLASSES. - Либо привести
FLOWER_CLASSESк реальному числу классов модели и переобучить/пересохранить чекпойнт. - Убедиться, что сохраняете
state_dictпосле замены финального слоя на нужное число классов.
Теперь приложение покажет понятную ошибку на странице вместо падения Django.
Это означает, что миграции не были применены к базе данных SQLite.
Выполните в терминале из корня проекта:
python manage.py makemigrations
python manage.py migrateПосле этого перезапустите сервер:
python manage.py runserver