基于Yolov5算法的中老年人带状疱疹皮肤病检测

  • 项目名称

《基于Yolov5算法的中老年人带状疱疹皮肤病检测》

  • 项目简介

本项目基于yolov5算法进行皮肤病检测,实现识别带状疱疹皮肤病的任务。带状疱疹为中老年人常见感染性皮肤病之一,为了帮助中老年人预防常见感染性疾病,我们将从网络中搜集大量针对带状疱疹检测的数据集,然后用labelImg对采集得到的照片进行特征标注在输入到yolov5算法模型,最后得到检测模型后在AidLux进行部署。本文重点介绍如何使用AidLu进行带状疱疹皮肤病的检测。

  • 预期效果

本项目基于Yolov5-Lite模型,利用安装AidLux的安卓手机实现,设备型号小米11,骁龙865,8+256。本项目在医疗市场上存在巨大的潜在价值。当前,随着我国人口老龄化的加剧,针对中老年慢性病,提高基层防病治病和健康管理能力显得尤为重要。我们的项目针对带状疱疹的检测,有利于中老年慢性疾病的防治。本项目响应“健康老龄化”的政策,可从主流医院开始推广,慢慢到各大医院。每年带状疱疹的患者都在增加,可给医院提供一种高效的检测手段,。除此之外,也可在中老年人社区中推广运行,中老年人能够较早发现自己的病症,即可进行及时就医。

对于开发者而言,AI项目中各种算法的数据集准备+模型训练+模型部署依然存在着不小的难度。AidLux的出现,可以将我们的安卓设备以非虚拟的形式变成同时拥有Android和Linux系统环境的边缘计算设备,支持主流AI框架,非常易于部署,还有专门的接口调度算力资源,极大地降低了AI应用落地门槛。

  • 操作流程

以下是操作流程图

1.数据集准备

想要Train一个目标检测模型,训练集是第一步,所以我们使用了python爬虫技术在网上大量爬取了带状疱疹和正常皮肤的相关图片。在本项目中我设置了两种检测类型。

Shigles——(患有带状疱疹皮肤)

Normal——(正常皮肤)

2.数据集标注

在采集完图像数据之后,我们就进入到了数据的标注环节。本项目采用的标注工具为labelme,他的下载和使用非常简单,只需一下两步:

pip install labelme

labelme

唤起labelme图像界面之后,单击左上角的file,我们需要对其进行一些设置:

在配置好我们的输入images文件夹和输出labels文件夹的路径之后,我们就可以进入到标注环节,create rectangle创建矩形框来框住我们图像中的物体。标注的话是个 体力活,体力活,体力活 。

在标注完成后,我们图片的json文件是长这样的:

可以看到这里表示bbox是图像中的真实值,而我们送入yolov5-master里面训练的bbox是需要归一化之后的数据,所以我们对数据经行归一化,即将json文件修改为txt文件,生产符合yolov5-Lite训练格式的文件。同时我们也得分割训练集和测试集。

3、Yolov5的准备

3.1.基本的Python环境配置

我采用的是Anaconda+Pycharm的配置,大家要了解一些关于pip的指令,方便管理包,这里就不赘述了。

3.2.下载Yolov5

https://github.com/ultralytics/yolov5,放在合理的位置,如果这个下的慢的话见文末资源

3.3.安装依赖库

当我们下好yolov5后,可以发现有一个requirements.txt文件,我们可以使用Anaconda Prompt,切换到咱们Yolov5的位置,pip install -r requirements.txt即可一步到位全部下完。

大部分都能pip install 。重点说两个

(1)对于Pytorch,如果文件较大没有办法下完的话,可以用我下面的网址单独下载whl文件,

https://download.pytorch.org/whl/torch_stable.html

(2)对于wandb,wandb安装方法,这个好像不是必须的,但我还是下了,版本为0.12.19,刚好能兼容,作用就是对训练分析,如图所示

wandb实际上是非必须的,如果影响到了使用,那么在程序中可以把它禁止使用,不影响任何效果。在yolov5/utils/loggers/wandb/wandb_utils.py前面几行,加入如下图所示的第28行输入wandb=None

3.4.初步测试:detect.py

下载完yolov5后,什么都不用改,运行detect.py

这个是帮你检测能不能正常运行的

若正常:

在runs/detect/exp中能发现被处理过的标签,说明成功了!若程序报错,大概率是因为有的库版本不正确或者还未安装,这个自己调试一下即可,应该没有太大难度

4、训练集要求及路径要求

4.1 目录格式

首先按照这个目录格式去建立文件夹。(一定要按照这个格式建立文件夹)

images是图片,labels是标签,train的话是用于训练的,test就是用于测试的

4.2 修改配置文件

1.coco128.yaml->shigles_parameter.yaml

在yolov5/data/coco128.yaml中先复制一份,粘贴到shigles中,改名为shigles_parameter.yaml(意义为shigles的参数配置)

shigles_parameter.yaml文件需要修改的参数是nc与names。nc是标签名个数,names就是标签的名字,带状疱疹的例子中有2个标签,标签名字都如下。

说明:

path是绝对路径

train是在path绝对路径条件下的训练集路径,即:shigles/datasets/images/train

val同上,但是是验证集,这里我为了方便,让训练集和验证集是一个,也没啥大问题。

test可不填nc是训练集中种类的个数,names是他们对应的名字,这个顺序不要混了,尤其是自己打标签时,会有对应的顺序的。

2.yolov5x.yaml->shigles_model.yaml

yolov5有4种配置,不同配置的特性如下,我这里选择yolov5x,效果较好,但是训练时间长,也比较吃显存

在yolov5/models先复制一份yolov5x.yaml至wzry,更名为shigles_model.yaml(意为模型),只将如下的nc修改为训练集种类即可

5、开始训练train

5.1.调参

在train.py,找到def parse_opt(known=False)这行,这下面是我们要修改的程序部分

我标注“修改处”的,是一定要修改的;其他的注释是一些较为重要的参数不改也可以。具体修改的地方为defalut后

479行:是我们训练的初始权重的位置,是以.pt结尾的文件,第一次训练用别人已经训练出来的权重。可能有朋友会想,自己训练的数据集和别人训练的数据集不一样,怎么能通用呢?实际上他们是通用的,后面训练会调整过来。而如果不填已有权重,那么训练效果可能会不好;

480行:训练模型文件,在本项目中对应shigles_model.yaml;

481行:数据集参数文件,在本项目中对于shigles_parameter.yaml;

482行:超参数设置,是人为设定的参数。包括学习率啥的等等,可不改;

483行:训练轮数,决定了训练时间与训练效果。如果选择训练模型是yolov5x.yaml,那么大约200轮数值就稳定下来了(收敛);

484行:批量处理文件数,这个要设置地小一些,否则会out of memory。这个决定了我们训练的速度;

485行:图片大小,虽然我们训练集的图片是已经固定下来了,但是传入神经网络时可以resize大小,太大了训练时间会很长,且有可能报错,这个根据自己情况调小一些;

487行:断续训练,如果说在训练过程中意外地中断,那么下一次可以在这里填True,会接着上一次runs/exp继续训练

496行:GPU加速,填0是电脑默认的CUDA,前提是电脑已经安装了CUDA才能GPU加速训练,安装过程可查博客

501行:多线程设置,越大读取数据越快,但是太大了也会报错,因此也要根据自己状况填小。

5.2.结果

结果保存在runs/train/exp中,多次训练就会有exp1、exp2、等等

best.pt和last.pt是我们训练出来的权重文件,比较重要,用于detect.py。last是最后一次的训练结果,best是效果最好的训练结果(只是看起来,但是泛化性不一定强)。

6、识别检测detect.py

6.1.调参

找到def parse_opt():这行,以下是我们要调参的位置

217行:填我们训练好的权重文件路径

218行:我们要检测的文件,可以是图片、视频、摄像头。填0时为打开电脑默认摄像头

219行:数据集参数文件,同上

220行:图片大小,同上

221行:置信度,当检测出来的置信度大于该数值时才能显示出被检测到,就是显示出来的框框

222行:非极大抑制,具体不赘述了,自行查阅,可不改

224行:GPU加速,同上

9.2.结果

结果在runs/detect/exp中

  1. 导出.tflite文件

7.1 tflite介绍

tflite其实就是谷歌自己的一个轻量级推理库。主要用于移动端。之前的tensorflow mobile那一套到2019年就不再维护了。

tflite使用的思路主要是从预训练的模型转换为tflite模型文件,拿到移动端部署。

tflite的源模型可以来自tensorflow的saved model或者frozen model,也可以来自keras。

本项目也使用了tflite文件在Aidlux进行推理,我们先将best.pt文件导出为best.tflite:

7.2 pt模型转换

因为aidlux里面用的是tensorflow框架的tflite模型,所以我们先将训练好的pt模型转换成tflite模型。

先在PC端电脑上,打开yolov5的代码,找到export.py,主要修改两个地方。

第一个是修改模型的路径,即weights的路径,修改export.py文件最下面的parse_opt配置函数。

因为yolov5的模型,放在models文件夹里面,所以将detault修改成“models/yolov5s.pt”。

第二个是修改模型转换成的格式,将include的default修改成“tflite”。

改好文件如下

best.tflite文件导出成功,接下来我们就可以在Aidlux上进行推理测试了。

8 AidLux端进行模型部署

8.1 上传代码到AiLlux

我们首先打开手机版的aidlux,并投影到电脑网页上。然后第一步先将Yolov5的所有代码,上传到aidlux的平台里面。

点击电脑端页面菜单栏的第一个,文件浏览器,打开文件管理页面。

找到home文件夹,并双击进入此文件夹。

点击右上角往上的箭头“upload”,再选择Folder,将前面Yolov5的文件夹上传到home文件夹内。

点击选择上传。

上传好后,在Yolov5的aidlux文件夹中

其中包含了三个文件,yolov5.py是主函数文件,utils.py是配置文件,yolov5s.tflite是模型转换后的文件

8.2 运行对应app_main.py代码

8.3 即可进行带状疱疹皮肤病检测

8.4 AidLux展示效果视频

AidLux部署基于Yolov5算法的中老年人带状疱疹皮肤病检测_哔哩哔哩_bilibili

对AidLux感兴趣的同学,可以加入AidLux官方交流群,群内有官方工程师和AI行业的大神在线互动。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值