基于PaddleHub的奶牛身份识别

 

一、任务简介

奶牛身份识别,是实现智慧养殖的基础性工作。通过在挤奶通道口采集奶牛图像,并用人工智能实现奶牛个体的快速身份识别,从而为实时动态监测奶牛行为提供了基础条件,在畜牧业有广阔的应用价值。

本次实践基于FriesianCattle2017数据集(http://data.bris.ac.uk),为了简化难度,采用labelme标注好的标注文件对奶牛图片进行定位,去除一些干扰的因素。数据集一共有89头奶牛的图片,一个文件夹为1头奶牛在不同时刻的图像(每类的数量不一),目标是给定一张奶牛图片,判断该奶牛的ID。例如下图中是两只不同的奶牛。特别提示:本实践所用数据集均来自互联网,请勿用于商务用途。 

aistudio链接:https://aistudio.baidu.com/aistudio/projectdetail/528829

基于PaddleHub的奶牛身份识别_第1张图片

二、任务实践

以下以aistudio中目录结构作为示例。

Step1、基础工作

(1)安装或升级paddlepaddle和paddlehub

!pip install paddlepaddle==1.8.1 --upgrade

!pip install paddlehub --upgrade

(2)解压缩

!cd data/data31879/ && tar zxvf data.tar.gz !cd data/data31879/ && tar zxvf annotations.tar.gz

Step2、加载预训练模型

此处用了动物识别模型,也可以换成resnet_v2_50_imagenet等模型

import paddlehub as hub

module = hub.Module(name="resnet50_vd_animals") 

Step3、数据准备

(1)把数据进行裁剪,匹配预训练模型要求的尺寸,可以加入数据增强;(详细见notebook)

基于PaddleHub的奶牛身份识别_第2张图片

(2)做成paddlehub要求的数据集格式。

基于PaddleHub的奶牛身份识别_第3张图片

 

Step4、生成数据读取器

ImageClassificationReader适用于图像分类数据的预处理器。会修改输入图像的尺寸、进行标准化处理、图像增广处理等操作。

基于PaddleHub的奶牛身份识别_第4张图片

 

Step5、配置策略

在进行Finetune前,我们可以设置一些运行时的配置:

  • use_cuda:设置为False表示使用CPU进行训练。如果您本机支持GPU,且安装的是GPU版本的PaddlePaddle,将这个选项设置为True;

  • epoch:迭代轮数;

  • batch_size:每次训练的时候,给模型输入的每批数据大小为32,模型训练时能够并行处理批数据,因此batch_size越大,训练的效率越高,但是同时带来了内存的负荷,过大的batch_size可能导致内存不足而无法训练,因此选择一个合适的batch_size是很重要的一步;

  • log_interval:每隔10 step打印一次训练日志;

  • eval_interval:每隔50 step在验证集上进行一次性能评估;

  • checkpoint_dir:将训练的参数和数据保存到cv_finetune_turtorial_demo目录中;

  • strategy:使用DefaultFinetuneStrategy策略进行finetune;

同时PaddleHub提供了许多优化策略,如AdamWeightDecayStrategyULMFiTStrategyDefaultFinetuneStrategy等,详细信息参见策略

基于PaddleHub的奶牛身份识别_第5张图片

 

Step6、组建Finetune Task

有了合适的预训练模型和准备要迁移的数据集后,我们开始组建一个Task。

由于该数据设置是一个89分类的任务,而我们下载的分类module是在Animal数据集上训练的模型,所以我们需要对模型进行简单的微调,把模型改造为一个89分类模型:

  1. 获取module的上下文环境,用于获取Module的上下文信息,得到输入、输出以及预训练的Paddle Program副本。
  2. 从输出变量中找到特征图提取层feature_map;
  3. 在feature_map后面接入一个全连接层,生成Task;

API参考链接

基于PaddleHub的奶牛身份识别_第6张图片

Step7、开始Finetune     

我们选择finetune_and_eval接口来进行模型训练,这个接口在finetune的过程中,会周期性的进行模型效果的评估,以便我们了解整个训练过程的性能变化。

基于PaddleHub的奶牛身份识别_第7张图片

Step8、预测

当Finetune完成后,我们使用模型来进行预测,先通过以下命令来获取测试的图片

基于PaddleHub的奶牛身份识别_第8张图片基于PaddleHub的奶牛身份识别_第9张图片基于PaddleHub的奶牛身份识别_第10张图片

你可能感兴趣的:(PaddlePaddle体验)