zhen8838 / K210_Yolo_framework

Yolo v3 framework base on tensorflow, support multiple models, multiple datasets, any number of output layers, any number of anchors, model prune, and portable model to K210 !
MIT License
249 stars 73 forks source link

Question #48

Open qiujianchen opened 2 years ago

qiujianchen commented 2 years ago

您好,我通过该项目训练自己的数据集,得到了h5,tflite,kmodel三种模型,并通过netron大致了解了h5和tflite的网络架构。 我想尝试着用Pytorch完成这一项目,按照h5和tflite重新定义网络结构,但是无法使用预训练模型。

作者能分享一下这个项目的大致实现过程吗?可以参考一下。

zhen8838 commented 2 years ago

你说的预训练模型指的是使用我这个项目生成的h5文件吗? 如果你想用pytorch加载keras生成的模型权重,你可以找一些关于模型权重转换的工具. 这个项目就是简单的自定义模型结构,然后训练yolov3模型. 使用pytroch的话,你可以直接用现成的一些训练yolo的框架,比如yolov5, 然后添加一个适配k210的模型结构进行训练/转换即可.

qiujianchen commented 2 years ago

你说的预训练模型指的是使用我这个项目生成的h5文件吗? 如果你想用pytorch加载keras生成的模型权重,你可以找一些关于模型权重转换的工具. 这个项目就是简单的自定义模型结构,然后训练yolov3模型. 使用pytroch的话,你可以直接用现成的一些训练yolo的框架,比如yolov5, 然后添加一个适配k210的模型结构进行训练/转换即可.

zhen8838 commented 2 years ago
  1. 我使用的预训练模型是mobilenet base 0.75, 是keras官方提供的,如果使用pytorch, 也可以在pytorch官方找到对应的预训练权重.
  2. 对于大部分的深度学习算法(比如yolov5), 模型结构主要是为了和他的损失函数相耦合, 我们可以简单的在修改非耦合处模型结构来适配自己需要的场景.
  3. 对于yolo来说,与损失函数强耦合的是他的输出(encoder head), 对于他的body(backbone)来说可以任意替换, 我这个项目主要是用mobilenet替换了darknet53的backbone, 然后还修改了一部分mobilenet的channel参数.
  4. 网络模型结构其实都是代码控制的, 因此你可以参考yolo_mobilenetv1的定义, 在另一个pytorch项目里进行修改.
lisenjie757 commented 2 years ago

我最近也在学习类似的事情,请问什么样的模型可以k210上跑,这是由什么决定的?为什么darknet53不可以mobilenet就行? 抱歉,我也是个深度学习小白,我可以从哪里学习相关的知识,能否提供一些文档或博客之类的教程。

zhen8838 commented 2 years ago

k210是通过kpu对模型进行加速的, 所以只有kpu支持的模型才可以在k230上流畅运行.你可以参考nncase项目的faq. 你可以先去学习一下吴恩达的深度学习课程, 然后再学习一些关于模型部署的知识.