当前位置: 首页 > news >正文

yolo地裂缝(wsl+ubuntu)

yolov12:YOLOv12: 以注意力为中心的实时目标检测器 - GitCode --- yolov12:YOLOv12: Attention-Centric Real-Time Object Detectors - GitCode

一、环境

环境配置

YOLOv12保姆级教程(win系统和ubuntu系统均可使用)_yolov12代码-CSDN博客

git clone 代码

权重下载: 此处直接选择权重文件【YOLO12n】下载即可
在这里插入图片描述

wget https://github.com/Dao-AILab/flash-attention/releases/download/v2.7.3/flash_attn-2.7.3+cu11torch2.2cxx11abiFALSE-cp311-cp311-linux_x86_64.whl

conda create -n yolov12 python=3.11

conda activate yolov12

在pycharm中添加解释器

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

----------安装requirements.txt文件,后面加清华的镜像源效果更好。

pip install -e .

先检查下torch的版本以及cuda是否可用

搭建YOLOv8实现裂缝缺陷识别全流程教程:从源码下载到模型测试_python 3.12.3 yolo8-CSDN博客

根目录创建一个py文件,名为cuda检查.py,放置如下代码并且执行:

import torch
import numpy as np# 检查GPU、Cudaprint("numpy版本:"+np.__version__)
print("CUDA是否可用=>", torch.cuda.is_available())
print("pytorch版本=>"+torch.__version__)
print("是否支持CUDA=>"+str(torch.cuda.is_available()))
# 如果有 GPU 可用,打印 GPU 数量和名称
if torch.cuda.is_available():print("GPU设备数量=>", torch.cuda.device_count())print("当前使用GPU=>", torch.cuda.get_device_name(torch.cuda.current_device()))
else:print("没有GPU可用,当前将运行在CPU上")

如果没问题,会显示如下

如果你的pytorch显示cpu版本的,且numpy提示报错了,看博客解决

二、数据集

【免费下载】 YOLO地面裂缝数据集-CSDN博客

搭建YOLOv8实现裂缝缺陷识别全流程教程:从源码下载到模型测试_python 3.12.3 yolo8-CSDN博客

我选择第二个链接的数据集,下载splitata,换成下图的结构

想将 project_old目录移动到 /home/username/workspace/目录下,并重命名为 project_new

mv project_old /home/username/workspace/project_new

crack_segmentation.yaml

# 数据集路径
path: /home/qsl/3dgs-code/yolov12/splitData(3)  # 数据集根目录
train: images/train    # 训练集图像相对路径
val: images/val        # 验证集图像相对路径
test: images/test      # 测试集图像相对路径 (可选)# 类别信息
names:0: crack  # 类别名称,索引从0开始

制作数据集

YOLOV9保姆级教程-CSDN博客

YOLOv5图像识别教程:成功识别桥墩缺陷详细步骤分享

三、运行

train.py

from ultralytics import YOLOif __name__ == '__main__':model = YOLO('/home/qsl/3dgs-code/yolov12/ultralytics/cfg/models/v12/yolov12n.yaml')# 代表使用yolov12n的神经网络结构model.load('/home/qsl/3dgs-code/yolov12/yolov12n.pt')# 代表使用yolov12n的预训练权重model.train(data='/home/qsl/3dgs-code/yolov12/splitData(3)/splitData/crack_segmentation.yaml', # 数据集yaml路径imgsz=640, # 输入图像的尺寸为 640x640 像素epochs=200, # 训练300轮batch=16, # 每一批样本的数量workers=8, # 同时32个线程device="0", #只使用第一张显卡进行训练project='/home/qsl/3dgs-code/yolov12/train',name='yolov12n',)

 python train.py ,运行了3小时,输出在 /home/qsl/3dgs-code/yolov12/train/yolov12n5

结果分析参考一条视频讲清楚yolo训练结果的含义 - Coding茶水间 - 博客园 - 愿你无忧yyyyyyy - 博客园

 cmd打开终端,在终端输入nvidia-smi,回车执行命令就能看到GPU利用率66%:

如果电脑不太好的话,会出现GPU容量不足的情况,尽量调整数据输入量和线程,减少电脑负担,在train文件里调小workers、batch

报错Could not load library libcudnn_cnn_train.so.8

您遇到的错误,核心问题在于环境中的CUDA和cuDNN库版本存在冲突。从您提供的版本信息来看,PyTorch期望使用CUDA 12.1,但系统却错误地加载了来自CUDA 11.8路径下的旧版cuDNN库。

echo $LD_LIBRARY_PATH

echo $CUDA_HOME

  • conda activate yolov12
  • unset CUDA_HOME
  • export LD_LIBRARY_PATH=

更稳妥的做法(每次激活环境自动生效)(可以试试):

  • mkdir -p $CONDA_PREFIX/etc/conda/activate.d
  • 创建文件 vim  $CONDA_PREFIX/etc/conda/activate.d/cuda_clean.sh,内容:
    • unset CUDA_HOME
    • export LD_LIBRARY_PATH=

验证:

  • python -c "import torch, os; print(torch.version, torch.version.cuda); print('CUDA_HOME=', os.environ.get('CUDA_HOME')); print('LD_LIBRARY_PATH=', os.environ.get('LD_LIBRARY_PATH'))"

predict.py

from ultralytics import YOLO
from PIL import Image
import cv2model = YOLO('train/yolov12n5/weights/best.pt')
results = model.predict(source='splitData(3)/images/test/1-59-_jpg.rf.88757267d8830b549d4b2eadb5febba9.jpg', save=True,save_txt=True, imgsz=640, conf=0.25)#单张图片,source也可以是文件夹# 结果可视化
for r in results:# 方法1: 使用Ultralytics内置的plot方法 (快速显示)im_array = r.plot()  # 绘制边界框、分割掩码、标签im = Image.fromarray(im_array[..., ::-1])  # BGR to RGBcv2.imshow('result', im_array) # 显示图像# 等待按键,0表示无限等待直到按键key = cv2.waitKey(0)  # 程序会停在这里等待用户按键# 关闭所有OpenCV窗口cv2.destroyAllWindows()

控制台提示识别的结果在runs\detect\predict目录下,发现图中出现多个裂缝时不能准确识别

【图像算法 - 14】精准识别路面墙体裂缝:基于YOLO12与OpenCV的实例分割智能检测实战(附完整代码)_crack500数据集宽度测量-CSDN博客

app.py

可选多种模型,但是这是没有经过裂缝数据集训练的权重,直接传入图片的话,输出的图片并不会标注,所以经过修改app.py做了一个可以上传pt权重文件的程序,代码如下demo.py:

demo.py(可上传pt权重文件)

# --------------------------------------------------------
# Based on yolov10
# https://github.com/THU-MIG/yolov10/app.py
# --------------------------------------------------------'import gradio as gr
import cv2
import tempfile
from ultralytics import YOLOdef yolov12_inference(image, video, model_path, image_size, conf_threshold):print("model_path: ", model_path)model = YOLO(model_path)if image:results = model.predict(source=image, imgsz=image_size, conf=conf_threshold)annotated_image = results[0].plot()return annotated_image[:, :, ::-1], Noneelse:video_path = tempfile.mktemp(suffix=".webm")with open(video_path, "wb") as f:with open(video, "rb") as g:f.write(g.read())cap = cv2.VideoCapture(video_path)fps = cap.get(cv2.CAP_PROP_FPS)frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))output_video_path = tempfile.mktemp(suffix=".webm")out = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*'vp80'), fps, (frame_width, frame_height))while cap.isOpened():ret, frame = cap.read()if not ret:breakresults = model.predict(source=frame, imgsz=image_size, conf=conf_threshold)annotated_frame = results[0].plot()out.write(annotated_frame)cap.release()out.release()return None, output_video_pathdef yolov12_inference_for_examples(image, model_path, image_size, conf_threshold):annotated_image, _ = yolov12_inference(image, None, model_path, image_size, conf_threshold)return annotated_imagedef app():with gr.Blocks():with gr.Row():with gr.Column():image = gr.Image(type="pil", label="Image", visible=True)video = gr.Video(label="Video", visible=False)input_type = gr.Radio(choices=["Image", "Video"],value="Image",label="Input Type",)model_file = gr.File(label="Upload Model (.pt file)", file_types=[".pt"])image_size = gr.Slider(label="Image Size",minimum=320,maximum=1280,step=32,value=640,)conf_threshold = gr.Slider(label="Confidence Threshold",minimum=0.0,maximum=1.0,step=0.05,value=0.25,)yolov12_infer = gr.Button(value="Detect Objects")with gr.Column():output_image = gr.Image(type="numpy", label="Annotated Image", visible=True)output_video = gr.Video(label="Annotated Video", visible=False)def update_visibility(input_type):image = gr.update(visible=True) if input_type == "Image" else gr.update(visible=False)video = gr.update(visible=False) if input_type == "Image" else gr.update(visible=True)output_image = gr.update(visible=True) if input_type == "Image" else gr.update(visible=False)output_video = gr.update(visible=False) if input_type == "Image" else gr.update(visible=True)return image, video, output_image, output_videoinput_type.change(fn=update_visibility,inputs=[input_type],outputs=[image, video, output_image, output_video],)def run_inference(image, video, model_file, image_size, conf_threshold, input_type):if input_type == "Image":return yolov12_inference(image, None, model_file, image_size, conf_threshold)else:return yolov12_inference(None, video, model_file, image_size, conf_threshold)yolov12_infer.click(fn=run_inference,inputs=[image, video, model_file, image_size, conf_threshold, input_type],outputs=[output_image, output_video],)# gr.Examples(#     examples=[#         [#             "ultralytics/assets/bus.jpg",#             "yolov12s.pt",#             640,#             0.25,#         ],#         [#             "ultralytics/assets/zidane.jpg",#             "yolov12x.pt",#             640,#             0.25,#         ],#     ],#     fn=yolov12_inference_for_examples,#     inputs=[#         image,#         model_id,#         image_size,#         conf_threshold,#     ],#     outputs=[output_image],#     cache_examples='lazy',# )gradio_app = gr.Blocks()
with gradio_app:gr.HTML("""<h1 style='text-align: center'>YOLOv12: Attention-Centric Real-Time Object Detectors</h1>""")gr.HTML("""<h3 style='text-align: center'><a href='https://arxiv.org/abs/2502.12524' target='_blank'>arXiv</a> | <a href='https://github.com/sunsmarterjie/yolov12' target='_blank'>github</a></h3>""")with gr.Row():with gr.Column():app()
if __name__ == '__main__':gradio_app.launch()

四、autodl部署

可尝试参考

YOLOv12快速复现部署&训练测试 - 知乎

01 YOLOv12快速复现部署&训练测试_哔哩哔哩_bilibili

http://www.dtcms.com/a/582921.html

相关文章:

  • 湖北 网站 备案 时间个人网站可以做企业宣传
  • mvc架构购物网站开发成都必去的十大景点
  • 在线设计网站可以做ps和ppt爱吖网
  • 徐州市城乡建设局网站首页国外设计网站d开头的
  • Java 集成 onlyoffice 预览文件功能
  • Maven中的配置
  • 网站开发界面设计用什么工具商城建设开发
  • 访问阿里云主机网站免费打广告的平台app
  • docker拉取失败,更换docker的源
  • asp网站验证码不显示莱州网络推广公司
  • Android Gralde补全计划 productFlavors多渠道打包(变体/多客户)
  • 网站建设多少钱网站开发项目经理职责
  • 浙江腾鑫建设集团网站手机如何打开wordpress
  • 算法 day 47 单调栈
  • 一个静态网站开发考虑什么绍兴建设局网站首页
  • 做网站练手项目广东新闻联播回看
  • JavaEE初阶——多线程(8)JUC的常见类
  • 全参数DeepSeek(671B)企业部署方案
  • 柳州网站开发网上申请店铺开网店的流程
  • Java与Swift完整语法对比手册
  • 网站系统环境的搭建微信公众平台小程序二维码怎么生成
  • 做吉祥物设计看什么网站wordpress 开头空格
  • dockerfile一个引号缺失带来的惨案
  • 做电子板报的网站wordpress 汽车租赁
  • 英文网站设计公司建网站的过程
  • 虚拟网站php专业型网站开发服务费会计处理
  • 东莞大朗网站建设公司怎么查看网站死链接
  • 站多多 福州网站建设益阳建设网站
  • 中科数测研究院议题入选Biohacking Village Labs,即将亮相东京CodeBlue大会
  • SpringCloud微服务保护与分布式事务知识点总结