基于YOLO的舰船识别智能系统
📖 1. 项目介绍 (Project Introduction)
1.1 研究背景与意义
随着全球海洋经济的蓬勃发展和海洋权益维护需求的日益增长,海域监控在海事监管、港口调度、海上搜救及国防安全等领域发挥着至关重要的作用。传统的舰船监测手段主要依赖人工瞭望和雷达监控,存在以下局限性:
- 效率低下:面对海量视频监控数据,人工排查耗时费力,易产生视觉疲劳。
- 信息维度单一:传统雷达和视觉算法仅能提供目标位置,难以对舰船的具体类型、作业状态及异常行为进行深度语义分析。
本项目旨在构建一套高精度、智能化、端到端的舰船识别系统。通过结合目标检测技术(YOLOv8)与多模态大语言模型(LLaVA),不仅实现对海面舰船的实时定位与计数,还能对目标进行深层次的特征描述与态势评估,从而实现从“看得见”到“看得懂”的智能化跨越。
1.2 项目目标
- 高精度检测:在复杂海况(如波浪、反光、云雾遮挡)下,实现对舰船目标的准确检测与定位。
- 智能语义分析:利用大模型能力,自动识别舰船类型(货船、军舰等)、分析航行状态及显著外观特征。
- 全天候实时监控:构建可视化的交互平台,支持视频流的实时处理与告警。
📂 2. 数据集介绍 (Dataset Description)
2.1 数据来源与构成
本项目使用 Ships in Aerial Images(航拍舰船数据集)进行模型训练与评估。该数据集主要来源于卫星遥感及无人机航拍影像,涵盖了不同光照、不同角度及不同海况下的舰船图像。
- 数据集路径:
data/ships-aerial-images/ - 总样本量: 包含数千张高分辨率航拍图像。
- 类别定义:
- ship (舰船): 包含各类海面船只目标。
2.2 数据预处理
为了满足 YOLOv8 模型的输入要求并提升泛化能力,对原始数据进行了以下预处理:
- 格式转换: 将标注数据统一转换为 YOLO 格式 (
class_id x_center y_center width height)。 - 数据集划分: 按照 7:2:1 的比例将数据集随机划分为训练集 (Train)、验证集 (Validation) 和测试集 (Test)。
- 数据增强: 在训练过程中采用了 Mosaic 马赛克增强、随机翻转、HSV 色彩空间变换等技术,以增强模型对复杂背景和小目标的鲁棒性。
🧠 3. 核心算法 (Core Algorithms)
本系统采用 “检测 + 分析” 的级联架构。
3.1 目标检测算法:YOLOv8 (You Only Look Once v8)
YOLOv8 是目前最先进的单阶段目标检测算法之一,具有检测速度快、精度高、易部署等特点。
- Backbone (主干网络): 采用 CSPDarknet 结构,引入 C2f 模块,丰富了梯度流,增强了特征提取能力。
- Neck (颈部网络): 使用 PANet (Path Aggregation Network) 结构,自顶向下和自底向上双向融合多尺度特征,能有效检测不同大小的舰船目标。
- Head (检测头): 采用 Decoupled Head(解耦头)设计,将分类任务与回归任务分离,使用 Anchor-Free 策略,直接预测目标中心与宽高。
- Loss Function: 使用 CIoU Loss 进行边界框回归,VFL Loss 进行分类,显著提升了收敛速度与定位精度。
3.2 多模态分析算法:LLaVA (Large Language-and-Vision Assistant)
LLaVA 是一种基于指令微调的多模态大模型,能够理解图像并进行自然语言对话。
- Vision Encoder: 使用 CLIP (ViT-L/14) 作为视觉编码器,将图像转换为视觉特征向量。
- Projection Layer: 通过线性投影层将视觉特征映射到语言模型的嵌入空间。
- LLM (语言模型): 基于 LLaMA/Vicuna 构建,接收图像特征与文本提示 (Prompt),生成关于舰船类型、特征及状态的详细中文描述。
🏗️ 4. 系统架构 (System Architecture)
系统采用 B/S (Browser/Server) 架构设计,前后端分离,模块化开发。
4.1 功能模块
- Web 交互层: 基于 Gradio 搭建,提供图片上传、视频流控制、参数设置及结果展示界面。
- 核心检测层: 封装 YOLOv8 模型,负责对输入流进行逐帧检测,输出目标边界框(BBox)与置信度。
- 深度分析层: 调用 Ollama 接口运行 LLaVA 模型,根据检测结果生成详细的中文分析报告。
- 数据管理层: 使用 SQLite 数据库存储历史检测记录,支持数据持久化与导出。
💻 5. 核心代码 (Core Code)
5.1 舰船检测逻辑 (src/ship_recognition_system.py)
系统的核心类 ShipRecognitionSystem 封装了检测流程:
class ShipRecognitionSystem:
def detect_image(self, image_path, conf=0.25, use_llava=False):
# 1. YOLOv8 目标检测
results, plot_img = self.detector.predict(image_path, conf=conf)
ship_detected = False
detections = []
# 2. 解析检测结果
if len(results) > 0:
for box in results[0].boxes:
cls_id = int(box.cls[0])
if self.class_names[cls_id] == 'ship':
ship_detected = True
# ... 提取坐标与置信度 ...
# 3. LLaVA 深度分析 (可选)
report = ""
if use_llava and ship_detected:
analyze_result = self.analyzer.analyze_with_detection(
image_path,
{"detections": detections},
prompt_key="ship_analysis"
)
report = analyze_result.get('llava_analysis', '')
return plot_img, detections, report, save_path, ship_detected
5.2 多模态分析器 (src/llava_analyzer.py)
负责构建 Prompt 并与 LLaVA 模型交互:
class LLaVAAnalyzer:
def analyze_with_detection(self, image_path, detection_info, prompt_key):
# 构建 Prompt,结合视觉信息与任务指令
base_prompt = self.config['llava']['prompts'][prompt_key]
# 调用 Ollama API 进行推理
response = self.client.generate(
model=self.model_name,
prompt=base_prompt,
images=[encoded_image]
)
return {"llava_analysis": response['response']}
🛠️ 6. 使用指南 (Usage Guidelines)
6.1 环境部署
系统支持 Windows/Linux 平台,推荐使用 NVIDIA GPU 加速。
# 1. 克隆项目
git clone [repository_url]
cd Ship-Recog
# 2. 安装 Python 依赖
pip install -r requirements.txt
# 3. (可选) 安装 Ollama 用于 LLaVA 分析
# 访问 https://ollama.ai 下载并运行 'ollama run llava'
6.2 启动系统
启动 Web 可视化界面:
python run_web_advanced.py
启动后访问 http://localhost:7860 即可使用。