{"id":13443060,"url":"https://github.com/vseasky/yolo-for-k210","last_synced_at":"2025-03-20T15:33:31.827Z","repository":{"id":37641779,"uuid":"277329257","full_name":"vseasky/yolo-for-k210","owner":"vseasky","description":"Yolo-for-k210","archived":false,"fork":false,"pushed_at":"2023-09-05T06:32:04.000Z","size":111334,"stargazers_count":159,"open_issues_count":4,"forks_count":72,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-05-22T07:52:12.028Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vseasky.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2020-07-05T15:25:58.000Z","updated_at":"2024-05-14T16:59:37.000Z","dependencies_parsed_at":"2024-01-14T12:28:17.761Z","dependency_job_id":null,"html_url":"https://github.com/vseasky/yolo-for-k210","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vseasky%2Fyolo-for-k210","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vseasky%2Fyolo-for-k210/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vseasky%2Fyolo-for-k210/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vseasky%2Fyolo-for-k210/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vseasky","download_url":"https://codeload.github.com/vseasky/yolo-for-k210/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244640439,"owners_count":20486041,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T03:01:55.479Z","updated_at":"2025-03-20T15:33:30.402Z","avatar_url":"https://github.com/vseasky.png","language":"Python","funding_links":[],"categories":["Python","Lighter and Deployment Frameworks","Applications"],"sub_categories":[],"readme":"# Yolo-for-k210\n\n[vseasky/yolo-for-k210](https://github.com/vseasky/yolo-for-k210)\n\n## 教程\n\n[riscv-k210](https://docs.liuwei.vin/notes/riscv-k210/)\n\n\n## 环境配置\n\n1. 常规版本\n\n- windows\n- python3.7\n- tensorflow-gpu1.15\n- cuda10.0\n- cudnn7.4.2\n- 其它扩展你可以使用 `pip3 install -r requirements.txt` 命令添加。\n\n2. 30显卡系列\n\n- windows-wsl-ubuntu20.04\n- python3.8.16\n- tensorflow-gpu1.15.5\n\t- `nvidia-pyindex`\n\t- `nvidia-tensorflow[horovod]`\n\t- `nvidia-tensorboard==1.15`\n- cuda11.1\n- cudnn8.6\n- 其它扩展你可以使用 `pip3 install -r requirements.txt` 命令添加。\n- nvidia 为兼容最新的显卡驱动舍弃了对lite的支持，因此要想使用toco工具，可尝试安装tf2版本提供模型转换工具。\n\n## 准备数据集\n\n1. 推荐使用**Vott**工具对数据集进行标注，导出为**PascalVoc**格式。\n2. 案例 **VOC** 数据集存储于 `/train-image/VOCdevkit`，你可以修改为自定义数据集路径为 `/train-image/your_img`。 \n\n\t[数据集结构](/train-image/readme.md)\n\n![readme.png](./readme-image/63ec954ed5aba.png)\n\n3. 运行`make-train.py`脚本，会按照7:2:1的比例，分配为训练集、验证集、测试集文件(pscalvoc.txt、train.txt、val.txt、test.txt)，同时会自动检测并删除不成对的多余文件。\n\n- Win平台手动下载并合并数据集。\n- Linux平台下载数据集。\n\n```bash\ncd ./train-image\nwget https://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar\nwget https://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar\nwget https://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar\n# 解压文件\ntar xf VOCtrainval_11-May-2012.tar\ntar xf VOCtrainval_06-Nov-2007.tar\ntar xf VOCtest_06-Nov-2007.tar\n# 合并数据集\ncd VOCdevkit/\nmv ./VOC2007/* ./\ncp -r ./VOC2012/* ./\nrm -rf VOC2007\nrm -rf VOC2012\n```\n\n- 分配数据集。\n\n```\n# 使用VOC数据集\npython make-train.py ./VOCdevkit\n```\n\n```bash\n# 使用自定义数据集\npython make-train.py ./your_img\n```\n\n4. 数据集预处理 `voc_label.py`。\n\n- 修改 `voc_label.py`。\n\n![image.png](./readme-image/63ec984640c4d.png)\n\n```bash\n# 使用VOC数据集\npython voc_label.py\ncat  VOCdevkit_train.txt VOCdevkit_val.txt\u003e train.txt   #Linux使用此命令\n# type VOCdevkit_train.txt VOCdevkit_val.txt\u003e train.txt\t#windowns使用此命令\n```\n\n```bash\n# 使用自定义数据集\npython voc_label.py\ncat  your_img_train.txt your_img_val.txt\u003e train.txt     #Linux使用此命令\n# type your_img_train.txt your_img_val.txt\u003e train.txt\t#windowns使用此命令\n```\n\n6. 检查 txt 文件内容是否正确，文件内容为图片路径。\n\n7. 将 **JPEGImages** 路径和 **Annotations** 合并到一个NPY 文件中。\n\n```bash\npython make_voc_list.py train.txt data/voc_img_ann.npy\n```\n\n![image.png](./readme-image/63ecf92e580ec.png)\n\n## 修改配置文件\n\n你可以直接在 **Makefile** 编辑默认配置，又或者在 make 操作时传入参数。\n\n![image.png](./readme-image/63ecbfc2c866c.png)\n\n## 生成 **Anchors**\n\n加载**Annotations**生成 **Anchors** (LOW 和 HIGH 视数据集的分布而定)：\n\n```bash\n# make anchors # 使用默认参数\nmake anchors DATASET=voc ANCNUM=3 LOW=\"0.0 0.0\" HIGH=\"1.0 1.0\" # 更改自定义参数\n```\n\n当你成功的时候，你会看到这样以下内容：\n\n![Figure_2.png](./readme-image/63ecc18bda042.png)\n\n![image.png](./readme-image/63ecf9b31ba7a.png)\n\n注：结果是随机的。当你有错误时，就重新运行它。\n\n如果要使用自定义数据集，只需修改脚本并生成 `data/{your_img}_img_ann.npy`，然后使用 `make anchors DATASET=your_img`。更多选项请参见 `python ./make_anchor_list.py -h`\n\n如果要更改输出层的数目，则应修改 OUTSIZE 在 Makefile\n\n## 下载预训练模型\n\n你必须下载您想要训练的模型权重，因为默认情况下会加载训练前的权重。把文件放进./data 目录。\n\n\n| `MODEL`       | `DEPTHMUL` | Url                                                                                | Url                                        |\n| ------------- | ---------- | ---------------------------------------------------------------------------------- | ------------------------------------------ |\n| yolo_mobilev1 | 0.5        | [google drive](https://drive.google.com/open?id=1SmuqIU1uCLRgaePve9HgCj-SvXJB7U-I) | [weiyun](https://share.weiyun.com/59nnvtW) |\n| yolo_mobilev1 | 0.75       | [google drive](https://drive.google.com/open?id=1BlH6va_plAEUnWBER6vij_Q_Gp8TFFaP) | [weiyun](https://share.weiyun.com/5FgNE0b) |\n| yolo_mobilev1 | 1.0        | [google drive](https://drive.google.com/open?id=1vIuylSVshJ47aJV3gmoYyqxQ5Rz9FAkA) | [weiyun](https://share.weiyun.com/516LqR7) |\n| yolo_mobilev2 | 0.5        | [google drive](https://drive.google.com/open?id=1qjpexl4dZLMtd0dX3QtoIHxXtidj993N) | [weiyun](https://share.weiyun.com/5BwaRTu) |\n| yolo_mobilev2 | 0.75       | [google drive](https://drive.google.com/open?id=1qSM5iQDicscSg0MYfZfiIEFGkc3Xtlt1) | [weiyun](https://share.weiyun.com/5RRMwob) |\n| yolo_mobilev2 | 1.0        | [google drive](https://drive.google.com/open?id=1Qms1BMVtT8DcXvBUFBTgTBtVxQc9r4BQ) | [weiyun](https://share.weiyun.com/5dUelqn) |\n| tiny_yolo     |            | [google drive](https://drive.google.com/open?id=1M1ZUAFJ93WzDaHOtaa8MX015HdoE85LM) | [weiyun](https://share.weiyun.com/5413QWx) |\n| yolo          |            | [google drive](https://drive.google.com/open?id=17eGV6DCaFQhVoxOuTUiwi7-v22DAwbXf) | [weiyun](https://share.weiyun.com/55g6zHl) |\n\n## 训练\n\n使用 Mobileenet 时，需要指定 DEPTHMUL 参数。 使用 tiny yolo 或 yolo 你不需要设定 DEPTHMUL.\n\n1.  设置并开始训练：MODE-LDEPTHMUL\n\n```bash\nmake train MODEL=yolo_mobilev1 DEPTHMUL=0.75 MAXEP=10 ILR=0.001 DATASET=voc CLSNUM=20 IAA=False BATCH=16\n```\n\n![image.png](./readme-image/63ecfa0b97ee4.png)\n\n\t使用 Ctrl+C 停止训练，它将自动在日志目录中保存权重和模型。\n\n2.  设置为继续训练：CKPT\n\n```bash\nmake train MODEL=yolo_mobilev1 DEPTHMUL=0.75 MAXEP=10 ILR=0.0005 DATASET=voc CLSNUM=20 IAA=False BATCH=16 CKPT=log/xxxxxxxxx/yolo_model.h5\n```\n\n\n3.  设置为启用数据增强：IAA\n\n```bash\nmake train MODEL=xxxx DEPTHMUL=xx MAXEP=10 ILR=0.0001 DATASET=voc CLSNUM=20 IAA=True BATCH=16 CKPT=log/xxxxxxxxx/yolo_model.h5\n```\n\n4.  使用 tensorboard:\n\n```bash\ntensorboard --logdir log\n```\n\n注意：更多选项请参阅与`python ./keras_train.py -h`\n\n## 推理\n\n1. 使用自己训练的模型\n\n```bash\nmake inference MODEL=yolo_mobilev1 DEPTHMUL=0.75 CLSNUM=20 CKPT=log/xxxxxx/yolo_model.h5 IMG=data/input/people.jpg\n```\n\n2. 你可以尝试我的模型：\n\n```bash\nmake inference MODEL=yolo_mobilev1 DEPTHMUL=0.75 CKPT=asset/yolo_model.h5 IMG=data/input/people.jpg\n```\n\n![people.png](./readme-image/63ef49b2dc633.png)\n\n\n```bash\nmake inference MODEL=yolo_mobilev1 DEPTHMUL=0.75 CKPT=asset/yolo_model.h5 IMG=data/input/dog.jpg\n```\n\n![dog_res.jpg](./readme-image/63ef49ea40b66.jpg)\n\n\n注：由于 anchors 是随机生成的，如果您的结果与上面的图像不同，你只需要加载这个模型并继续训练一段时间。\n\n更多选项请参见`python ./keras_inference.py -h`\n\n## 修剪模型\n\n```bash\nmake train MODEL=xxxx MAXEP=1 ILR=0.001 DATASET=voc CLSNUM=20 BATCH=16 PRUNE=True CKPT=log/xxxxxx/yolo_model.h5 END_EPOCH=1\n```\n\n训练结束时，将模型保存为 log/xxxxxx/yolo_prune_model.h5.\n\n## Freeze\n\n```bash\ntoco --output_file data/tflite/mobile_yolo.tflite --keras_model_file log/xxxxxx/yolo_model.h5\n```\n\n现在你有了 mobile_yolo.tflite\n\n## 转换 Kmodel\n\n请参考  \u003ca href=\"https://github.com/kendryte/nncase/releases/tag/v0.1.0-rc5\"\u003e`nncase v0.1.0-RC5 example`\u003c/a\u003e\n\n1. [NNCase Converter v0.1.0 RC5](https://github.com/kendryte/nncase/releases/tag/v0.1.0-rc5)\n\n```bash\n./nncase/0.1.0/ncc --version\n./nncase/0.1.0/ncc data/tflite/mobile_yolo.tflite mobile_yolo_v3.kmodel -i tflite -o k210model --dataset nncase-images\n```\n\n## 将 Kmodel 部署到 K210\n\n这是一个完整的解决方案，底层的硬件和软件部署请参考 [vseasky/riscv-k210](https://github.com/vseasky/riscv-k210) \n\n![IMG_8355.JPG](./readme-image/63e66d1f9e630.png)\n\n![IMG_8355.JPG](./readme-image/63ef79b776fdf.jpg)\n\n![IMG_8351.JPG](./readme-image/63ef79d395798.jpg)\n\n## 常见问题\u0026FAQ\n\n- 默认参数**Makefile**\n- **OBJWEIGHT**，， 用于平衡精度和召回率 **NOOBJWEIGHT**,**WHWEIGH**\n- 默认输出两层，如果需要更多输出层可以修改 **OUTSIZE**\n- 如果要使用完整的 yolo，则需要将 和 在 **Makefile** 中修改为原始 yolo 参数 **IMGSIZE**,**OUTSIZE**\n\n## 参考\n\n[zhen8838/K210_Yolo_framework](https://github.com/zhen8838/K210_Yolo_framework)\n\n**2020/7/5 21:04:35**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvseasky%2Fyolo-for-k210","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvseasky%2Fyolo-for-k210","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvseasky%2Fyolo-for-k210/lists"}