天天看点

asp 检测更改后缀的图片_【算法实验】能检测COCO并鉴黄的SexyYolo(含福利)

asp 检测更改后缀的图片_【算法实验】能检测COCO并鉴黄的SexyYolo(含福利)

code用Tensorflow纯手撸,历时5个月,求赞求星星。

代码已开源,支持Yolov3检测数据集单独训练,以及检测数据集、分类数据集联合训练:

https://github.com/thisiszhou/SexyYolo (基于Tensorflow1.x)

读完Yolov3论文、读过几份代码、自己动手实现一遍,每次都有不一样的感悟。Yolov3原理总结详见:【论文解读】Yolo三部曲解读——Yolov3

本文记录复现Yolov3之后,尝试使用分类数据集NSFW(只有图片类别标签,无标注框标签)和检测数据集COCO联合训练,使得检测器不仅能检测coco的80个类别,还可以在检验出person标签之后,继续分类出neutral(可视化时隐藏)、sexy、porn三个标签(如图一)。

asp 检测更改后缀的图片_【算法实验】能检测COCO并鉴黄的SexyYolo(含福利)

图一 SexyYolo检测效果图

Yolov2论文中的Yolo9000,是业界首次提出将分类数据集和检测数据集联合训练。作者实现了COCO数据集和Imagenet数据集联合训练,使得检测器在检测物体的同时,对物体类别进行垂直细分,例如在狗类别下,还可以继续识别中华田园犬、金毛、哈士奇等。

  • 数据集

检测数据集:http://cocodataset.org/

分类数据集:https://github.com/alex000kim/nsfw_data_scraper

NSFW数据集的介绍不再多说。为了降低训练的时间成本。笔者从下载后的NSFW数据集中,选取了neutral、sexy、porn三个类别,各自挑选了1000张左右的图片作为分类数据集。COCO数据集有11万张训练图片,如果分类数据集数量再多一些,效果会更好(NSFW数据集中有太多干扰和错误数据,需要人工筛选,筛选成本较高,尤其porn类别太辣眼睛)。

  • 检测数据集训练(COCO)
  1. 最终输出改为88维:1维置信度;4维x、y、w、h,80维coco类别;3维NFSW类别。
  2. 检测数据集,产生的loss与之前完全一样,新增的3维类别,检测数据集不产生loss。因为COCO数据集对于垂直类别没有标记,所以没有更进一步的类别信息,不产生loss即可。
  • 分类数据集训练(NSFW)
  1. 正例:设置置信度阈值,当预测框的置信度 × person类别概率 >= 置信度阈值时,该框被标作正例,正例的x、y、w、h不产生loss,置信度标签为1,类别标签,person与最后三维中相应类别为1,其余类别都为0。
  2. 负例:设置负例阈值,置信度小于该阈值时,被标记为负例,负例的置信度标签为0,其余维不产生loss。
  3. 正例使用nms进行过滤,被过滤掉的,不再作为正例。
  4. 忽略样例:大于负例阈值的,但是没有被标记为正例的,忽略,不产生loss。
  5. 先将模型在COCO上训练10个epoch,再混合COCO与NSFW数据集联合训练。

由于分类时,无法获取预测框与真实框的IOU数值,所以需要用nms进行过滤,训练最契合的预测框,不确定的预测框,不参与训练。至于为什么正例置信度标签为1,因为在实验中,如果不加置信度1标签,分类数据集上渐渐就检测不出person,因为没有person时,分类图片上产生的loss最小。

  • 精度
asp 检测更改后缀的图片_【算法实验】能检测COCO并鉴黄的SexyYolo(含福利)

图四

Yolov3中只贴出了训练分辨率为618*618时的全部精度,本地训练使用的416*416,使用作者的coco权重作为SexyCoco的预训练模型,在coco_train2017上不加入分类数据集训练了10个epoch后的精度为上图中Coco only,论文中416*416分别率的mAP-50为0.553,非常接近。之后继续分类与检测数据集联合训练,mAP精度稍有恶化,但是网络可以识别垂直类别neutral、sexy、porn。

  • 参考

YOLOv3: An Incremental Improvement

【论文解读】Yolo三部曲解读——Yolov3

https://pjreddie.com/darknet/

最后送点福利(侵删)。porn检测效果图图以及本地的3000张NSFW数据集,别问,问就是没有(上面有链接,数据集需要请自行下载)。

asp 检测更改后缀的图片_【算法实验】能检测COCO并鉴黄的SexyYolo(含福利)
asp 检测更改后缀的图片_【算法实验】能检测COCO并鉴黄的SexyYolo(含福利)
asp 检测更改后缀的图片_【算法实验】能检测COCO并鉴黄的SexyYolo(含福利)

Yolo并不完美,one stage的检测算法,难点在于数据拟合到极限之后,类别正确率、识别准确率、识别召回率、检测框精度之间的权衡。Faster R-CNN二阶段的分类不会影响一阶段检测框预测,但是Yolo拟合数据集到一定极限之后,就只能在几部分loss中做取舍权衡。

完。欢迎指正和探讨。

继续阅读