水下目标检测总结

赛事链接:https://www.flyai.com/d/UnderwaterDetection

数据集标注 voc格式:

数据处理参考:https://blog.csdn.net/Clay_Zhang/article/details/107079762


<annotation>
	<frame>000005frame>
	<object>
		<name>holothurianname>
		<bndbox>
			<xmin>865xmin>
			<ymin>87ymin>
			<xmax>1029xmax>
			<ymax>182ymax>
		bndbox>
	object>
	<object>
		<name>echinusname>
		<bndbox>
			<xmin>1130xmin>
			<ymin>286ymin>
			<xmax>1260xmax>
			<ymax>399ymax>
		bndbox>
	object>

模型选择:

YOLOV5:https://github.com/ultralytics/yolov5
注意:pytorch版本必须是torch1.6否则模型跑不起来,yolov5使用了1.6版本才有的新的激活函数。
ps: pytorch最新的稳定版本1.7貌似今天发布了,支持cuda11 *

配置文件:

在data目录下写仿照coco.yaml写自己的配置文件

# PASCAL VOC dataset http://host.robots.ox.ac.uk/pascal/VOC/
# Train command: python train.py --data voc.yaml
# Default dataset location is next to /yolov5:
#   /parent_folder
#     /VOC
#     /yolov5


# download command/URL (optional)
#download: bash data/scripts/get_voc.sh

# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: ./data/train.txt  # train images
val: ./data/test.txt # test images

# number of classes
nc: 4

# class names
names: ['holothurian', 'echinus', 'scallop', 'starfish']

train对应的是训练集的图片位置
val对应的是验证集图片位置
例如这样的:
./images/000001.jpg
./images/000002.jpg
./images/000003.jpg
nc:对应是分类数目
names:分类对应的名字
在models目录下修改自己的模型文件,这里我们用的是yolov5s这个模型:

# parameters
nc: 4  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple

# anchors
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Focus, [64, 3]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, BottleneckCSP, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 9, BottleneckCSP, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, BottleneckCSP, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 1, SPP, [1024, [5, 9, 13]]],
   [-1, 3, BottleneckCSP, [1024, False]],  # 9
  ]

# YOLOv5 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, BottleneckCSP, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, BottleneckCSP, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, BottleneckCSP, [512, False]],  # 20 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, BottleneckCSP, [1024, False]],  # 23 (P5/32-large)

   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

这里只需要修改nc一个参数就可以跑起来了

模型训练:

python train.py --data coco.yaml --cfg yolov5s.yaml --weights ‘’ --batch-size 64
yolov5m 40
yolov5l 24
yolov5x 16

在24G泰坦显卡上能跑起来的batch_size大小,最小模型跑的300 epoch时间大概是18个小时。
水下目标检测总结_第1张图片
水下目标检测总结_第2张图片

结果展示:

水下目标检测总结_第3张图片
水下目标检测总结_第4张图片
水下目标检测总结_第5张图片

总结:

在泰坦显卡上测试集12000张图片,耗时191s
从检测结果上看,还是有很多不足的,例如海胆漏检了。YoLov5优点速度快!速度快!速度快!缺点对小目标检测准确度不高。
训练完后识别
python detect.py --weights ./runs/exp7/weights/best.pt --source D:/cmpt/flyai/test-A-image/000002.jpg --save
weights指定的是训练权重的路径, source指定的是图片的路径,或者是图片文件夹路径, save后图片保存在inference/output这个文件夹下
数据增强是个好方法!!!,
水下照片偏绿,使用颜色矫正,估计分还可以再上一些
比赛结束了才看到凯明大神的暗通道去雾算法,暗通道去雾
使用yolov5s模型最终模型大小14M,应该说是非常适合部署在嵌入式开发设备里面了,月末流量不足,我就不传代码和权重文件了,需要的话可以留言或者邮箱[email protected]

提示:这里填写该问题的具体解决方案:
例如:新建一个 Message 对象,并将读取到的数据存入 Message,然后 mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget();换成 mHandler.sendMessage()。

你可能感兴趣的:(机器视觉,深度学习,yolov5,深度学习,pytorch)