深度学习目标检测算法 基于训练好的YOLOv8权重建立一个深度学习医疗垃圾检测系统
以下文字及代码仅供参考。
文章目录

医疗垃圾检测数据集2756张,8比2划分为训练集和验证集,训练集2204张,验证集552张,9类,分类为:‘Plastic bags’, ‘Metal’, ‘IV Bag’, ‘Cotton with blood’, ‘Medicine Bottle’, ‘Glucose Drip’, ‘IV’, ‘syringe’, ‘vials’
医疗垃圾检测 YOLO 数据集(类别中英对照表)
中文类别名称 | 英文类别名称 | 图片数量 | 标注框数量 | 训练集图片数(约80%) | 验证集图片数(约20%) |
---|---|---|---|---|---|
塑料袋 | Plastic bags | 339 | 633 | 271 | 68 |
金属 | Metal | 438 | 591 | 350 | 88 |
输液袋 | IV Bag | 380 | 586 | 304 | 76 |
带血棉球 | Cotton with blood | 533 | 583 | 426 | 107 |
药瓶 | Medicine Bottle | 235 | 554 | 188 | 47 |
葡萄糖输液管 | Glucose Drip | 374 | 652 | 299 | 75 |
静脉导管 | IV | 452 | 565 | 362 | 90 |
注射器 | Syringe | 450 | 918 | 360 | 90 |
小药瓶/安瓿瓶 | Vials | 430 | 1052 | 344 | 86 |
总计 | Total | 2756 | 6114 | 2204 (80%) | 552 (20%) |
同学,从环境设置、数据准备、模型训练、超参数调整、模型评估以及如何进行单张和批量图像的推理。
环境搭建
确保安装了必要的依赖库:
pip install ultralytics opencv-python-headless
数据配置
tx同学,首先,创建一个data.yaml
文件来描述你的数据集路径和类别信息。假设你的数据已经按照如下结构组织:
dataset/
images/
train/
val/
labels/
train/
val/
data.yaml
内容如下:
train: ./dataset/images/train/
val: ./dataset/images/val/
nc: 9 # 类别数量
names: ['Plastic bags', 'Metal', 'IV Bag', 'Cotton with blood', 'Medicine Bottle', 'Glucose Drip', 'IV', 'Syringe', 'Vials'] # 类别名称
模型训练
加载YOLOv8模型并开始训练:
from ultralytics import YOLO
# 加载预训练的YOLOv8模型或从头开始训练
model = YOLO('yolov8n.yaml') # 使用YOLOv8 nano架构作为示例
# 开始训练
results = model.train(data='path/to/data.yaml', epochs=100, imgsz=640, batch=16)
在这个例子中,我们设置了epochs
为100,输入图像尺寸imgsz
为640,批次大小batch
为16。你可以根据硬件资源调整这些参数。
超参数配置
在调用model.train()
时,可以通过传递额外的参数来调整超参数,例如学习率(lr0
)、动量(momentum
)等。更多选项可以参考官方文档。
模型推理
单张图片推理
# 对单张图片进行推理
results = model.predict(source='path/to/test_image.jpg', save=True, conf=0.25)
for result in results:
print(result.boxes) # 输出检测框信息
批量推理
对整个目录进行批量推理:
# 对整个目录进行批量推理
results = model.predict(source='path/to/test_dir/', save=True, conf=0.25)
性能评估
在验证集上评估模型性能:
metrics = model.val() # 在验证集上评估模型性能
print(f"Model mAP: {metrics.box.map}") # 输出mAP值
完整代码示例
以下是完整的代码示例,包括环境搭建、数据配置、模型训练、超参数配置、模型推理及性能评估:
from ultralytics import YOLO
import os
# 确保已安装必要库
# pip install ultralytics opencv-python-headless
# 加载YOLOv8模型
model = YOLO('yolov8n.yaml')
# 训练模型
results = model.train(data='path/to/data.yaml', epochs=100, imgsz=640, batch=16)
# 调整超参数示例
# 更多超参数可查阅官方文档
# results = model.train(data='path/to/data.yaml', epochs=100, imgsz=640, batch=16, lr0=0.01, momentum=0.937)
# 单张图片推理
result = model.predict(source='path/to/test_image.jpg', save=True, conf=0.25)
# 批量推理
results = model.predict(source='path/to/test_dir/', save=True, conf=0.25)
# 性能评估
metrics = model.val()
print(f"Model mAP: {metrics.box.map}")
请将path/to/data.yaml
、path/to/test_image.jpg
和path/to/test_dir/
替换为你实际的文件路径。通过上述步骤,你应该能够成功地搭建环境、训练模型、进行推理,并评估其性能。
仅供参考
基于训练好的YOLOv8权重建立一个深度学习医疗垃圾检测系统,涉及从加载模型到部署的全过程。以下是详细的步骤和代码示例:
1. 环境准备
确保你的环境中安装了所有必要的依赖库。对于YOLOv8,可以这样安装:
pip install ultralytics opencv-python-headless
2. 加载训练好的模型权重
首先,你需要加载之前训练好的YOLOv8模型权重。假设你已经保存了训练好的模型文件(如best.pt
)。
from ultralytics import YOLO
# 加载训练好的模型权重
model = YOLO('path/to/your/best.pt') # 替换为你的模型权重文件路径
3. 模型推理
单张图片推理
下面是一个对单张图片进行推理的例子:
import cv2
def detect_image(image_path):
results = model.predict(source=image_path, save=True, conf=0.25) # 设置置信度阈值
for result in results:
img = cv2.imread(image_path)
for box in result.boxes:
x1, y1, x2, y2 = [int(x) for x in box.xyxy]
cls = int(box.cls.item())
label = f'{result.names[cls]} {box.conf.item():.2f}'
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(img, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
cv2.imshow('Detected Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
detect_image('path/to/test_image.jpg') # 替换为你的测试图片路径
批量推理
如果你想对整个目录中的图片进行批量处理,同学,可以这样做:
import os
def detect_images_in_dir(directory_path):
for filename in os.listdir(directory jadx
看起来我的回复被意外截断了。让我们继续完成关于如何进行批量推理的部分,并提供完整的代码示例。
完整的批量推理实现
为了对某个目录下的所有图片进行批量推理并显示结果,你可以使用以下代码:
import os
from ultralytics import YOLO
import cv2
# 加载训练好的模型权重
model = YOLO('path/to/your/best.pt') # 替换为你的模型权重文件路径
def detect_images_in_dir(directory_path):
"""
对指定目录下的所有图片进行推理。
:param directory_path: 存放待检测图片的目录路径
"""
for filename in os.listdir(directory_path):
if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')): # 支持的图片格式
image_path = os.path.join(directory_path, filename)
results = model.predict(source=image_path, save=True, conf=0.25) # 设置置信度阈值
for result in results:
img = cv2.imread(image_path)
for box in result.boxes:
x1, y1, x2, y2 = [int(x) for x in box.xyxy]
cls = int(box.cls.item())
label = f'{result.names[cls]} {box.conf.item():.2f}'
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(img, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
cv2.imshow('Detected Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 调用函数处理特定目录下的所有图片
detect_images_in_dir('path/to/test_dir/') # 替换为你的测试图片目录路径
4. 构建用户界面(可选)
为了让系统更加用户友好,可以考虑构建一个简单的图形用户界面(GUI)。这里给出一个简单的Tkinter例子来打开本地图片并显示检测结果:
import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk
def open_image():
file_path = filedialog.askopenfilename()
if not file_path:
return
results = model.predict(source=file_path, save=False)
img = Image.open(file_path)
img = img.resize((600, 600)) # 根据需要调整大小
img_tk = ImageTk.PhotoImage(img)
# 假设你已经将预测结果绘制回原图
panel.configure(image=img_tk)
panel.image = img_tk
root = tk.Tk()
panel = tk.Label(root)
panel.pack(pady=10)
btn = tk.Button(root, text="Open Image", command=open_image)
btn.pack(side="bottom")
root.mainloop()
5. 部署
-
导出模型:为了方便部署,可以将模型导出为ONNX或其他适合部署的格式。
success = model.export(format="onnx")
-
Web服务:利用Flask或FastAPI创建一个RESTful API服务,接收上传的图片并返回检测结果。
-
移动应用:通过TensorFlow Lite或者ONNX Runtime将模型部署到移动端。
基于训练好的YOLOv8权重建立一个深度学习医疗垃圾检测系统。