# tflite-model-training **Repository Path**: bittrue/tflite-model-training ## Basic Information - **Project Name**: tflite-model-training - **Description**: Tensorflow lite 模型训练服务端 - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2025-08-16 - **Last Updated**: 2025-12-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TensorFlow Lite 模型训练服务端 ## 项目概述 基于Flask的TensorFlow Lite模型训练服务端,支持多客户端上传数据、在线标注、模型训练和下载服务。采用Few-shot Learning技术,使用SSD MobileNet V2架构进行对象检测模型训练。 ## 技术栈 ### 服务端 - **后端框架**: Flask 2.3+ - **数据库**: SQLite 3 - **深度学习**: TensorFlow 2.5+ - **模型架构**: SSD MobileNet V2 FPN-Lite - **文件处理**: Pillow, OpenCV - **任务队列**: Celery + Redis - **资源调度**: APScheduler + psutil - **监控告警**: Prometheus + Grafana (可选) - **WEB框架**: Bootstrap v5.3 ### 客户端 - **移动平台**: Android 8.0+ (API Level 26+) - **开发语言**: Kotlin/Java - **网络请求**: Retrofit + OkHttp - **图像处理**: CameraX, Glide - **TensorFlow Lite**: 运行时推理 - **UI框架**: Material Design Components ## 系统架构 ``` ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ Android客户端A │ │ Android客户端B │ │ Android客户端C │ │ (移动应用) │ │ (移动应用) │ │ (移动应用) │ └─────────┬───────┘ └─────────┬───────┘ └─────────┬───────┘ │ │ │ └──────────────────────┼──────────────────────┘ │ ┌─────────────▼─────────────┐ │ Flask Web服务 │ │ (认证/上传/下载/管理) │ └─────────────┬─────────────┘ │ ┌─────────────▼─────────────┐ │ SQLite数据库 │ │ (用户/项目/标注/模型) │ └─────────────┬─────────────┘ │ ┌──────────────────────┼──────────────────────┐ │ │ │ ┌─────────▼─────────┐ ┌─────────▼─────────┐ ┌─────────▼─────────┐ │ 图片标注模块 │ │ 模型训练模块 │ │ 模型管理模块 │ │ (LabelImg集成) │ │ (TensorFlow) │ │ (TFLite转换) │ └───────────────────┘ └───────────────────┘ └───────────────────┘ ``` ## 功能模块设计 ### 1. 用户管理模块 - 用户注册/登录 - 用户权限管理 - 用户项目隔离 ### 2. 项目管理模块 - 创建/删除项目 - 项目状态跟踪 - 项目配置管理 ### 3. 数据上传模块 - 批量图片上传 - 图片格式验证 - 存储空间管理 ### 4. 图片标注模块 - 集成LabelImg工具 - 在线标注界面 - 标注数据验证 ### 5. 数据集划分模块 - 训练/验证/测试集划分 - 数据增强配置 - 数据集统计信息 ### 6. 模型训练模块 - TensorFlow模型训练 - 训练进度监控 - 模型性能评估 ### 7. 模型转换模块 - TensorFlow Lite转换 - 模型优化配置 - 模型文件管理 ### 8. 模型下载模块 - 模型文件下载 - 使用说明文档 - 模型版本管理 ### 9. 资源调度模块 - 硬件资源监控 - 训练任务队列管理 - 多项目并发训练调度 ## 模块文档 ### 核心模块 - **[Models模块](models/README.md)** - 模型生命周期管理、配置管理、评估指标和TFLite转换 - **[Services模块](services/README.md)** - 业务逻辑层,包括训练服务、项目服务、认证服务等 - **[Utils模块](utils/README.md)** - 工具模块,提供数据库管理、文件操作、图像处理等通用功能 - **[Data模块](data/README.md)** - 数据层,负责数据库管理、数据存储和数据结构定义 ### 前端模块 - **[Templates模块](templates/README.md)** - 前端模板模块,基于Flask Jinja2提供Web界面 ### 测试模块 - **[Tests模块](tests/README.md)** - 测试文档,包含单元测试、集成测试和功能测试 - **[模型实现文档](tests/MODEL_IMPLEMENTATION.md)** - 模型模块的详细实现说明 - 资源分配策略 ## 项目目录结构 ``` tflite-model-training/ ├── app.py # Flask主应用 ├── config.py # 配置文件 ├── requirements.txt # 依赖包列表 ├── run.py # 启动脚本 ├── static/ # 静态资源 │ ├── css/main.css # 主样式文件 │ ├── js/main.js # 主JavaScript文件 │ ├── images/ # 图片资源目录 │ └── uploads/ # 上传文件目录 ├── templates/ # HTML模板 │ ├── base.html # 基础模板 │ ├── login.html # 登录页面 │ ├── dashboard.html # 仪表板页面 │ ├── projects/list.html # 项目列表页面 │ ├── annotation/editor.html # 标注编辑器页面 │ ├── training/monitor.html # 训练监控页面 │ └── models/list.html # 模型列表页面 ├── models/ # 数据模型 │ ├── __init__.py # 模型包初始化 │ ├── user.py # 用户模型 │ ├── project.py # 项目模型 │ ├── annotation.py # 标注数据模型 │ └── model.py # 训练模型模型 ├── services/ # 业务逻辑层 │ ├── __init__.py # 服务包初始化 │ ├── auth_service.py # 认证服务 │ ├── project_service.py # 项目管理服务 │ ├── annotation_service.py # 标注服务 │ ├── training_service.py # 训练服务 │ ├── model_service.py # 模型管理服务 │ └── scheduler_service.py # 资源调度服务 ├── utils/ # 工具函数 │ ├── __init__.py # 工具包初始化 │ ├── database.py # 数据库工具 │ ├── file_utils.py # 文件处理工具 │ ├── image_utils.py # 图像处理工具 │ ├── tf_utils.py # TensorFlow工具 │ └── resource_monitor.py # 资源监控工具 ├── ml/ # 机器学习模块 │ ├── __init__.py # ML包初始化 │ ├── data_preparation.py # 数据预处理 │ ├── model_builder.py # 模型构建 │ ├── trainer.py # 模型训练器 │ ├── converter.py # 模型转换器 │ ├── evaluator.py # 模型评估器 │ └── training_scheduler.py # 训练调度器 ├── data/ # 数据存储 │ ├── projects/ # 项目数据目录 │ └── shared/ # 共享资源 │ ├── pretrained_models/ # 预训练模型 │ └── configs/ # 配置文件 ├── logs/ # 日志文件 │ ├── app.log # 应用日志 │ ├── training.log # 训练日志 │ └── error.log # 错误日志 └── tests/ # 测试文件 ├── __init__.py # 测试包初始化 ├── test_auth.py # 认证测试 ├── test_project.py # 项目测试 └── test_training.py # 训练测试 ``` ## 数据库设计 ### 用户表 (users) ```sql CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username VARCHAR(50) UNIQUE NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, password_hash VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` ### 项目表 (projects) ```sql CREATE TABLE projects ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, name VARCHAR(100) NOT NULL, description TEXT, status VARCHAR(20) DEFAULT 'created', -- created, annotating, training, completed, failed config TEXT, -- JSON格式的配置信息 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) ); ``` ### 标注数据表 (annotations) ```sql CREATE TABLE annotations ( id INTEGER PRIMARY KEY AUTOINCREMENT, project_id INTEGER NOT NULL, image_name VARCHAR(255) NOT NULL, image_path VARCHAR(500) NOT NULL, annotation_data TEXT, -- JSON格式的标注数据 is_annotated BOOLEAN DEFAULT FALSE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (project_id) REFERENCES projects(id) ); ``` ### 训练模型表 (trained_models) ```sql CREATE TABLE trained_models ( id INTEGER PRIMARY KEY AUTOINCREMENT, project_id INTEGER NOT NULL, model_name VARCHAR(100) NOT NULL, model_path VARCHAR(500) NOT NULL, tflite_path VARCHAR(500), model_type VARCHAR(50) DEFAULT 'ssd_mobilenet_v2', accuracy REAL, training_time INTEGER, -- 训练时间(秒) model_size INTEGER, -- 模型大小(字节) status VARCHAR(20) DEFAULT 'training', -- training, completed, failed created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (project_id) REFERENCES projects(id) ); ``` ### 训练任务表 (training_tasks) ```sql CREATE TABLE training_tasks ( id INTEGER PRIMARY KEY AUTOINCREMENT, project_id INTEGER NOT NULL, model_id INTEGER, task_name VARCHAR(100) NOT NULL, priority INTEGER DEFAULT 5, -- 1-10, 1最高优先级 status VARCHAR(20) DEFAULT 'pending', -- pending, running, completed, failed, cancelled resource_requirements TEXT, -- JSON格式的资源需求 allocated_resources TEXT, -- JSON格式的分配资源 estimated_duration INTEGER, -- 预估训练时间(分钟) actual_start_time TIMESTAMP, actual_end_time TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (project_id) REFERENCES projects(id), FOREIGN KEY (model_id) REFERENCES trained_models(id) ); ``` ### 系统资源表 (system_resources) ```sql CREATE TABLE system_resources ( id INTEGER PRIMARY KEY AUTOINCREMENT, resource_type VARCHAR(50) NOT NULL, -- cpu, gpu, memory, storage resource_name VARCHAR(100) NOT NULL, total_capacity REAL NOT NULL, available_capacity REAL NOT NULL, unit VARCHAR(20) NOT NULL, -- cores, GB, MB, etc. status VARCHAR(20) DEFAULT 'available', -- available, busy, offline last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` ## API接口设计 ### 认证接口 - `POST /api/auth/register` - 用户注册 - `POST /api/auth/login` - 用户登录 - `POST /api/auth/logout` - 用户登出 ### 项目管理接口 - `GET /api/projects` - 获取项目列表 - `POST /api/projects` - 创建新项目 - `GET /api/projects/` - 获取项目详情 - `PUT /api/projects/` - 更新项目信息 - `DELETE /api/projects/` - 删除项目 ### 数据上传接口 - `POST /api/projects//upload` - 上传图片数据 - `GET /api/projects//images` - 获取项目图片列表 ### 标注接口 - `GET /api/projects//annotations` - 获取标注数据 - `POST /api/projects//annotations` - 保存标注数据 - `GET /api/projects//annotation/` - 获取单张图片标注 ### 训练接口 - `POST /api/projects//train` - 开始模型训练 - `GET /api/projects//training/status` - 获取训练状态 - `GET /api/projects//training/logs` - 获取训练日志 - `POST /api/projects//training/cancel` - 取消训练任务 - `PUT /api/projects//training/priority` - 调整训练优先级 ### 资源管理接口 - `GET /api/system/resources` - 获取系统资源状态 - `GET /api/system/tasks` - 获取训练任务队列 - `POST /api/system/tasks/reorder` - 重新排序任务队列 - `GET /api/system/performance` - 获取系统性能指标 ### 模型管理接口 - `GET /api/projects//models` - 获取模型列表 - `GET /api/projects//models//download` - 下载模型 - `DELETE /api/projects//models/` - 删除模型 ### Android客户端专用接口 - `POST /api/auth/mobile/login` - 移动端登录 - `POST /api/projects//upload/mobile` - 移动端图片上传 - `GET /api/projects//status/mobile` - 获取项目状态(移动端优化) - `GET /api/models//info` - 获取模型信息(包含使用说明) - `POST /api/models//download/verify` - 验证模型下载权限 ## 资源调度与并发训练设计 ### 硬件资源管理 #### 1. 资源监控 - **CPU监控**: 核心数、使用率、温度 - **GPU监控**: 显存使用、计算能力、温度 - **内存监控**: 总内存、可用内存、交换空间 - **存储监控**: 磁盘空间、IO性能 - **网络监控**: 带宽使用、延迟 #### 2. 资源分配策略 ```python # 资源需求评估 resource_requirements = { "cpu_cores": 4, # 需要的CPU核心数 "gpu_memory": 8, # 需要的GPU显存(GB) "ram": 16, # 需要的内存(GB) "storage": 10, # 需要的存储空间(GB) "estimated_time": 120 # 预估训练时间(分钟) } # 资源分配算法 def allocate_resources(task_requirements, available_resources): """ 基于优先级和资源可用性的分配算法 - 优先级高的任务优先分配 - 资源冲突时进行排队 - 支持资源抢占和恢复 """ ``` ### 多项目并发训练 #### 1. 训练任务队列 - **优先级队列**: 基于用户等级、项目紧急程度 - **资源队列**: 按资源需求分组排队 - **时间队列**: 按提交时间顺序排队 #### 2. 并发控制策略 ```python # 并发训练配置 concurrent_training_config = { "max_concurrent_tasks": 3, # 最大并发训练数 "gpu_memory_threshold": 0.8, # GPU显存使用阈值 "cpu_usage_threshold": 0.9, # CPU使用率阈值 "memory_threshold": 0.85, # 内存使用阈值 "task_timeout": 7200 # 任务超时时间(秒) } ``` #### 3. 任务调度算法 - **FIFO调度**: 先进先出,适合公平性要求 - **优先级调度**: 基于任务优先级,适合VIP用户 - **资源感知调度**: 根据资源利用率动态调整 - **混合调度**: 结合多种策略的智能调度 ### 训练流程设计 #### 1. 任务提交阶段 1. 用户提交训练请求 2. 系统评估资源需求 3. 检查资源可用性 4. 分配任务优先级 5. 加入训练队列 #### 2. 任务调度阶段 1. 调度器检查队列 2. 评估当前资源状态 3. 选择下一个执行任务 4. 分配具体资源 5. 启动训练进程 #### 3. 训练执行阶段 1. 加载预训练SSD MobileNet V2模型 2. 配置训练参数和优化器 3. 执行Few-shot Learning训练 4. 实时监控训练进度和资源使用 5. 记录训练日志和性能指标 #### 4. 任务完成阶段 1. 保存训练结果 2. 释放分配的资源 3. 更新任务状态 4. 通知用户训练完成 5. 调度下一个任务 #### 5. 模型转换阶段 1. 导出TensorFlow SavedModel 2. 转换为TensorFlow Lite格式 3. 模型量化和优化 4. 生成模型使用文档 #### 6. 模型部署阶段 1. 模型文件存储和管理 2. 生成下载链接 3. 提供使用示例代码 ## 安全设计 ### 1. 用户认证 - 密码加密存储 (bcrypt) - Session管理 - CSRF保护 ### 2. 文件安全 - 文件类型验证 - 文件大小限制 - 路径遍历防护 ### 3. 数据隔离 - 用户数据隔离 - 项目权限控制 - 数据库访问控制 ## 性能优化 ### 1. 文件处理 - 异步文件上传 - 图片压缩和缓存 - 分块上传大文件 ### 2. 训练优化 - 后台异步训练 - 训练进度缓存 - 模型文件压缩 - 多进程训练支持 - GPU内存优化 ### 3. 数据库优化 - 索引优化 - 连接池管理 - 查询优化 ### 4. 资源调度优化 - 智能任务排队 - 动态资源分配 - 负载均衡 - 故障恢复机制 ## 系统监控与告警 ### 1. 实时监控指标 - **硬件资源**: CPU、GPU、内存、存储使用率 - **训练任务**: 队列长度、执行时间、成功率 - **系统性能**: 响应时间、吞吐量、错误率 - **用户行为**: 活跃用户数、API调用频率 ### 2. 告警机制 ```python # 告警配置 alert_config = { "gpu_memory_usage": 0.9, # GPU显存使用率超过90% "cpu_usage": 0.95, # CPU使用率超过95% "memory_usage": 0.9, # 内存使用率超过90% "disk_usage": 0.85, # 磁盘使用率超过85% "queue_length": 10, # 任务队列长度超过10 "task_timeout": 7200 # 任务超时时间(秒) } ``` ### 3. 监控面板 - **资源监控面板**: 实时显示硬件资源状态 - **任务监控面板**: 显示训练任务队列和执行状态 - **性能监控面板**: 系统性能指标和历史趋势 - **用户监控面板**: 用户活动和资源使用统计 ## 部署说明 ### 环境要求 - Python 3.8+ - TensorFlow 2.5+ - CUDA 11.2+ (GPU训练) - 8GB+ RAM - 50GB+ 存储空间 ### 安装步骤 1. 克隆项目代码 2. 安装Python依赖 3. 配置环境变量 4. 初始化数据库 5. 启动Flask服务 ### 配置说明 - 数据库连接配置 - 文件存储路径配置 - 训练参数配置 - 安全配置 ## 使用说明 ### Android客户端使用流程 1. 下载并安装Android应用 2. 注册/登录账户 3. 创建新项目 4. 拍照或从相册选择训练图片 5. 上传图片到服务端 6. 在Web端进行图片标注(或使用标注工具) 7. 配置训练参数 8. 开始模型训练 9. 下载训练完成的TFLite模型 10. 在Android应用中集成模型进行实时推理 ### Web管理端使用流程 1. 通过Web浏览器访问管理界面 2. 登录管理员账户 3. 管理用户和项目 4. 进行图片标注工作 5. 监控训练进度 6. 管理模型文件 ### 管理员功能 1. 用户管理 2. 系统监控 3. 资源管理 4. 日志查看 ## 开发计划 ### Phase 1: 基础框架 (1-2周) - Flask应用框架搭建 - 数据库设计和实现 - 用户认证系统 - 基础UI界面 ### Phase 2: 核心功能 (2-3周) - 文件上传管理 - 图片标注功能 - 数据集处理 - 模型训练集成 ### Phase 3: 高级功能 (1-2周) - TensorFlow Lite转换 - 模型管理功能 - 性能优化 - 安全加固 ### Phase 4: 测试部署 (1周) - 功能测试 - 性能测试 - 文档完善 - 生产部署 ## 贡献指南 1. Fork 本仓库 2. 新建功能分支 3. 提交代码 4. 创建 Pull Request ## 许可证 MIT License ## 联系方式 - 项目维护者: [您的姓名] - 邮箱: [您的邮箱] - 项目地址: [项目URL]