目的:想编译一套自己的模型,使用在安卓机器上面,识别自己自定义的数据集类型
步骤:1、使用labelImg.exe工具标注自己的VOC数据集,执行命令:python dataset/voc/create_list.py -d path/to/dataset,生成需要的trainval.txt和test.txt文件
2、使用命令开始训练:python -u tools/train.py -c configs/yolov3_mobilenet_v1_voc.yml ,使用的移动端模型,可正常训练完成,需要的时间比较长
3、导出可预测模型:python -u tools/export_model.py -c configs/yolov3_mobilenet_v1_voc.yml --output_dir=./inference_model
4、导出模型文件:paddle_lite_opt --model_file=__model__ --param_file=__params__ --optimize_out_type=naive_buffer --optimize_out=cpu_model --valid_targets=arm ;可正常导出手机端使用的nb模型文件,
目前问题:使用faster_rcnn_r50_fpn_1x.yml 训练的预测模型可在平台端实现正常的识别,使用手机端模型文件(yolov3_mobilenet_v1_voc.yml )导出的模型文件放置到安卓手机端,不可识别到自己自定义标注的数据集:1、文件过大,两个类型的lables,大概有140M(示例程序里面的模型有80种类型才16M);2、识别不了数据集类型
求助:请问一下,是我操作流程有问题还是其他的问题,有成功操作的麻烦指教一下,谢谢!
附上模型的部分参数:
architecture: YOLOv3
use_gpu: false
max_iters: 168
log_iter: 20
save_dir: output
snapshot_iter: 2000
metric: VOC
map_type: 11point
pretrain_weights: http://paddle-imagenet-models-name.bj.bcebos.com/MobileNetV1_pretrained.tar
weights: output/yolov3_mobilenet_v1_voc/model_final
num_classes: 2
use_fine_grained_loss: false
faster_rcnn_r50_fpn_1x 140M是正常大小额
2、识别不了数据集类型
这句没怎么看懂,是自定义的标签没法用上吗
额,没看懂
训练的时候是faster_rcnn_r50_fpn_1x.yml?
然后这句,使用手机端模型文件(yolov3_mobilenet_v1_voc.yml )……
这两个不是一回事啊
自定义数据集训练的模型,部署在手机端流程是这样的:
比如使用faster_rcnn_r50_fpn_1x.yml训练的模型,最后要export model,生成导出的模型
如果想要部署在手机端,那么就要用到paddle lite量化这个模型,最后会生成一个 .nb的文件,这个,才是真正能在手机段部署的模型
如果训练的时候是faster_rcnn_r50_fpn_1x.yml,那么要在手机端部署的,自然也是faster_rcnn_r50_fpn_1x.yml(前提是paddle lite能支持faster rcnn的算子)
至于文中提到的所谓手机端模型 yolov3_mobilenet_v1_voc.yml
它其实和faster_rcnn_r50_fpn_1x.yml是并列的,没有所谓平台端和手机端之分,两个各自可以实现平台端和手机端部署,但是最重要的是,他们是两个模型!不是一个平台一个手机所谓有先后关系的模型。
楼主之所以会误解yolov3_mobilenet_v1_voc.yml 是手机端模型,应该是没看懂yolov3_mobilenet_v1_voc.yml 的说明。
yolov3_mobilenet_v1_voc.yml 是【针对移动端】优化的模型, 在利用移动端有限算力的情况下,尽可能保持目标检测的准确性。正如你看到的,这个模型文件很小,因此它【很适合】——注意,是适合,不是必须,部署在手机端
相比之下faster_rcnn_r50_fpn_1x的模型文件可能就比较大了,推理速度也慢。但是,只要paddle lite的算子支持(印象中是支持),它也是可以部署在手机上的(无非就是预测非常卡)
使用这个模型faster_rcnn_r50_fpn_1x.yml,在电脑端执行预测python -u tools/infer.py,可正常输出检测到结果有lable名还有bbox框识别了,我现在是使用移动端模型进行预测的,就不能识别到lable,bbox这些数据;使用的是同一个数据集
使用faster_rcnn_r50_fpn_1x.yml训练的模型,导出模型export model,然后再使用opt工具导出nb文件,放置安卓端会异常退出,使用yolov3_mobilenet_v1_voc.yml训练的模型,不会异常退出,但是预测的时候也识别不了图片信息:也不报错
2021-09-23 10:24:46,974 - INFO - Load categories from dataset\label_list.txt
2021-09-23 10:24:48,089 - INFO - Infer iter 0
2021-09-23 10:24:48,121 - INFO - Detection bbox results save in output\1860.jpeg
训练的模型主要想应用在手机端,当然需要体积尽可能的小,现在是执行的过程中没有错,只是识别不了,主要是yml里面的一些参数不知道配置的对不对,按照faster_rcnn_r50_fpn_1x.yml这个配置的,不清楚到底是哪里的问题
关于部署模型到手机,可以看这两个项目
手把手教你部署移动端迁移学习模型(PaddleX、Paddle-Lite)
https://aistudio.baidu.com/aistudio/projectdetail/613622
超简单!目标检测模型EasyEdge APP开发示例
https://aistudio.baidu.com/aistudio/projectdetail/1741287
您得这么理解,对于PaddleLite部署方案,PC端训练的那个模型和部署到手机上的不是同一个
PC端能预测的模型,导出后,能不能通过opt转化成nb文件,这个不是100%支持的——甚至可以这么说,我遇到的情况,能转化成功的只有几个最常见的yolo和ssd模型,因为有些算子不支持。fastrcnn印象中就不支持……