1 引言
由于项目需要,需要掌握目标检测相关知识,只做过copy别人代码进行CNN分类的我零基础,压力山大。本博客所学习的代码来自github上对YOLOv3的PyTorch版本复现,作者为苹果公司的机器学习工程师eriklindernoren,项目地址为:https://github.com/eriklindernoren,fork到我的仓库的时间为2020年11月6日。从github下载的文件名为PyTorch-YOLOv3-master。整个项目的结构如下:
2 data
学习(1)就应该从最简单的开始吧,先探索下data文件夹,看看它功能是个啥。data文件结构是这样的:
- data
- custom
- samples
- coco.names
- get_coco_dataset.sh
其中,samples文件夹里存了9张用于目标检测的jpg图像,图像并没有画出bounding box,只是单纯的图像,每个图像高度和宽度也不是统一的。custom里面有1张包含火车(trian)的图像和一些txt文件,这个文件夹如其名custom,告诉了我们训练自己的数据,那文件夹的格式应该是什么样的,比如哪里放图像啊,哪里放图像的标签啊,它的结构如下:
- custom
- images
- train.jpg
- labels
- train.txt
- classes.names
- train.txt
- valid.txt
- images
吐槽一下,由于给的例子是火车(train),容易让人和训练一词搞混。除了custom下的train.txt里的train是训练,其他train应该都是火车。值得注意的是labels下的train.txt文件给出了yolo下的标签格式。
0 0.515 0.5 0.21694873 0.18286777
第一列是种类编号,第0类对应了这个文件下的classes.names文件夹中的只有一行数据写着train(火车)。后四列是bounding box的位置信息。再回到data文件夹里来说,coco.names是一个.names文件,用记事本打开来看,该文件存储了coco数据集每一类的标签名称,比如person、bicycle、car之类,共有80行,即80个类。get_coco_dataset.sh是一个bash文件,是用来下载COCO数据集的。下载好后数据集会保存在data文件夹下。这里分析一下这个sh文件。
#!/bin/bash
# CREDIT: https://github.com/pjreddie/darknet/tree/master/scripts/get_coco_dataset.sh
# Clone COCO API
git clone https://github.com/pdollar/coco
cd coco
mkdir images
cd images
# Download Images
wget -c https://pjreddie.com/media/files/train2014.zip
wget -c https://pjreddie.com/media/files/val2014.zip
# Unzip
unzip -q train2014.zip
unzip -q val2014.zip
cd ..
# Download COCO Metadata
wget -c https://pjreddie.com/media/files/instances_train-val2014.zip
wget -c https://pjreddie.com/media/files/coco/5k.part
wget -c https://pjreddie.com/media/files/coco/trainvalno5k.part
wget -c https://pjreddie.com/media/files/coco/labels.tgz
tar xzf labels.tgz
unzip -q instances_train-val2014.zip
# Set Up Image Lists
paste <(awk "{print \"$PWD\"}" <5k.part) 5k.part | tr -d '\t' > 5k.txt
paste <(awk "{print \"$PWD\"}" <trainvalno5k.part) trainvalno5k.part | tr -d '\t' > trainvalno5k.txt
看来如同文件名,就是用来下coco数据集和解压一些文件的。如果在ubuntu上运行这个文件,光下coco数据集不知道得下多少年,所以索性直接复制这6个wget -c后面的地址到迅雷里下载,自己手动实现这个sh文件。下载完成后,把六个文件都放到Downloads里。首先我们把train2014.zip和val2014.zip放到自己创建的data/coco/images/里,并用unzip进行解压。然后我们把剩下的四个文件放到data/coco/里,按照sh文件的要求,tar解压tgz文件,unzip解压zip文件。最后再执行sh文件的最后两行paste命令对两个.part文件进行操作(虽然我不知道paste是干啥的,执行就完事了)。最后整个coco数据集大概是这么热闹:
3 assets
这个文件夹更简单,里面有四张图,是用来作为README文件里的例子(samples)展示的。
4 weights
这个文件夹里也只有一个download_weights.sh文件,使用来下载3个weights的,分别是vanilla YOLOv3,tiny YOLOv3和darknet53的weights。咱先不管那么多,用迅雷复制文件里的3个地址,给下载下来放到weights文件夹里。
5 结语
学习(1)主要分析了3个文件夹的作用,并下载了数据和权重。目前还没有涉及到模型,后面需要去啃模型这块硬骨头了。如果这篇文章里存在什么问题,欢迎各位大佬指正。