59.人工智能——基于Faster R-CNN实现多种水果目标检测

sw

在做图像分类任务时,我们先使用卷积神经网络提取图像特征,然后再用这些特征预测分类概率。注意这里是对整张图像提取特征,所以无法区分图像中的不同目标,也就没法分别标示出每个物体所在的位置。

为了解决这个问题,我们可以将目标检测任务进行拆分。以某种方式在图像上生成一系列可能包含物体的区域(候选区域),然后对每个候选区域,把它单独当成一幅图像来看待,使用图像分类模型对它进行分类,看它属于哪个类别,从而实现目标检测任务。

2015年,ShaoqingRen等人提出了FasterR-CNN模型,提出了RPN的方法来产生物体的候选区域,这一方法不再需要使用传统的图像处理算法来产生候选区域,进一步提升了处理速度。


faster-rcnn模型结构

本文将通过一个具体的案例来演示一下如何使用FasterRCNN来实现目标检测任务。

一、数据集介绍:

这里采集了五种水果的数据:蕃茄、核桃、桔子、龙眼、青枣。共300张图像,图像大小:640*480。并做好了标注和数据集的划分。标注和划分操作可以参看:24.人工智能:计算机视觉任务——数据格式和标注。



二、开启训练

这里使用飞桨的PaddleX来进行数据训练,飞桨的PaddleX安装和介绍可以参看:40.人工智能——深度学习飞桨-PaddleX安装:Windows10系统

训练代码:

importpaddlexaspdxfrompaddleximporttransformsasT定义训练和验证所用的数据集train_dataset=(data_dir="fruit",file_list="fruit/train_",label_list="fruit/",transforms=train_transforms,shuffle=True)eval_dataset=(data_dir="fruit",file_list="fruit/val_",label_list="fruit/",transforms=eval_transforms,shuffle=False)paddlex-export_inference--model_dirbest_model--save_dirinference


输出部署模型

推理预测实现代码:

importosimportcv2importrandom随机选择一个测试文件,并显示test="test_"withopen((basedir,test),"r")asf:lines=().splitlines()fimg=(lines).split("")[0]fimg=(basedir,fimg)print(fimg)predictor=("output/faster_rcnn_fpn_fruit/inference_model",use_gpu=True)img=(fimg)result=(img)#print(result)vis_img=(img,result,threshold=0.5,save_dir=None)("result",vis_img)(0)()

随机取三条测试数据,预测结果可视化如下:


预测结果1


预测结果2


预测结果3

从预测结果的准确率来看,效果还是不错的,基本上能达到预期目标检测的效果。

补充说明:

修改调整了一下训练参数,一是迭代次数增加到50,二是数据增强也增加尺寸。最后mAP高达到94%以上了。

[INFO][EVAL]Finished,Epoch=50,bbox_map=92.396987.[INFO]Currentevaluatedbestmodeloneval_datasetisepoch_40,bbox_map=94.28783236128207[INFO]Modelsavedinoutput/faster_rcnn_fruit_vd_ssld/epoch_50.
文章版权声明:除非注明,否则均为果宝网原创文章,转载或复制请以超链接形式并注明出处。

上一个 这些水果很甜但糖分少!关于水果的10件事儿,一次说明白

下一个 水果分类有哪些?42个科154种水果别说吃过,你见过多少