【算法介绍】
基于YOLOv8的102种昆虫检测系统是一款高效、准确的昆虫识别工具,它利用YOLOv8这一先进的目标检测算法,实现了对102种不同昆虫的实时检测与识别。该系统在农业、生态研究、生物多样性保护等多个领域具有广泛的应用价值。
YOLOv8算法以其高效、准确和易部署的特点著称,它通过优化网络结构和损失函数,显著提升了检测性能和速度。该系统通过采集大量包含102种昆虫的图像数据,并进行精细标注,构建了一个高质量的训练数据集。利用这一数据集对YOLOv8模型进行训练,模型能够学习到各种昆虫的特征,从而实现对它们的准确识别。
在实际应用中,用户可以通过摄像头或视频文件输入昆虫的实时图像或视频数据,系统能够迅速检测出图像中的昆虫种类,并在界面上以可视化形式展示检测结果。此外,该系统还支持动态调节模型置信度阈值,以满足不同场景下的检测需求。
总的来说,基于YOLOv8的102种昆虫检测系统为昆虫识别和监测提供了一种全新的解决方案,具有广阔的应用前景和重要的实用价值。
【效果展示】
【测试环境】
windows10
anaconda3+python3.8
torch==1.9.0+cu111
ultralytics==8.2.70
【模型可以检测出类别】
Adristyrannus
Aleurocanthus-spiniferus
Ampelophaga
Aphis-citricola-Vander-Goot
Apolygus lucorum
Bactrocera-tsuneonis
Beet spot flies
Brevipoalpus lewisi McGregor
Ceroplastes-rubens
Chlumetia-transversa
Chrysomphalus-aonidum
Cicadella viridis
Cicadellidae
Colomerus vitis
Dacus-dorsalis-Hendel-
Dasineura-sp
Deporaus-marginatus-Pascoe
Erythroneura-apicalis
Icerya-purchasi-Maskell
Lawana-imitata-Melichar
Limacodidae
Locustoidea
Lycorma delicatula
Mango-flat-beak-leafhopper
Miridae
Nipaecoccus-vastalor
Panonchus-citri-McGregor
Papilio-xuthus
Parlatoria-zizyphus-Lucus
Phyllocnistis-citrella-Stainton
Phyllocoptes-oleiverus-ashmead
Pieris canidia
Polyphagotars onemus latus
Potosiabre vitarsis
Prodenia-litura
Pseudococcus comstocki Kuwana
Rhytidodera-bowrinii-white
Rice Stemfly
Salurnis-marginella-Guerr
Scirtothrips-dorsalis-Hood
Sternochetus-frigidus
Tetradacus-c-Bactrocera-minax
Thrips
Toxoptera-aurantii
Toxoptera-citricidus
Trialeurodes-vaporariorum
Unaspis-yanonensis
Viteus vitifoliae
Xylotrechus
alfalfa plant bug
alfalfa seed chalcid
alfalfa weevil
aphids
army worm
asiatic rice borer
beet army worm
beet fly
beet weevil
bird cherry-oataphid
black cutworm
blister beetle
brown plant hopper
cabbage army worm
cerodonta denticornis
corn borer
english grain aphid
flax budworm
flea beetle
grain spreader thrips
green bug
grub
large cutworm
legume blister beetle
longlegged spider mite
lytta polita
meadow moth
mole cricket
odontothrips-loti
oides decempunctata
paddy stem maggot
parathrene regalis
peach borer
penthaleus major
red spider
rice gall midge
rice leaf caterpillar
rice leaf roller
rice leafhopper
rice shell pest
rice water weevil
sericaorient alismots chulsky
small brown plant hopper
tarnished plant bug
therioaphis maculata Buckton
wheat blossom midge
wheat phloeothrips
wheat sawfly
white backed plant hopper
white margined moth
wireworm
yellow cutworm
yellow rice borer
【训练信息】
参数 | 值 |
训练集图片数 | 6718 |
验证集图片数 | 1923 |
训练map | 60.5% |
训练精度(Precision) | 65.8% |
训练召回率(Recall) | 55.4% |
【相关数据集】
https://blog.csdn.net/FL1623863129/article/details/135290995
【训练数据集(数据集有优化可能与模型训练数量存在差异)】
https://blog.csdn.net/FL1768317420/article/details/141784439
【部分实现源码】
class Ui_MainWindow(QtWidgets.QMainWindow):
signal = QtCore.pyqtSignal(str, str)
def setupUi(self):
self.setObjectName("MainWindow")
self.resize(1280, 728)
self.centralwidget = QtWidgets.QWidget(self)
self.centralwidget.setObjectName("centralwidget")
self.weights_dir = './weights'
self.picture = QtWidgets.QLabel(self.centralwidget)
self.picture.setGeometry(QtCore.QRect(260, 10, 1010, 630))
self.picture.setStyleSheet("background:black")
self.picture.setObjectName("picture")
self.picture.setScaledContents(True)
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(10, 10, 81, 21))
self.label_2.setObjectName("label_2")
self.cb_weights = QtWidgets.QComboBox(self.centralwidget)
self.cb_weights.setGeometry(QtCore.QRect(10, 40, 241, 21))
self.cb_weights.setObjectName("cb_weights")
self.cb_weights.currentIndexChanged.connect(self.cb_weights_changed)
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(10, 70, 72, 21))
self.label_3.setObjectName("label_3")
self.hs_conf = QtWidgets.QSlider(self.centralwidget)
self.hs_conf.setGeometry(QtCore.QRect(10, 100, 181, 22))
self.hs_conf.setProperty("value", 25)
self.hs_conf.setOrientation(QtCore.Qt.Horizontal)
self.hs_conf.setObjectName("hs_conf")
self.hs_conf.valueChanged.connect(self.conf_change)
self.dsb_conf = QtWidgets.QDoubleSpinBox(self.centralwidget)
self.dsb_conf.setGeometry(QtCore.QRect(200, 100, 51, 22))
self.dsb_conf.setMaximum(1.0)
self.dsb_conf.setSingleStep(0.01)
self.dsb_conf.setProperty("value", 0.25)
self.dsb_conf.setObjectName("dsb_conf")
self.dsb_conf.valueChanged.connect(self.dsb_conf_change)
self.dsb_iou = QtWidgets.QDoubleSpinBox(self.centralwidget)
self.dsb_iou.setGeometry(QtCore.QRect(200, 160, 51, 22))
self.dsb_iou.setMaximum(1.0)
self.dsb_iou.setSingleStep(0.01)
self.dsb_iou.setProperty("value", 0.45)
self.dsb_iou.setObjectName("dsb_iou")
self.dsb_iou.valueChanged.connect(self.dsb_iou_change)
self.hs_iou = QtWidgets.QSlider(self.centralwidget)
self.hs_iou.setGeometry(QtCore.QRect(10, 160, 181, 22))
self.hs_iou.setProperty("value", 45)
self.hs_iou.setOrientation(QtCore.Qt.Horizontal)
self.hs_iou.setObjectName("hs_iou")
self.hs_iou.valueChanged.connect(self.iou_change)
self.label_4 = QtWidgets.QLabel(self.centralwidget)
self.label_4.setGeometry(QtCore.QRect(10, 130, 72, 21))
self.label_4.setObjectName("label_4")
self.label_5 = QtWidgets.QLabel(self.centralwidget)
self.label_5.setGeometry(QtCore.QRect(10, 210, 72, 21))
self.label_5.setObjectName("label_5")
self.le_res = QtWidgets.QTextEdit(self.centralwidget)
self.le_res.setGeometry(QtCore.QRect(10, 240, 241, 400))
self.le_res.setObjectName("le_res")
self.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(self)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1110, 30))
self.menubar.setObjectName("menubar")
self.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(self)
self.statusbar.setObjectName("statusbar")
self.setStatusBar(self.statusbar)
self.toolBar = QtWidgets.QToolBar(self)
self.toolBar.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
self.toolBar.setObjectName("toolBar")
self.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
self.actionopenpic = QtWidgets.QAction(self)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/images/1.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.actionopenpic.setIcon(icon)
self.actionopenpic.setObjectName("actionopenpic")
self.actionopenpic.triggered.connect(self.open_image)
self.action = QtWidgets.QAction(self)
icon1 = QtGui.QIcon()
icon1.addPixmap(QtGui.QPixmap(":/images/2.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.action.setIcon(icon1)
self.action.setObjectName("action")
self.action.triggered.connect(self.open_video)
self.action_2 = QtWidgets.QAction(self)
icon2 = QtGui.QIcon()
icon2.addPixmap(QtGui.QPixmap(":/images/3.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.action_2.setIcon(icon2)
self.action_2.setObjectName("action_2")
self.action_2.triggered.connect(self.open_camera)
self.actionexit = QtWidgets.QAction(self)
icon3 = QtGui.QIcon()
icon3.addPixmap(QtGui.QPixmap(":/images/4.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.actionexit.setIcon(icon3)
self.actionexit.setObjectName("actionexit")
self.actionexit.triggered.connect(self.exit)
self.toolBar.addAction(self.actionopenpic)
self.toolBar.addAction(self.action)
self.toolBar.addAction(self.action_2)
self.toolBar.addAction(self.actionexit)
self.retranslateUi()
QtCore.QMetaObject.connectSlotsByName(self)
self.init_all()
【使用步骤】
使用步骤:
(1)首先根据官方框架https://github.com/ultralytics/ultralytics安装教程安装好yolov8环境,并安装好pyqt5
(2)切换到自己安装的yolov8环境后,并切换到源码目录,执行python main.py即可运行启动界面,进行相应的操作即可
【提供文件】
python源码
yolov8n.onnx模型(不提供pytorch模型)
训练的map,P,R曲线图(在weights\results.png)
测试图片(在test_img文件夹下面)
【源码下载地址】
https://download.csdn.net/download/FL1623863129/88600855