YoloV5 Android APP开发--数据集(一)

yolov5是基于pytorch的目标检测模型,无需darknet,安装简单,性能比较好。
$ git clone https://github.com/ultralytics/yolov5
$ cd yolov5
$ pip install -r requirements.txt

安装完成就可进行检测或训练了。

检测:python detect.py

-- weights yolov5s.pt          weight模型权重
--source data/pest              图片目录
--img 640                            图片大小

训练:

python train.py --img 640 --cfg yolov5s.yaml --batch 16 --epochs 77 --data coco.yaml --weights yolov5s.pt --resume 

其中coco.yaml文件包含了训练数据集信息。

path: ../datasets/coco128  # dataset root dir
train: images/train2017  # train images (relative to 'path') 128 images
val: images/train2017  # val images (relative to 'path') 128 images

test:  # test images (optional)

xml文件转换为txt文本文件

coco数据集为xml文件,yolov5标签为文本文件,不支持difficult和truncated选项。

function xml2txt($jsFn,$str,$arr){//xml字符串转txt文件xml2txt($jsFn,$str,$arr)
  $tArr = xmltoarray($str);
  $imgW = $tArr["size"]["width"];//图片宽
  $imgH = $tArr["size"]["height"];//高
  echo $imgW."*".$imgH."--";
  $objArr = $tArr["object"]; 
  if(empty($objArr[0]["name"])){//单个object
      $pNum = array_search($objArr["name"],$arr);
      $xPlot = ($objArr["bndbox"]["xmin"] + $objArr["bndbox"]["xmax"])/2/$imgW;
      $yPlot = ($objArr["bndbox"]["ymin"] + $objArr["bndbox"]["ymax"])/2/$imgH;
      $wVal = ($objArr["bndbox"]["xmax"] - $objArr["bndbox"]["xmin"])/$imgW;
      $hVal = ($objArr["bndbox"]["ymax"] - $objArr["bndbox"]["ymin"])/$imgH;
      $yoloStr = $pNum." ".round($xPlot,6)." ".round($yPlot,6)." ".round($wVal,6)." ".round($hVal,6)."\r\n";      
  }else{
    for($i=0;$i<count($objArr);$i++){
      $pNum = array_search($objArr[$i]["name"],$arr);
      $xPlot = ($objArr[$i]["bndbox"]["xmin"] + $objArr[$i]["bndbox"]["xmax"])/2/$imgW;
      $yPlot = ($objArr[$i]["bndbox"]["ymin"] + $objArr[$i]["bndbox"]["ymax"])/2/$imgH;
      $wVal = ($objArr[$i]["bndbox"]["xmax"] - $objArr[$i]["bndbox"]["xmin"])/$imgW;
      $hVal = ($objArr[$i]["bndbox"]["ymax"] - $objArr[$i]["bndbox"]["ymin"])/$imgH;
      $yoloStr .= $pNum." ".round($xPlot,6)." ".round($yPlot,6)." ".round($wVal,6)." ".round($hVal,6)."\r\n";
    }
  }
  $yFn = str_replace("Annotations","yolo",$jsFn);
  $yFn = str_replace(".xml",".txt",$yFn);
  echo $yFn."<br>"; 
  saveFile($yFn,$yoloStr);    
}

拷贝相应文件到训练集和验证集目录

function mkYolo($fn,$str){//yolo训练集和验证集
    if(file_exists($fn)){//train文件存在
       $jStr = file_get_contents($fn);
    }
    $tArr = explode("\r\n",$jStr);
    for($i=0;$i<count($tArr);$i++){
      if(!empty(trim($tArr[$i]))){
          if(file_exists("VOC2007/JPEGImages/".$tArr[$i].".jpg")){
            copy("VOC2007/JPEGImages/".$tArr[$i].".jpg","VOC2007/images/".$str."/".$tArr[$i].".jpg");
            copy("VOC2007/yolo/".$tArr[$i].".txt","VOC2007/labels/".$str."/".$tArr[$i].".txt");
          }
      }
    }     
}

生成.yaml数据集配置文件

function yamlFile($arr){
//# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
  $str = "path: ../datasets/coco128  # dataset root dir\r\n";
  $str .= "train: images/train2017  # train images (relative to 'path') 128 images\r\n";
  $str .= "val: images/train2017  # val images (relative to 'path') 128 images\r\n";
  $str .= "test:  # test images (optional)\r\n";

  $str .= "# Classes\r\n";
  $str .= "nc: ".count($arr)."  # number of classes\r\n";
  $str .= "names: [";
  for($i=0;$i<count($arr);$i++){
    if($i==count($arr)-1){
      $str .="'".$arr[$i]."']\r\n";
    }else{
      if( ($i+1)%10==0 ){    
        $str .="'".$arr[$i]."',\r\n";
      }else{
        $str .="'".$arr[$i]."',";
      }
    }
  }
  saveFile("VOC2007/lamp.yaml",$str);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值