王琰,郭祺赟,毕美华
(杭州电子科技大学通信工程学院,浙江杭州,310016)
近年来,随着水产养殖业规模的迅速加大和监控设备的普及,智能化的养殖状态监测和信息管理技术受到越来越广泛的关注[1]。本文从鱼塘养殖环境进行分析,设计了一套基于YOLOv5的鱼塘养殖系统。此系统不仅可以实时监测水体环境因素,还可以通过机器学习模型实现鱼类的分类,方便记录鱼体活动,并针对鱼类行为进行深入分析,反映鱼体的生存情况[2],提高养殖效率,降低人工成本。
本系统主要分为水质监测与目标检测两个部分。水质监测部分中,使用嵌入式单片机STM32与各类传感器进行数据的读取和分析,树莓派与STM32之间使用串口通信协议获取传感器采集得到的数据,再将传感器的数据信息传输给Flask框架部署的Web端显示。目标检测部分使用树莓派自带的摄像头进行拍照,然后使用已经训练好的模型进行识别,使用的模型基于yolov5,最后将识别结果传输到Flask框架,显示在网页上。图1为机器学习和FLASK框架的养殖监测设计的结构图。
图1 系统结构
在水质监测模块中,使用嵌入式单片机获取传感器数据。单片机通过可以感知水质环境的各类传感器进行交互,并且通过定时循环,可以做到定时采样环境数据并且将原始数据进行处理打包,然后与树莓派进行串口通信[3],将采集到的水质数据发送给树莓派,水质检测模块的系统框图如图2所示。
图2 水质监测模块系统框图
在传感器交互端,本系统采用了四种传感器来获取水质数据,分别是温度采集、浊度采集、pH采集和溶解氧采集。通过这四种传感器,可以获得较为准确的水质数据,同时这四种水质数据对于鱼类养殖有着至关重要的作用。
对于鱼塘的温度采集,虽然单片机内部自带了温度传感器,但是因为芯片发热导致温升较大等问题,与实际温度差别较大,并且制作防水外壳费时费力,难度大。因此本系统采用外接的方式,使用数字温度传感器DS18B20来得到较为准确的水温。DS18B20的工作电压范围为3-5.5V,接线方便,封装灵活,可以使用防水探头工作,体积小,功耗低,抗干扰能力强,使得系统设计较为灵活,还可以在更为复杂的环境下使用。同时它有掉电储存机制,设定的温度分辨率会储存在EEPROM中,以便在通电时直接读取使用,不需要再次校正。利用单总线技术来使得单片机与其进行通信,只需要一条口线即可以实现双向通信。
浊度采集使用专用的总溶解固体(TDS)传感器进行测量。其激励源为交流信号,可以有效防止探头极化,并且可以使用防水探头工作,长期浸于水中采集数据。TDS传感器在使用前需要进行校准修正参数,在测量过程中,其会根据总溶解固体量输出一个模拟电压,单片机使用内部模数转换模块采集这个电压,并最后将其量化转换成相应的溶解性固体总量。
pH采集电路由稳压源电路、电压跟随电路与信号放大电路组成。与TDS传感器一样,采集pH使用的传感器在使用前也需要进行校准。其校准方法为将pH传感器的电极分别放入pH值不同的标准溶液中,并调节电位器旋钮使模拟输出口输出电压到指定值附近。pH传感器使用防水探头进行采集工作,输出的模拟电压值,需要通过单片机进行电压采集与模数转换,得到pH值结果。
溶解氧采集传感器在使用前需要进行两点校准,即校准不同温度下的饱和溶解氧。使用两点校准可以进行温度补偿计算,适用于宽温度范围的溶解氧测量。当温度固定时,电压与溶解氧浓度成线性关系,可以由输出电压转换得到水中的溶解氧。
本系统所使用的树莓派4B拥有两个串口,分别是硬件串口ttyAMA0与mini串口ttyS0。其中硬件串口ttyAMA0有单独的波特率时钟源,性能好,稳定性强,默认分配给蓝牙模块使用;而mini串口ttyS0相对功能简单,稳定性较差,并且波特率由CPU内核时钟提供,受内核时钟影响,默认分配给GPIO串口TXD0和RXD0。在树莓派4B中,TX对应GPIO口8脚,RX对应GPIO口10脚。但在使用过程中需要注意,mini串口的波特率随CPU内核时钟的变化而变化,如果使用该串口经常会导致因时钟频率发生变化而产生的错误,因此需要将硬件串口映射到GPIO串口上,以保证串口信息交换的稳定,而硬件串口默认是分配给板载蓝牙使用,所以需要首先释放掉硬件串口,并将其映射到GPIO串口。
读取传感器信息的是自制的STM32F407最小系统板,使用串口1,对应的TXD为PA9,RXD为PA10。树莓派发送定时信息到STM32,STM32在接收到消息后触发串口中断,STM32将当前采集到的温度、PH值、水质浊度和溶解氧信息回传给树莓派,以完成对水质数据信息的获取,树莓派接收信息后刷新网页,以实现数据在网页上的动态更新。
首先,YOLOv5相比于早先的模型,例如Fast R-CNN,先前的检测模型使用的是利用分类器或者定位器来执行检测,先生成可能的大边框,再将模型应用与检测多个位置和比例的图像。将检测到图像较大可能性的区域作为结果。但是从YOLOv3开始,yolo就开始使用完全不同的方法进行预测,将单个神经网络应用于整个图像,将图像划分成多个区域,预测区域边框和概率,因为在测验的时候采用的是全局上下关联生成,所以有较快的速度。
其次,YOLOv5相较于YOLOv3,在性能上有着很大的提升。我们使用的模型是根据YOLOv5s进行更改的,YOLOv5s是YOLOv5系列中特征图宽度最小、深度最浅的模型。所以YOLOv5s的模型是最小的也是需要算力最少的一个模型。通过对比YOLOv5s和YOLOv5的其他模型,可以明显的看到YOLOv5的网络最小,速度最快但是AP精度较低,考虑到我们只检测鱼类的检测,同时树莓派只能通过中央处理器进行运算,无专用的图形处理器,其算力极低。因此yolov5s很适合我们在树莓派上进行目标检测。
如图3所示,YOLOv5主要分为四个部分,分别是输入端,Backbone,Neck,Prediction。
图3 YOLOv5架构
相比YOLOv3输入端增加了Mosaic数据增强,自适应瞄框计算,自适应图片缩放。Mosaic为使用四张图片进行随机缩放剪裁,随机排布的方式进行拼接。使用这种方法可以提高检测数据集的丰富性,随机缩放也可以提升对于小目标的检测。有利于我们在需要检测多条鱼时出现较多小目标的时候的目标检测。自适应瞄框是不断优化初始瞄框,提高瞄框的准确度。在YOLOv3、YOLOv4中,训练不同的数据集时,计算初始锚框的值是通过单独的程序运行的。在网络训练中,网络在初始锚框的基础上输出预测框,进而和真实框groudtruth进行比对,计算两者差距,再反向更新,迭代网络参数。但YOLOv5中将此功能嵌入到代码中,每次训练时,自适应的计算不同训练集中的最佳锚框值。自适应图片缩放可以减少在检测时候的计算量,有利于提高检测速度。
在Backbone加入了Focus结构和CSP结构,在focus结构中以切片操作为主,将图片从608*608*3转化为304*304*12的特征图,经过卷积核之后变成了304*304*32的特征图。CSP结构中采用两种不同的CSP结构,在Yolov5s网络中,CSP1_X结构应用于Backbone主干网络,另一种CSP2_X结构则应用于Neck中,提高了检测的准确度和效率。CSPNet(Cross Stage Partial Network):跨阶段局部网络,可以缓解以前需要大量推理计算的内容。增强了学习能力,并且能够在较少算力和内存的情况下保持较好的准确性。
在Neck中加入了FPN+PAN结构,采用借鉴CSPnet设计的CSP2结构,提高了网络特征的融合能力。在Prediction中加入了GIOU_Loss。
本系统使用Flask框架进行Web页面的显示。拥有丰富的工具包与活跃的开源社区Python语言,在Web开发数据可视化等领域的价值日渐增长。Flask[4]是由Python实现的一个Web微框架,让我们可以使用Python语言快速实现一个网站或Web服务。通过该框架,从后端向前端发送数据,前端拿到数据进行处理,可以通过折线图或者表格的形式,将数据以可视化的方式展现出来,使数据更加客观、更具说服力,能让用户清楚的获得各种数据信息。使用树莓派作为服务器,树莓派使用ubuntu20.04,系统装有Python3,可以完美运行pytorch以进行yolov5的图像识别,同时运行Flask框架比较方便。
现代Web框架使用路由技术来帮助用户记住应用程序URL,可以直接访问所需的页面,而无需从主页导航。route装饰器是用于把一个函数绑定到一个 URL 上。导入Flask类,使用命令“app = Flask(__name__)” 创建此类的实例。使用命令“@app.route(‘’)”设置参数,即可设置路由映射到下一行的函数。比如设置为“/”时,则每次访问该页面时都将执行该路由映射的函数。同时,该行代码还支持扩展,可以使用methods参数指定可接受的请求方式,如“GET”、“POST”等。在html文件中使用“href=”来使用链接,完成路由。使用“$.post(“”)”来使用post请求方式,该操作还可以将前端的参数传送到后端。Flask框架还可以调用”render_template()”方法来渲染模板。在当前目录下,创建一个名为template的子目录,在该目录下保存网页html5文件,即可通过return render_template(index.html’)来渲染模板,使页面更丰富。添加参数,**变量名,即可直接传递改变量。比如输入一个字典的名称即可将该字典中包含的参数和信息传递到后端。
通过该方式传递温度信息、水质信息和PH值到网页上进行显示。图4为页面显示结果。
图4 Web端目标检测结果显示
本系统设计基于传感器与机器学习方案,实现了基于YOLOv5的鱼塘养殖系统。通过对多种传感器进行分析和比对,综合了系统成本及传感器精度等因素,选取了较为合适的传感器,以实现对水质数据的测量。同时,本文通过树莓派系统和自主搭建的基于FLASK的网站,实现了对水质数据的网络传输以及存储,并且为用户提供了清晰的用户界面,为用户提供了便利。同时,本方案借助机器学习及YOLOv5s模型,对常用鱼塘养殖鱼类进行分析,能够快速准确的识别常用鱼类,方便了用户对不同的鱼类的分辨,实现了对鱼类的智能识别功能。