YOLOv3实现鱼类目标检测
我将以一个项目实例,记录如何用YOLOv3训练自己的数据集。
在开始之前,首先了解一下YOLO系列代表性的DarkNet网络。
如下图所示,是YOLOv3中使用的DarkNet-53的结构,几种核心结构是:
DBL: 是yolo_v3的基本组件。就是卷积+BN+Leaky relu。对于v3来说,BN和leaky relu已经是和卷积层不可分离的部分了(最后一层卷积除外),共同构成了最小组件。
resn:n代表数字,有res1,res2, … ,res8等等,表示这个res_block里含有多少个res_unit。这是yolo_v3的大组件,yolo_v3开始借鉴了ResNet的残差结构,使用这种结构可以让网络结构更深(从v2的darknet-19上升到v3的darknet-53,前者没有残差结构)。
concat:张量拼接。将darknet中间层和后面的某一层的上采样进行拼接。拼接的操作和残差层add的操作是不一样的,拼接会扩充张量的维度,而add只是直接相加不会导致张量维度的改变。
下图是v3著名的Darknet53网络图,它融合了YOLOv2, Darknet19,以及其他新型的残差网络,由连续的3x3和1x1卷积层组合而成,一共有53个卷积层。
任务:鱼类目标检测
数据集描述:3类(tinca,gold_fish,stingray),900张图片
数据集格式:VOC
- 准备工作:
- 进入YOLO官网,跑通Demo
YOLO: Real-Time Object Detectionpjreddie.com编辑
- 准备自己的数据集 ,以VOC为例,如果只进行目标检测,下列几个文件夹要准备好,将图片保存在VOC的JPEGImages目录下
- 利用工具进行图片标注并生成XML文件,将用LabelImg标注好得到的XML文件放到Annotations文件夹下。注意,需要和图片名相同,标注图片类别时要统一用小写字母,否则会出错