yolo11入门 目标检测模型有5种:yolo11n.ptyolo11s.ptyolo11m.ptyolo11l.ptyolo11x.pt从小到大 模型越大检测的精准度高 耗时也越高fromultralyticsimportYOLOimportcv2#加载模型modelYOLO(yolo11n.pt)#查看所有能识别的物体namesmodel.namesprint(names)imgcv2.VideoCapture(22.mp4)whileTrue:ret,frameimg.read()ifnotret:break#物体检测 classes 设置 只检测人 conf设置阈值 小于这个值的过滤掉resultmodel.predict(sourceframe,classes[0],conf0.5)boxesresult[0].boxesforboxinboxes:#位置信息 信任值 类别x1,y1,x2,y2box.xyxy[0].cpu().numpy().astype(int)cv2.rectangle(frame,(x1,y1),(x2,y2),(255,0,0),2)#类别 #得分conffloat(box.conf)cls_idint(box.cls[0])cv2.putText(frame,names[cls_id] conf:format(conf,.2f),(x1,y1-10),cv2.FONT_HERSHEY_PLAIN,1,(0,255,0),2)cv2.imshow(frame,frame)cv2.waitKey(25)图像分割importcv2importnumpyasnpfromultralyticsimportYOLO modelYOLO(model/yolo11s-seg.pt)imgcv2.imread(../resource/bus.jpg)#检测 分割车类型resultsmodel.predict(sourceimg)boxesresults[0].boxes masksresults[0].masks seg_masknp.zeros((img.shape[0],img.shape[1]),dtypenp.uint8)fori,maskinenumerate(masks):#得到的掩码值是0 或者1 *255 变成 0 或者255 是一张黑白的图像datamask.data[0].cpu().numpy().astype(np.uint8)*255rsdatacv2.resize(data,(img.shape[1],img.shape[0]))seg_maskseg_maskrsdata res_imgcv2.bitwise_and(img,img,maskseg_mask)cv2.imshow(res_img,res_img)cv2.waitKey(0)用颜色标记图像importcv2importnumpyasnpfromultralyticsimportYOLO modelYOLO(model/yolo11s-seg.pt)imgcv2.imread(../resource/bus.jpg)#检测 分割车类型resultsmodel.predict(sourceimg)boxesresults[0].boxes masksresults[0].masks#创建一个和原图像一样的三通道资源 可以设置单独的通道颜色seg_masknp.zeros_like(img)fori,maskinenumerate(masks):#模型得到的data大小和源图像不一样 需要resizedatamask.data[0].cpu().numpy().astype(np.uint8)*255rsdatacv2.resize(data,(img.shape[1],img.shape[0]))seg_mask[rsdata0](0,255,0)#图像加权融合 原图权重占0.8 掩码占0.2res_imgcv2.addWeighted(img,0.8,seg_mask,0.2,0)cv2.imshow(img,res_img)cv2.waitKey(0)cv2.destroyAllWindows()标记物体轮廓importcv2importnumpyasnpfromultralyticsimportYOLO modelYOLO(model/yolo11s-seg.pt)imgcv2.imread(../resource/bus.jpg)#检测 分割人类型resultsmodel.predict(sourceimg,classes[0])masksresults[0].masks#所有点坐标信息pointsresults[0].masks.xyforpointinpoints:pointnp.array(point,dtypenp.int32)cv2.polylines(img,[point],True,(0,255,0),3)cv2.imshow(img,img)cv2.waitKey(0)人体的肢体检测importcv2fromultralyticsimportYOLO modelYOLO(model/yolo11s-pose.pt)imgcv2.imread(test.png)#检测 分割类型resultsmodel.predict(sourceimg)pointsresults[0].keypointsforpointinpoints:xyspoint.xy[0].cpu().numpy().astype(int)fori,xyinenumerate(xys):x,yxy cv2.circle(img,(x,y),5,(0,0,255),-1)#显示检测到的关节cv2.putText(img,f{i},(x,y),cv2.FONT_HERSHEY_SIMPLEX,1,(0,255,0),2)cv2.imshow(img,img)cv2.waitKey(0)YOLO本地跟踪importcv2fromultralyticsimportYOLOfromdeep_sort_realtime.deepsort_trackerimportDeepSort modelYOLO(model/yolo11m.pt)namesmodel.names capcv2.VideoCapture(resource/football.mp4)whileTrue:ret,imgcap.read()ifnotret:break#对目标进行跟踪 persist 设置持久化 不设置的话id会一直变#跟踪器有两种 bytetrack 和botsortresultsmodel.track(sourceimg,persistTrue,trackerbytetrack.yaml)boxesresults[0].boxesforboxinboxes:x1,y1,x2,y2box.xyxy[0].cpu().numpy().astype(int)cv2.rectangle(img,(x1,y1),(x2,y2),(255,0,0,2))#类别cls_idint(box.cls[0])#得分conffloat(box.conf)idint(box.id[0])cv2.putText(img,f{id},(x1,y1-10),cv2.FONT_HERSHEY_PLAIN,1,(0,255,0),2)cv2.imshow(img,img)cv2.waitKey(25)模型的转换把模型转换为 onnx格式 可以提高cpu执行速度 3倍左右fromultralyticsimportYOLO modelYOLO(model/yolo11m.pt)#转换模型格式model.export(formatengine)模型训练物体分类训练fromultralyticsimportYOLO#物体分类训练#训练函数需要在main函数中if__name____main__:modelYOLO(model/yolo11s-cls.pt)#把训练的图片随机的分成训练集和测试集 这样训练的效果更好#参数1 创建的随机训练集和测试集目录#参数2 训练的轮数#参数3 图片的大小#目录结构 mydata-cls-split#test#class1#物体1#物体2#train#class1#物体1#物体2#epochs 训练多少轮 imgsz 图片的尺寸 224 图片合适尺寸会增加识别率model.train(datayologpu/datasets/mydata-cls-split,epochs30,imgsz224)半自动打标工具pip install isat-sam数据打标对象检测在线打标网站 makesense https://www.makesense.ai/上传图片后选左边对象检测 然后点 号添加标签 标签添加完后 点按钮start project使用rect把对象圈起来后 选择标签 打标签完成后 点左上角的Actions -Export Annotations 最后选择 A zip YOLO格式实例分割步骤与前面一样 打标的时候使用多边形 导出的时候选 COCO JSON 格式 这个格式 YOLO不能使用 需要进行单独的转换图像检测图像检测的标注选右边图像检测的打标只需要选一个标签 导出的时候选CSV格式模型训练 物体检测#分割脚本importosimportrandomimportshutil# 数据集根目录 图片标签dataset_dir_images../datasets/mydata-detect/imagesdataset_dir_labels../datasets/mydata-detect/labels# 数据集划分的图像的存放路径split_data_dir../datasets/mydata-detect-split# 图像和标签目录image_diros.path.join(split_data_dir,images)label_diros.path.join(split_data_dir,labels)# 创建训练、验证和测试目录train_image_diros.path.join(image_dir,train)val_image_diros.path.join(image_dir,val)test_image_diros.path.join(image_dir,test)train_label_diros.path.join(label_dir,train)val_label_diros.path.join(label_dir,val)test_label_diros.path.join(label_dir,test)fordir_pathin[train_image_dir,val_image_dir,test_image_dir,train_label_dir,val_label_dir,test_label_dir]:ifnotos.path.exists(dir_path):os.makedirs(dir_path)# 获取所有图像文件image_files[fforfinos.listdir(os.path.join(dataset_dir_images))iff.endswith((.jpg,.jpeg,.png))]# 打乱图像文件列表random.shuffle(image_files)# 计算分割点train_sizeint(0.8*len(image_files))val_sizeint(0.1*len(image_files))# 分割数据train_filesimage_files[:train_size]val_filesimage_files[train_size:train_sizeval_size]test_filesimage_files[train_sizeval_size:]# 移动文件到相应目录defmove_files(files,image_dest,label_dest):forfileinfiles:image_srcos.path.join(dataset_dir_images,file)label_fileos.path.splitext(file)[0].txtlabel_srcos.path.join(dataset_dir_labels,label_file)shutil.copy(image_src,image_dest)ifos.path.exists(label_src):shutil.copy(label_src,label_dest)move_files(train_files,train_image_dir,train_label_dir)move_files(val_files,val_image_dir,val_label_dir)move_files(test_files,test_image_dir,test_label_dir)创建自定义的配置文件 xx.yaml#数据集根目录 该目录是分割后的目录 下面是文件夹 images labelspath:datasets/mydata-detect-split#训练集图像路径train:images/train#验证集图像路径val:images/val#测试集图像路径test:images/test#类别名称names:0:buffalo1:elephant2:rhino3:zebra开始训练自己标注的数据fromultralyticsimportYOLOif__name____main__:modelYOLO(model/yolo11l.pt)model.train(datadataset.yaml,epochs50,imgsz100,# 强力数据增强 hsv_h0.015,hsv_s0.7,# 饱和度hsv_v0.4,# 亮度degrees15,# 旋转translate0.2,# 平移scale0.5,# 缩放fliplr0.5,# 水平翻转flipud0.2,# 垂直翻转erasing0.3,# 随机擦除mosaic1.0,# 马赛克增强mixup0.1)# 混合增强验证数据fromultralyticsimportYOLOif__name____main__:modelYOLO(model/best1.pt)model.predict(sourceresource/elephant.mp4,showTrue)图像分割训练图像分割需要把数据转换一次 训练流程和图像分类一样#模型训练 图像分割fromultralytics.data.converterimportconvert_coco#多边形标注的数据导出格式是COCO的 需要转换成YOLO能用的类型convert_coco(labels_dirseg-labels,#标注的标签所在目录use_segmentsTrue#是否是图像分割)服务器部署检测模型1.安装Conda2.添加系统环境变量 C:\ProgramData\miniconda3 C:\ProgramData\miniconda3\Scripts C:\ProgramData\miniconda3\Library\bin3.conda.bat init4.conda create-n yolo python 创建虚拟环境5.conda activate yolo6.pip install python7.pip install torch torchvision torchaudio--index-url https://download.pytorch.org/whl/cpu 安装的cpu版本 没有GPU8.pip install ultralytics YOLO11的包9.pip install flask10.python pyhttp.py 启动检测服务