基于轻量级ShuffleNetv2+YOLOv5的DIC-C2DH-HeLa细胞检测识别分析系统

news2025/2/27 1:27:47

ShuffleNetv2可以说是目前轻量级网络模型中的翘楚,将ShuffleNetv2于yolov5整合开发可以使得模型更加轻量化,在提升模型速度的同时保证有效的精度。

本文的主要工作就是将ShuffleNetv2整合进yolov5中来开发构建细胞检测模型,首先看下效果图:

这里是基于yolov5s进行改进融合的,改进后的yaml文件如下所示:

# parameters
nc: 1
depth_multiple: 0.33
width_multiple: 0.50


#Anchors
anchors:
  - [10,13, 16,30, 33,23]  
  - [30,61, 62,45, 59,119]  
  - [116,90, 156,198, 373,326]  


#Backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, conv_bn_relu_maxpool, [32]],    
   [-1, 1, ShuffleBlock, [116, 2]], 
   [-1, 3, ShuffleBlock, [116, 1]], 
   [-1, 1, ShuffleBlock, [232, 2]], 
   [-1, 7, ShuffleBlock, [232, 1]], 
   [-1, 1, ShuffleBlock, [464, 2]], 
   [-1, 1, ShuffleBlock, [464, 1]], 
  ]


#Head
head:
  [[-1, 1, Conv, [96, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[ -1, 4 ], 1, Concat, [1]],  
   [-1, 1, DWConv, [96, 3, 1]],  
   [-1, 1, Conv, [96, 1, 1 ]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 2], 1, Concat, [1]],  
   [-1, 1, DWConv, [96, 3, 1]], 
   [-1, 1, DWConv, [96, 3, 2]],
   [[-1, 11], 1, ADD, [1]], 
   [-1, 1, DWConv, [96, 3, 1]], 
   [-1, 1, DWConv, [ 96, 3, 2]],
   [[-1, 7], 1, ADD, [1]],  
   [-1, 1, DWConv, [96, 3, 1]],
   [[14, 17, 20], 1, Detect, [nc, anchors]], 
  ]

这里的改进主要体现在两部分结合ShuffleNet的网络思想来的,首先是BackBone部分,如下:

直接使用了ShuffleBlock来替换原有的C3和Conv模块了。

之后是head部分,如下所示:

这部分主要是深度可分离卷积的使用了,进一步降低参数量的高效tricks。

接下来看下数据集:

VOC格式标注数据如下所示:

实例标注内容如下:

<annotation>
    <folder>Hela</folder>
    <filename>images/0edad713-0236-48ce-ba10-f6a5cc8a5194.jpg</filename>
    <source>
        <database>The Hela Database</database>
        <annotation>Hela</annotation>
        <image>Hela</image>
    </source>
    <owner>
        <name>YSHC</name>
    </owner>    
    <size>
        <width>512</width>
        <height>512</height>
        <depth>3</depth>
    </size>
    <segmented>0</segmented>
    
    <object>        
        <name>cell</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>251</xmin>
            <ymin>0</ymin>
            <xmax>384</xmax>
            <ymax>76</ymax>
        </bndbox>
    </object>
    
    <object>        
        <name>cell</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>313</xmin>
            <ymin>67</ymin>
            <xmax>482</xmax>
            <ymax>159</ymax>
        </bndbox>
    </object>
    
    <object>        
        <name>cell</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>145</xmin>
            <ymin>98</ymin>
            <xmax>243</xmax>
            <ymax>242</ymax>
        </bndbox>
    </object>
    
    <object>        
        <name>cell</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>251</xmin>
            <ymin>103</ymin>
            <xmax>400</xmax>
            <ymax>226</ymax>
        </bndbox>
    </object>
    
    <object>        
        <name>cell</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>31</xmin>
            <ymin>157</ymin>
            <xmax>140</xmax>
            <ymax>281</ymax>
        </bndbox>
    </object>
    
    <object>        
        <name>cell</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>221</xmin>
            <ymin>218</ymin>
            <xmax>351</xmax>
            <ymax>327</ymax>
        </bndbox>
    </object>
    
    <object>        
        <name>cell</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>347</xmin>
            <ymin>254</ymin>
            <xmax>498</xmax>
            <ymax>360</ymax>
        </bndbox>
    </object>
    
    <object>        
        <name>cell</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>117</xmin>
            <ymin>261</ymin>
            <xmax>221</xmax>
            <ymax>360</ymax>
        </bndbox>
    </object>
    
    <object>        
        <name>cell</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>12</xmin>
            <ymin>282</ymin>
            <xmax>104</xmax>
            <ymax>390</ymax>
        </bndbox>
    </object>
    
    <object>        
        <name>cell</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>62</xmin>
            <ymin>354</ymin>
            <xmax>182</xmax>
            <ymax>464</ymax>
        </bndbox>
    </object>
    
    <object>        
        <name>cell</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>216</xmin>
            <ymin>357</ymin>
            <xmax>358</xmax>
            <ymax>444</ymax>
        </bndbox>
    </object>
    
    <object>        
        <name>cell</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>80</xmin>
            <ymin>437</ymin>
            <xmax>221</xmax>
            <ymax>512</ymax>
        </bndbox>
    </object>
    
</annotation>

YOLO格式标注数据如下所示:

样例标注数据如下所示:

0 0.541016 0.077148 0.238281 0.154297
0 0.949219 0.131836 0.101562 0.189453
0 0.617188 0.227539 0.257812 0.162109
0 0.339844 0.390625 0.316406 0.21875
0 0.630859 0.397461 0.277344 0.193359
0 0.634766 0.599609 0.210938 0.269531
0 0.829102 0.571289 0.248047 0.208984
0 0.34668 0.592773 0.341797 0.228516
0 0.175781 0.71582 0.214844 0.349609
0 0.37793 0.802734 0.205078 0.1875

接下来就可以启动模型训练了,日志输出如下所示:

接下来看下结果详情。

LABEL数据可视化:

训练batch检测样例:

F1值曲线和PR曲线 :

最后基于专用的界面实现可视化推理应用。

上传图像:

检测推理计算:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/155819.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4-3文件管理-磁盘组织与管理

文章目录一.磁盘的结构二.磁盘调度算法&#xff08;一&#xff09;一次读/写磁盘需要的时间&#xff08;二&#xff09;磁盘调度算法1.先来先服务FCFS2.最短寻找时间优先SSTF3.扫描算法/电梯调度算法SCAN4.循环扫描算法C-SCAN&#xff08;三&#xff09;减少磁盘延迟时间的方法…

再谈模板(19)

目录 1、非类型模板参数 2、模板的特化 1、定义 2、函数模板特化 3、类模板特化 1、全特化 2、偏特化 3、分离编译 1、什么是分离编译 2、模板不支持分离编译 4、模板总结 1、非类型模板参数 模板参数&#xff1a;类型形参与非类型形参。 类型形参&#xff1a;出现…

Leetcode - 24 - 两两交换链表中的节点

24. 两两交换链表中的节点 题目描述 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;h…

重写部分调试体系的DebugPort隐藏

背景逛世界上最大的交友网站的时候发现了一个开源的vt调试器&#xff0c;抱着学习的心态&#xff0c;下载下来学习学习。但是呢&#xff0c;实际编译出来的程序和release发布的有很大的区别&#xff0c;而且源码很乱&#xff0c;release版本的驱动至少能调试程序&#xff0c;但…

文件IO操作

日升时奋斗&#xff0c;日落时自省 目录 1、文件基本认知 1.1、文件路径 1.2、相对路径 1.3、文件类型 2、Java的文件操作 2.1、文件操作类File 3、数据流读写 3.1字节流读文件 3.2、字节流写文件 3.3、字符流读操作 3.4、字符流写操作 4、文件操作案例 4.1、删除…

【自学Python】Python类型转换

Python类型转换 Python类型转换教程 虽然 Python 是弱类型编程语言&#xff0c;不需要像 Golang 或 C/C 语言那样还要在使用 变量 前声明变量的类型&#xff0c;但在一些特定场景中&#xff0c;仍然需要用到类型转换。 对 Python 内置的数据类型进行转换时&#xff0c;可以使…

valgrind callgrind使用

valgrind --toolcallgrind --dump-instryes ./foo # ,这里会运行很久,执行完毕后会生成一个callgrind.out.1266511如果你调试的程序是多线程&#xff0c;你也可以在命令行中加一个参数 -separate-threadsyes。这样就会为每个线程单独生成一个性能分析文件。如下&#xff1a;val…

好玩的小游戏系列 (一)基于html+js 原生贪吃蛇

一朵花如果只被用来观赏那只呈现出它的外在意义只是它生命的一部分若是不能够将其内在更实质的美发挥出来充其量也不过就是一朵死的花而已。 目录 一、前言 二、代码介绍 三、效果显示 四、编码实现 index.html jquery-1.10.2.js 五、获取源码 获取源码&#xff1f;私信…

【vue2】组件进阶与插槽(匿名·具名·作用域插槽详解)

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;v-modedl表单双向绑定、ref|$ref操作dom、dynamic动态组件、$nextTick同步、匿名插槽、具…

Java常用开发工具有哪些

本节介绍一下 Java 常用的几个开发工具。下面这些工具或许功能和作用不同&#xff0c;但是有着一个共同的主旨&#xff0c;那就是——它们都是为了给 Java 编码和开发提供卓越的支持。 常用源码编辑工具介绍 Java 源代码本质上其实就是普通的文本文件&#xff0c;所以理论上来…

【阶段三】Python机器学习16篇:机器学习项目实战:集成模型介绍、随机森林模型的基本原理与随机森林分类模型

本篇的思维导图: 集成模型介绍 集成学习模型使用一系列弱学习器(也称为基础模型或基模型)进行学习,并将各个弱学习器的结果进行整合,从而获得比单个学习器更好的学习效果。集成学习模型的常见算法有Bagging算法和Boosting算法两种。 算法类型 模型名称

lua 入门

安装 linux 下安装方式 curl -R -O http://www.lua.org/ftp/lua-5.4.4.tar.gz tar zxf lua-5.4.4.tar.gz cd lua-5.4.4 # 编译并测试没有问题 make all test make install卸载 cd lua-5.4.4 # 删除相关配置,之后可以删除 lua-5.4.4 make uninstall执行 文件以 .lua 结尾 方…

Flume第一章:环境安装

系列文章目录 Flume第一章&#xff1a;环境安装 文章目录系列文章目录前言一、Flume是什么&#xff1f;二、环境安装1.文件下载2.环境安装3.官方案例三、几个案例1.实时监控 Hive 日志&#xff0c;并上传到 HDFS 中2.使用 Flume 监听整个目录的文件&#xff0c;并上传至 HDFS3…

【构造】Codeforces Round #843 (Div. 2) B Gardener and the Array

Problem - B - Codeforces题意&#xff1a;给定一个序列&#xff0c;让你判断是否存在两个子序列使得这两个子序列或起来相等思路&#xff1a;设两个子序列是a和b两个子序列凭空出现&#xff0c;那肯定考虑构造满足的条件是&#xff1a;a!bf(a)f(b)如果只考虑第二个条件&#x…

java系列文章之反射

文章目录一、动态语言二、反射机制概念三、反射的应用场合1. 编译时类型和运行时类型2. 编译时类型无法获取具体方法四、 反射 API五、反射使用步骤六、获取 Class 对象的 3 种方法七、创建对象的两种方法总结一、动态语言 动态语言&#xff0c;是指程序在运行时可以改变其结构…

读书:《5%的改变》

《5%的改变》 我们并不需要100%的改变&#xff0c;彻底推翻以前的旧习惯&#xff0c;对于绝大多数人来说&#xff0c;并不太现实&#xff0c;不如考虑一下只改变5%。 一天结束&#xff0c;22:00&#xff0c;开始为睡觉做准备&#xff0c;反思一下&#xff0c;发现今天好像什…

Pytorch LSTM实现中文单词预测(附完整训练代码)

Pytorch LSTM实现中文单词预测(附完整训练代码) 目录 Pytorch LSTM实现中文单词预测(词语预测 附完整训练代码) 1、项目介绍 2、中文单词预测方法&#xff08;N-Gram 模型&#xff09; 3、训练词嵌入word2vec&#xff08;可选&#xff09; 4、文本预处理 &#xff08;1&…

Java面向对象之继承

目录继承概述、使用继承的好处总结继承的设计规范、内存运行原理总结继承的特点总结继承后&#xff1a;成员变量、成员方法的访问特点总结继承后&#xff1a;方法重写继承后&#xff1a;子类构造器的特点总结继承后&#xff1a;子类构造器访问父类有参构造器总结this、super使用…

k8s之DaemonSet

写在前面 假定现在有一个这样的需求&#xff0c;需要收集每个Node的运行状态信息&#xff0c;并进行上报&#xff0c;假设有4个节点&#xff0c;我们可以使用Deployment 来实现吗&#xff1f;好像是可以的&#xff0c;我们只需要将repliacas设置为4不就行了&#xff0c;但是de…

怎样让公司全员贡献结构化内容?

- 1 - 问题 一个朋友在一个生产型企业的文档团队负责产品文档&#xff0c;他们使用DITA来编写各类文档&#xff0c;比如&#xff1a;公司管理文档、产品介绍、产品使用说明、产品安装手册等。 DITA 是基于XML的体系结构&#xff0c;用于编写、制作、交付面向主题的信息类型…