• 项目名称

《基于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行业的大神在线互动。

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

  1. 【人工智能】基于YOLOv5+PyQt5开发的可视化人数检测系统【附项目报告+演示视频+完整代码】

    文章目录 一.环境介绍 二.前言及效果演示 三.前期准备与数据训练 四.文档内容一览 五.完整代码链接 一.环境介绍 系统:Windows 10 64位 显卡:RTX3060 + cuda11.3 + ...

  2. 基于yolov5轻量级的学生上课姿势检测识别分析系统

    在我之前的博文中已经做过关于人体姿势识别人体姿态检测的博文,都是比较早期的技术模型了,随机技术的迭代更新,很多更加出色的模型陆续出现,这里基于一些比较好用的轻量级模型开发的姿态检测模型. 原始博文如下 ...

  3. Jetson 系列——基于yolov5对火源或者烟雾的检测,使用tensorrt、c++和int8加速

    项目简介: 代码地址: github地址:https://github.com/RichardoMrMu/yolov5-fire-smoke-detect gitee地址:https://gitee. ...

  4. 目标检测论文解读复现之六:基于YOLOv5的遥感图像舰船的检测方法

    目标检测论文解读复现 文章目录 目标检测论文解读复现 前言 一.摘要 二.网络模型及核心创新点 三.应用数据集 四.实验效果 五.实验结论 六.投稿期刊介绍 前言 此前出了目标改进算法专栏,但是对于应 ...

  5. 基于YOLOv5的智慧工地实现---安全帽检测(2)

    基于YOLOv5的智慧工地安全帽检测 代码下载地址:下载地址 Smart_Construction 该项目是使用 YOLOv5 v2.x 的程序来训练在智能工地安全领域中头盔目标检测的应用 指标 yo ...

  6. 基于YoloV5和MTCNN的Perclos方法检测疲劳(遇到困难重重,暂时不更新该主题了)

    一.项目情况 [0801更新] 最近事情实在太多,本想着项目结束后,把自己的心得体会好好整理一下,发现好像也没有什么能分享给大家的,暂且不再更新此主题了. 如果有其他想法,我会在其他文章中写. 不过最 ...

  7. 融合CBAM注意力机制基于YOLOv5开发构建毛尖茶叶嫩芽检测识别系统

    首先看下整体效果: 要进行茶叶嫩芽的检测和识别,可以使用计算机视觉和深度学习技术来实现.下面是一种基本的流程: 数据收集:收集包含毛尖.嫩芽以及其他类型茶叶图像的数据集.确保数据集中包含不同角度.光照 ...

  8. 【图像检测】基于形态学算法实现水果蔬菜缺陷检测matlab代码

    1 简介 机器视觉是指利用图像建立一个现实世界中的物体的虚拟的模型.图像是将现实世界中的三维物体转换成二维信息,在这个过程中,许多有用的三维的信息被模糊掉,而实际应用中,很多时候需要用到这些被模糊掉的 ...

  9. 基于YOLOv5和U-NET的火灾检测与分割

    1.文章信息 本次介绍的文章是发表在EUSIPCO 2021的一篇基于计算机视觉的火灾检测文章. 2.摘要 当今世界面临的环境危机是对人类的真正挑战.对人类和自然的一个显著危害是森林火灾的数量不断增加 ...

最新文章

  1. Python模块-创建和执行程序(或者脚本)
  2. Leetcode 255. Verify Preorder Sequence in Binary Search Tree
  3. bzoj 3528: [Zjoi2014]星系调查
  4. qt connect函数_Qt 串口上位机开发Rice 上位机 学习开发
  5. 力扣-1791. 找出星型图的中心节点
  6. web前端工程师的供求
  7. VMProtect修复导入表的插件
  8. PHP 将XML转成数组(微信回调接收方法)
  9. Kaggle时间序列(Time Series)教程 3-季节性(Seasonality)
  10. python 绘制多分类变量折线图
  11. 网络布线的概念和IP的计算
  12. pytorch GradScale 梯度缩放算子
  13. 牛客网数据库SQL实战14—— 从titles表获取按照title进行分组,注意对于重复的emp_no进行忽略。
  14. python支付系统_cardutil-用于处理支付卡系统的Python包-Anthony Delosa
  15. 【博学谷学习记录】超强总结,用心分享|js语法基础(一)
  16. ubuntu命令行启动浏览器_linux命令行下使用linux打开浏览器命令
  17. python字符串equals方法_equals方法和 == 的使用
  18. Python pandas 空值缺失值(NaN)处理填充替换判断删除含缺失空值数据行
  19. 2的0次方为什么等于1?
  20. WordPress-微信机器人高级版

热门文章

  1. 宽带路由猫的默认密码列表 z
  2. 把API的方法摘要转化为Markdown语法复制到CSND博客
  3. 面向对象(OO)程序设计
  4. 医疗器械行业税收筹划研究
  5. 日常英语-从起床到出门
  6. html制作简单的表单<form>
  7. C语言教你如何做抖音很火的告白编程程序
  8. 饥荒联机版服务器重置,饥荒:联机版专用服务器设置方法总结
  9. 如何破解“千人千面”,深度解读用户画像
  10. 电子商务新技术与新应用(十)