近期在网上我关注到了一篇论文SSDA-YOLO,是关于跨域半监督目标检测,具体是干什么的我就不说了,我们来复现一下SSDA-YOLO。
1.源码下载:
首先我们需要下载一个SSDA-YOLO的源码,这个你自己去下载就行了。github上是公开的。
2.数据集准备:
下载到了源码以后是不能直接进行训练的。我们要准备自己的两个数据集(源域A和目标域B,以后内容我就用AB来代替,不说源域目标域)。对于我们的数据集A和B,首先我们要用CycleGAN进行训练,将A和B的图像风格进行转换。
CycleGAN这个训练得很久,我用一张A2000训练200轮,训练了近60个小时才训练完成。CycleGAN并没有什么难的,你直接照着官网上教程一直下去就好了,网上也有一些教程,参考结合。CycleGAN主要是得到转换后的图像。
给大家推荐两个训练CycleGAN的博主,我都是看着他们和官网上的进行训练的,有些人是在自己电脑上进行训练,有些人租的服务器,两者不一样,所以每个人遇到的错误都不一样。大家多试几次就好了。
以下是我CycleGAN图像风格转换后的结果:
(我用的都是个人的数据进行训练)
训练好的数据集有A,B以及A转换后得到的C;B转换后得到的D(A、B是源域、目标域,C是A生成的伪造图像,D是B生成的伪造图像)
然后我们就可以训练SSDA-YOLO了,SSDA-YOLO是基于YOLOv5源码开发的,所以在很多训练方式上和YOLOv5一致。
接下来我们要放置数据集。切记。每一步都要准确,不然半天报错。
-SSOD
--source 数据集A(源域) --就是YOLOv5的格式,放置方法。
--images
-train
--val
--labels
--train
--val
--forge 数据集B(目标域)
--images
--train
--val
--labels
--train ---这里要放置空白的标签文件,不然跑不起来
--val
--forge ------这里存放的就是伪造图像
--train_s-t -----源域训练集的伪造图像
--train_t-s -----目标域训练集的伪造图像
--val_s-t -----源域验证集的伪造图像
以下是我数据集存放的图片:
接下来配置data.yaml。如下图:图中有中文解释。
3.训练
接下来是训练,找到ssda_yolov5_train.py 的735、736行,改一下参数。
直接train ssda_yolov5_train.py就可以开始训练了。
说明几点:
1.我整篇文章都没有说环境,这个东西,能做到SSDA-YOLO的人,都是跑过很多模型的人了,我相信环境肯定难不倒你。
2.CycleGAN和SSDA-YOLO是两个环境,我个人是在服务器上训练的。所以不牵扯环境需要重新配置啥的。
3.大家有什么问题,私信回我就行,我挺喜欢和别人交流这些问题的。
最后留给大家一个思考题:
SSDA-YOLO、Efficient Teacher等半监督目标检测框架都是很相似的,那有没有一种可能用SSDA-YOLO来训练单纯的半监督目标检测(只是把数据改一改)呢?
从结构上是可以实现的,我正在搞。
现在半监督目标检测框架有很多了,但是基于YOLO这种框架的开源的非常少。很多人都是在YOLO上改习惯了,你发论文总不能光用个YOLOv5。