红外弱小飞机目标检测数据集,可用于目标检测
红外弱小飞机目标检测数据集可用于目标检测926张图像bmp和xml一一对应类别bird好的下面是一个完整的基于红外弱小飞机目标检测的数据集的实现。我们将涵盖以下内容项目结构依赖项安装数据准备模型训练评估模型推理界面项目介绍数据集介绍名称: 红外弱小飞机目标检测数据集数量: 926张图像标注格式: XMLPascal VOC格式类别:bird (假设这里是指小型无人机或其他弱小飞行器)完整项目结构ir_drone_detection/ ├── main.py ├── train.py ├── evaluate.py ├── infer.py ├── ui_files/ │ ├── infer_ui.ui │ ├── infer_ui.qrc │ └── infer_ui_rc.py ├── datasets/ │ ├── ir_drone/ │ │ ├── images/ │ │ ├── annotations/ │ │ ├── train.txt │ │ └── val.txt ├── best_ir_drone.pt ├── requirements.txt └── data.yaml文件内容requirements.txtopencv-python4.5.3.56 torch1.9.0cu111 PyQt55.15.4 labelme shutil matplotlib scikit-image numpy pandas xml.etree.ElementTree albumentationsdata.yamltrain:./datasets/ir_drone/images/trainval:./datasets/ir_drone/images/valnc:1names:[bird]train.pyimporttorchfromyolov7importtrain# 设置随机种子以保证可重复性torch.manual_seed(42)# 定义数据集路径dataset_configdata.yaml# 训练模型resultstrain.run(imgsz640,batch16,epochs50,datadataset_config,weightsyolov7.pt,nameir_drone,projectruns/train)# 打印训练结果print(results)evaluate.pyfromyolov7importval# 初始化YOLOv7模型model_pathruns/train/ir_drone/weights/best.pt# 评估模型resultsval.run(datadata.yaml,weightsmodel_path,imgsz640,taskval)# 打印评估结果print(results)infer.pyimportsysimportcv2importnumpyasnpimportrandomfromPyQt5.QtWidgetsimportQApplication,QMainWindow,QFileDialog,QMessageBox,QLabel,QPushButton,QVBoxLayout,QWidget,QProgressBarfromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQTimerimporttorchfrompathlibimportPathfromyolov7.utils.generalimportnon_max_suppression,scale_coordsfromyolov7.models.experimentalimportattempt_loadfromyolov7.utils.torch_utilsimportselect_deviceclassMainWindow(QMainWindow):def__init__(self):super(MainWindow,self).__init__()self.setWindowTitle(红外弱小飞机目标检测)self.setGeometry(100,100,800,600)# 初始化YOLOv7模型self.deviceselect_device()self.modelattempt_load(runs/train/ir_drone/weights/best.pt,map_locationself.device)self.strideint(self.model.stride.max())# model strideself.imgsz640# 创建界面元素self.label_displayQLabel(self)self.label_display.setAlignment(Qt.AlignCenter)self.button_select_imageQPushButton(选择图片,self)self.button_select_folderQPushButton(选择文件夹,self)self.button_select_videoQPushButton(选择视频,self)self.button_start_cameraQPushButton(开始摄像头,self)self.button_stop_cameraQPushButton(停止摄像头,self)self.progress_barQProgressBar(self)self.progress_bar.setVisible(False)layoutQVBoxLayout()layout.addWidget(self.label_display)layout.addWidget(self.button_select_image)layout.addWidget(self.button_select_folder)layout.addWidget(self.button_select_video)layout.addWidget(self.button_start_camera)layout.addWidget(self.button_stop_camera)layout.addWidget(self.progress_bar)containerQWidget()container.setLayout(layout)self.setCentralWidget(container)self.button_select_image.clicked.connect(self.select_image)self.button_select_folder.clicked.connect(self.select_folder)self.button_select_video.clicked.connect(self.select_video)self.button_start_camera.clicked.connect(self.start_camera)self.button_stop_camera.clicked.connect(self.stop_camera)self.timerQTimer()self.timer.timeout.connect(self.update_frame)self.capNonedefload_image(self,image_path):framecv2.imread(image_path)resultsself.detect(frame)annotated_frameself.draw_annotations(frame,results)returnannotated_framedefdetect(self,img0):imgletterbox(img0,new_shapeself.imgsz,strideself.stride)[0]imgimg[:,:,::-1].transpose(2,0,1)# BGR to RGB, to 3x416x416imgnp.ascontiguousarray(img)imgtorch.from_numpy(img).to(self.device)imgimg.float()# uint8 to fp16/32img/255.0# 0 - 255 to 0.0 - 1.0ifimg.ndimension()3:imgimg.unsqueeze(0)predself.model(img,augmentFalse)[0]prednon_max_suppression(pred,0.25,0.45,classesNone,agnosticFalse)returnpreddefdraw_annotations(self,frame,results):colors[(random.randint(0,255),random.randint(0,255),random.randint(0,255))for_inrange(len(self.model.names))]fordetinresults:iflen(det):det[:,:4]scale_coords(frame.shape[2:],det[:,:4],frame.shape).round()for*xyxy,conf,clsinreversed(det):labelf{self.model.names[int(cls)]}{conf:.2f}plot_one_box(xyxy,frame,labellabel,colorcolors[int(cls)],line_thickness3)returnframedefdisplay_image(self,frame):rgb_imagecv2.cvtColor(frame,cv2.COLOR_BGR2RGB)h,w,chrgb_image.shape bytes_per_linech*w qt_imageQImage(rgb_image.data,w,h,bytes_per_line,QImage.Format_RGB888)pixmapQPixmap.fromImage(qt_image)self.label_display.setPixmap(pixmap.scaled(self.label_display.width(),self.label_display.height()))defselect_image(self):optionsQFileDialog.Options()file_path,_QFileDialog.getOpenFileName(self,选择图片,,图片 (*.bmp *.jpg *.jpeg *.png);;所有文件 (*),optionsoptions)iffile_path:annotated_frameself.load_image(file_path)self.display_image(annotated_frame)defselect_folder(self):folder_pathQFileDialog.getExistingDirectory(self,选择文件夹)iffolder_path:files[os.path.join(folder_path,f)forfinos.listdir(folder_path)iff.endswith((.bmp,.jpg,.jpeg,.png))]total_fileslen(files)self.progress_bar.setMaximum(total_files)self.progress_bar.setValue(0)self.progress_bar.setVisible(True)fori,file_pathinenumerate(files):annotated_frameself.load_image(file_path)self.display_image(annotated_frame)self.progress_bar.setValue(i1)self.progress_bar.setVisible(False)defselect_video(self):optionsQFileDialog.Options()file_path,_QFileDialog.getOpenFileName(self,选择视频,,视频 (*.mp4 *.avi);;所有文件 (*),optionsoptions)iffile_path:self.process_video(file_path)defprocess_video(self,video_path):self.capcv2.VideoCapture(video_path)whileself.cap.isOpened():ret,frameself.cap.read()ifnotret:breakresultsself.detect(frame)annotated_frameself.draw_annotations(frame,results)self.display_image(annotated_frame)ifcv2.waitKey(1)0xFFord(q):breakself.cap.release()defstart_camera(self):self.capcv2.VideoCapture(0)self.timer.start(30)defstop_camera(self):self.timer.stop()ifself.capisnotNone:self.cap.release()self.label_display.clear()defupdate_frame(self):ret,frameself.cap.read()ifnotret:returnresultsself.detect(frame)annotated_frameself.draw_annotations(frame,results)self.display_image(annotated_frame)defletterbox(img,new_shape(640,640),color(114,114,114),autoTrue,scaleFillFalse,scaleupTrue,stride32):shapeimg.shape[:2]# current shape [height, width]rmin(new_shape[0]/shape[0],new_shape[1]/shape[1])ifnotscaleup:# only scale down, do not scale up (for better test mAP)rmin(r,1.0)ratior,r# width, height ratiosnew_unpadint(round(shape[1]*r)),int(round(shape[0]*r))dw,dhnew_shape[1]-new_unpad[0],new_shape[0]-new_unpad[1]# wh paddingifauto:# minimum rectangledw,dhnp.mod(dw,stride),np.mod(dh,stride)# wh paddingelifscaleFill:# stretchdw,dh0.0,0.0new_unpad(new_shape[1],new_shape[0])rationew_shape[1]/shape[1],new_shape[0]/shape[0]# width, height ratiosdw/2# divide padding into 2 sidesdh/2ifshape[::-1]!new_unpad:# resizeimgcv2.resize(img,new_unpad,interpolationcv2.INTER_LINEAR)top,bottomint(round(dh-0.1)),int(round(dh0.1))left,rightint(round(dw-0.1)),int(round(dw0.1))imgcv2.copyMakeBorder(img,top,bottom,left,right,cv2.BORDER_CONSTANT,valuecolor)# add borderreturnimg,ratio,(dw,dh)defplot_one_box(x,img,colorNone,labelNone,line_thicknessNone):tlline_thicknessorround(0.002*(img.shape[0]img.shape[1])/2)1# line/font thicknessc1,c2(int(x[0]),int(x[1])),(int(x[2]),int(x[3]))cv2.rectangle(img,c1,c2,color,thicknesstl,lineTypecv2.LINE_AA)iflabel:tfmax(tl-1,1)# font thicknesst_sizecv2.getTextSize(label,0,fontScaletl/3,thicknesstf)[0]c2c1[0]t_size[0],c1[1]-t_size[1]-3cv2.rectangle(img,c1,c2,color,-1,cv2.LINE_AA)# filledcv2.putText(img,label,(c1[0],c1[1]-2),0,tl/3,[225,255,255],thicknesstf,lineTypecv2.LINE_AA)if__name____main__:appQApplication(sys.argv)windowMainWindow()window.show()sys.exit(app.exec_())运行步骤总结克隆项目仓库如果有的话gitclone https://github.com/yourusername/ir_drone_detection.gitcdir_drone_detection安装依赖项conda create--namedrone_envpython3.8conda activate drone_env pipinstall-rrequirements.txt下载YOLOv7代码gitclone https://github.com/WongKinYiu/yolov7.gitcdyolov7 pipinstall-rrequirements.txtcd..准备数据集将你的红外弱小飞机图像放入datasets/ir_drone/images目录。将对应的XML标注文件放入datasets/ir_drone/annotations目录。使用脚本划分数据集为训练集和验证集并生成train.txt和val.txt文件。示例脚本split_dataset.pyimportosimportrandomdefsplit_dataset(image_dir,annotation_dir,output_dir,train_ratio0.8):images[fforfinos.listdir(image_dir)iff.endswith((.bmp,.jpg,.jpeg,.png))]num_trainint(len(images)*train_ratio)train_imagesimages[:num_train]val_imagesimages[num_train:]withopen(os.path.join(output_dir,train.txt),w)asf:forimg_nameintrain_images:f.write(f{os.path.join(image_dir,img_name)}\n)f.write(f{os.path.join(annotation_dir,img_name.replace(.bmp,.xml).replace(.jpg,.xml).replace(.jpeg,.xml).replace(.png,.xml))}\n)withopen(os.path.join(output_dir,val.txt),w)asf:forimg_nameinval_images:f.write(f{os.path.join(image_dir,img_name)}\n)f.write(f{os.path.join(annotation_dir,img_name.replace(.bmp,.xml).replace(.jpg,.xml).replace(.jpeg,.xml).replace(.png,.xml))}\n)# 示例用法split_dataset(./datasets/ir_drone/images,./datasets/ir_drone/annotations,./datasets/ir_drone)训练模型python train.py评估模型python evaluate.py运行推理界面python infer.py操作界面选择图片进行检测点击“选择图片”按钮选择一张图片进行检测。选择文件夹批量检测点击“选择文件夹”按钮选择一个包含多张图片的文件夹进行批量检测。选择视频进行检测点击“选择视频”按钮选择一个视频文件进行检测。摄像头检测点击“开始摄像头”按钮使用摄像头进行实时检测点击“停止摄像头”按钮停止检测。详细解释requirements.txt列出项目所需的所有Python包及其版本。data.yaml配置数据集路径和类别信息用于YOLOv7模型训练。train.py加载预训练的YOLOv7模型并使用自定义数据集进行训练。训练完成后打印训练结果。evaluate.py加载训练好的YOLOv7模型并对验证集进行评估打印评估结果。infer.py创建一个GUI应用程序支持选择图片、文件夹、视频或使用摄像头进行实时检测并显示检测结果。的信息和代码能够帮助你顺利实施和优化你的红外弱小飞机目标检测系统。

相关新闻

AI落地为什么失败?—95%的企业AI项目死在workflow上

AI落地为什么失败?—95%的企业AI项目死在workflow上

来源: BG2 Pod / YouTube 嘉宾: Ali Ghodsi(Databricks CEO)、Arvind Jain(Glean CEO) 主持人: Apoorv Agrawal(Altimeter合伙人) 总时长: 45分00秒 博客日期…

2026/6/29 8:58:11阅读更多 →
TikTok加密参数逆向实战:从SSL Pinning绕过到算法黑盒调用

TikTok加密参数逆向实战:从SSL Pinning绕过到算法黑盒调用

1. 项目概述与核心价值最近在移动安全与数据采集领域,TikTok的加密参数逆向一直是个热门且颇具挑战性的话题。无论是出于安全研究、竞品分析,还是构建合规的数据处理管道,理解其客户端与服务器之间复杂的通信加密机制都至关重要。这个项目标题…

2026/6/29 10:20:15阅读更多 →
TradingView股票筛选器Python包终极指南:三步实现自动化交易分析

TradingView股票筛选器Python包终极指南:三步实现自动化交易分析

TradingView股票筛选器Python包终极指南:三步实现自动化交易分析 【免费下载链接】TradingView-Screener A package that lets you create TradingView screeners in Python 项目地址: https://gitcode.com/gh_mirrors/tr/TradingView-Screener TradingView-…

2026/6/29 9:53:19阅读更多 →
阿里云ECS云服务器搭建Typecho博客:数据库创建Shell脚本与后台优化配置完全指南

阿里云ECS云服务器搭建Typecho博客:数据库创建Shell脚本与后台优化配置完全指南

一、前言:为什么选择阿里云ECS Typecho 在众多博客平台中,Typecho凭借其轻量、高效、简洁的特点,成为许多开发者与技术写作爱好者的首选。与WordPress相比,Typecho的核心代码仅约200KB,静态资源占用不足5MB&#xff…

2026/6/30 8:33:37阅读更多 →
ArkUI-X简介:跨平台框架架构与运行原理(99)

ArkUI-X简介:跨平台框架架构与运行原理(99)

ArkUI-X 是由 OpenHarmony 跨平台应用开发框架 TSG(技术指导委员会)孵化的开源项目。它基于 OpenHarmony 官方原生框架 ArkUI 进行扩展,旨在让开发者基于一套主代码,就能构建支持多平台(如 HarmonyOS/OpenHarmony、And…

2026/6/30 8:33:37阅读更多 →
利用eBPF+LSM实现内核级零侵扰HIDS(主机入侵检测系统)

利用eBPF+LSM实现内核级零侵扰HIDS(主机入侵检测系统)

摘要:传统的 HIDS(主机入侵检测)通常依赖 Agent 轮询文件或拦截 Syscall,极易被高级攻击者绕过(如 Hook libc)。本文将深入 Linux LSM(Linux Security Module)机制,结合 …

2026/6/30 8:33:37阅读更多 →
CAPL自动化实战:UDS安全访问Lv1的脚本实现与工程集成

CAPL自动化实战:UDS安全访问Lv1的脚本实现与工程集成

1. 为什么需要自动化UDS安全访问? 在车载ECU测试中,UDS(Unified Diagnostic Services)协议的安全访问机制是保护车辆关键功能的重要屏障。每次进行诊断操作前,都需要先通过$27服务完成安全解锁。手动操作不仅效率低下…

2026/6/30 8:33:37阅读更多 →
深入解析MSPM0 I2C模块:从协议基础到FIFO、时钟超时等高级特性配置

深入解析MSPM0 I2C模块:从协议基础到FIFO、时钟超时等高级特性配置

1. 项目概述与I2C总线核心价值 在嵌入式系统开发中,如何让微控制器(MCU)与周边的传感器、存储器、显示屏等芯片高效、可靠地“对话”,是每个工程师都要面对的基础课题。I2C(Inter-Integrated Circuit)总线协…

2026/6/30 8:33:37阅读更多 →
仅限首批200名开发者获取:ChatGPT-Vision企业级视频分析SDK(含OCR+动作识别+异常事件检测三合一模块)

仅限首批200名开发者获取:ChatGPT-Vision企业级视频分析SDK(含OCR+动作识别+异常事件检测三合一模块)

更多请点击: https://intelliparadigm.com 第一章:ChatGPT 视频理解 ChatGPT 本身并不原生支持视频输入,其核心架构基于文本 token 的处理。然而,随着多模态技术演进,开发者可通过“视频→帧提取→视觉描述→文本注入…

2026/6/30 8:28:36阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/6/30 4:03:30阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/6/30 4:36:27阅读更多 →
为什么你需要Destiny 2 Solo Enabler:技术原理与实战指南

为什么你需要Destiny 2 Solo Enabler:技术原理与实战指南

为什么你需要Destiny 2 Solo Enabler:技术原理与实战指南 【免费下载链接】Destiny-2-Solo-Enabler Repo containing the C# and XAML code for the D2SE program. Included is also the dependency for the program, and image asset. 项目地址: https://gitcode…

2026/6/30 0:02:58阅读更多 →
第六章:PowerPoint 2010 核心功能与实战应用 —— 从入门到精通

第六章:PowerPoint 2010 核心功能与实战应用 —— 从入门到精通

1. PowerPoint 2010基础操作全攻略 刚接触PowerPoint 2010时,很多人会被它复杂的界面吓到。其实只要掌握几个核心区域,就能快速上手。我最开始用PPT时,经常找不到功能按钮在哪,后来发现主要操作都集中在顶部功能区。 工作窗口主要…

2026/6/30 0:02:58阅读更多 →
XGBoost超参数实战:从理论到调优策略

XGBoost超参数实战:从理论到调优策略

1. XGBoost超参数基础认知 第一次接触XGBoost时,我被它那密密麻麻的参数列表吓到了。这感觉就像面对一架波音747的驾驶舱——每个按钮都可能有神奇的效果,但按错了就可能坠机。经过多年实战,我发现其实掌握十几个核心参数就能解决90%的问题。…

2026/6/30 0:02:59阅读更多 →