近来,Ultralytics推出了YOLOv5,但它的名字却引发了争议。为明晰解配景,《YOLO》(你只能看一次)的前三个版本是由约瑟夫·雷蒙(Joseph Redmon)创作的。在此之后,Alexey Bochkovskiy在darknet上创立了YOLOv4,号称比之前的迭代具有更高的均匀精度(AP)和更快的后果。
如今,Ultralytics曾经公布了YOLOv5,具有可比的AP和比YOLOv4更快的推测工夫。这就发生了很多疑问:新版本能否包管了与YOLOv4类似的正确性?无论回答是什么,这相对是目的检测界开展速率的一个标记。
自从他们第一次移植YOLOv3以来,Ultralytics就使得利用Pytorch创立和摆设模子变得十分复杂,以是我很想实验YOLOv5。现实证明,Ultralytics 进一步简化了这个历程,后果不言自明。
在本文中,ag九游会不探究YOLOv5这个名字能否正轨,ag九游会只利用YOLOv5创立一个检测模子,从创立数据集和正文到利用它们精彩的库举行训练和推测。这篇文章次要存眷YOLOv5的完成,包罗:
创立数据集正文图像数据创立项目布局训练YOLOv5创立自界说数据集
利用OIDv4下载图片:
要从开放的数据集下载图像,ag九游会起首克隆OIDv4_ToolKit并安置依赖。
git clone github /EscVM/OIDv4_ToolKit cd OIDv4_ToolKit pip install -r requirements.txt
ag九游会如今可以利用这个文件夹中的main.py剧本来下载图像以及多个类的标签。
上面我正在下载板球和足球的数据来创立ag九游会的自界说数据集。也便是说,ag九游会将创立一个包括足球和板球的数据集,而学习义务便是检测这些球。
python3 main.py downloader --classes Cricket_ball Football --type_csv all -y --limit 500
上面的下令创立一个名为“OID”的目次,其布局如下:
OID目次布局。ag九游会将只利用这里的图像文件(.jpgs),而不利用ag九游会将手动正文以创立自界说数据集的标签,只管ag九游会可以在差别项目必要时利用它们。
在持续之前,ag九游会必要将一切图像复制到统一个文件夹中,以便重新开端标志实习。你可以选择手动完成,但这也可以疾速完成经过递归glob函数:
import os from glob import globos.system("mkdir Images") images = glob(r'OID/**/*.jpg', recursive=True) for img in images: os.system(f"cp {img} Images/")
利用HyperLabel标签图像
ag九游会将利用一个名为Hyperlabel的东西来标志图像。已往,我利用过许多东西来创立正文,好比labelimg、labelbox等,但历来没有遇到过这么复杂、这么开源的东西。独一的缺陷是你不克不及在Linux上利用这个东西,只能在Mac和Windows上利用,但我想这对ag九游会大少数人来说是可以的。
创立项目
2,设置标签
3。添加当地图像数据源
4。标注
这个东西最好的局部是它提供的种种输入款式。由于ag九游会想要失掉Yolo的数据,ag九游会将利用Yolo款式并在正文完成后导出它。但假如盼望取得JSON款式(COCO)或XML款式(Pascal VOC)的正文,也可以选择利用这个东西。
以Yolo款式导出实践上为ag九游会的每个图像创立了一个.txt文件,此中包括图像的classid、xcenter、ycenter、宽度和高度。它还创立了一个名为obj.names的文件,这有助于将classid映射到类名。比方:
留意,正文文件中的坐标从0到1。别的,请留意,依据obj.names文件(从0开端),class_id关于板球是0,关于足球是1。ag九游会还利用它创立了一些其他文件,但在本例中不会利用它们。
一旦ag九游会完成了这些操纵,ag九游会就根本上创建了自界说数据集,而且只必要重新布置这些文件中的一些,以便在当前训练模子时举行后续的训练和验证支解。数据集现在将是一个独自的文件夹,如下所示,包括图像和正文:
dataset - 0027773a6d54b960.jpg - 0027773a6d54b960.txt - 2bded1f9cb587843.jpg - 2bded1f9cb587843.txt -- --
创建项目
为了训练ag九游会的自界说目的检测器,ag九游会将利用来自Ultralytics的Yolov5。ag九游会起首克隆存储库并安置依赖项:
git clone github /ultralytics/yolov5 # clone repo cd yolov5 pip install -U -r requirements.txt
然后ag九游会开端创立本人的名为training的文件夹,ag九游会将在此中保管自界说数据集。
!mkdir training
ag九游会起首将自界说数据集文件夹复制到该文件夹中,并利用复杂的trainvalfolder_split创立训练和验证文件夹。上面的代码创立了一些训练和验证文件夹,并用图像添补它们。
import glob, os import random# put your own path here dataset_path = 'dataset'# Percentage of images to be used for the validation set percentage_test = 20!mkdir data !mkdir data/images !mkdir data/labels !mkdir data/images/train !mkdir data/images/valid !mkdir data/labels/train !mkdir data/labels/valid# Populate the folders p = percentage_test/100 for pathAndFilename in glob.iglob(os.path.join(dataset_path, "*.jpg")): title, ext = os.path.splitext(os.path.basename(pathAndFilename)) if random.random() <=p : os.system(f"cp {dataset_path}/{title}.jpg data/images/valid") os.system(f"cp {dataset_path}/{title}.txt data/labels/valid") else: os.system(f"cp {dataset_path}/{title}.jpg data/images/train") os.system(f"cp {dataset_path}/{title}.txt data/labels/train")
运转之后,您的数据文件夹布局应该如下所示。它应该有两个目次映像和标签。
ag九游会如今必需添加两个设置装备摆设文件到训练文件夹:
数据集。ag九游会创立一个文件“dataset”。包括训练和验证图像的途径以及类。# train and val datasets (image directory or *.txt file with image paths) train: training/data/images/train/ val: training/data/images/valid/# number of classes nc: 2# class names names: ['Cricketball', 'Football']
模子。yaml:在创立网络时,ag九游会可以利用从小到大的多种模子。比方,yolov5s。yolov5/models目次中的yaml文件是带有7M参数的小Yolo模子,而yolov5x。yaml是最大的Yolo型号,有96M Params。关于这个项目,我将利用yolov5l。有50m params的yaml。起首从yolov5/models/yolov5l中复制文件。将yaml转换到training文件夹,并变动nc,即依据ag九游会的项目需求将类数改为2。# parameters nc: 2 # change number of classes depth_multiple: 1.0 # model depth multiple width_multiple: 1.0 # layer channel multiple
训练
此时,ag九游会的训练文件夹看起来如下:
一旦ag九游会完成了上述步调,ag九游会就可以开端训练ag九游会的模子了。这和运转上面的下令一样复杂,在这里ag九游会提供设置装备摆设文件和种种其他参数的地位。您可以在train.py文件中检察其他差别的选项,但这些是我以为值得留意的选项。
# Train yolov5l on custom dataset for 300 epochs $ python train.py --img 640 --batch 16 --epochs 300--data training/dataset.yaml --cfg training/yolov5l.yaml --weights ''
偶然你大概会失掉一个错误,PyTorch 1.5版本在这种状况下运转在一个单一的GPU利用:
# Train yolov5l on custom dataset for 300 epochs $ python train.py --img 640 --batch 16 --epochs 300--data training/dataset.yaml --cfg training/yolov5l.yaml --weights '' --device 0
开端训练之后,可以经过反省主动创立的filetrainbatch0.jpg和testbatch0_gt.jpg来反省训练能否曾经设置好,前者包括第一批的训练标签,后者包括测试图像的groundtruth
后果
要检察利用tensorboard在欣赏器中的localhost:6006上的后果,请在另一个下令行终端中运转此下令
tensorboard --logdir=runs
上面是种种验证器量。在训练完毕时,这些器量也会保管在一个results.png文件中。
展望
Yolov5提供了许多差别的办法来反省新数据的后果。
要检测一些图像,您可以复杂地将它们放入名为inference/images的文件夹中,然后依据主动运转推测:
python detect.py --weights weights/best.pt
您也可以在视频利用detect.py文件举行检测:
python detect.py --weights weights/best.pt --source inference/videos/messi.mp4 --view-img --output inference/output
在这里,我指定盼望利用- view-img标记检察输入,并将输入存储在地位推测/输入中。这将在这个地位创立一个.mp4文件。令人印象深入的是,网络模子可以找到球,在这里举行推测的速率,以及从未察看到的数据令人震惊的正确性。
您还可以经过将——source指定为0来利用webcam作为源。您可以在detect.py文件中检察其他种种选项。
结论
在这篇文章中,我讨论了怎样利用自界说数据集创立Yolov5工具检测模子。我喜好Ultralytics让创立物体检测模子变得云云容易。
别的,他们提供的检察模子后果的种种方法使它成为我好久以来看到的一个完备的包。
假如你想切身体验自界说数据集,你可以在Kaggle上下载正文数据,在Github上下载代码。