Tensorflow版图像篡改检测网络实现:Image manipulation detection

Tensorflow版图像篡改检测网络实现:Image manipulation detection

项目简介与来源

论文: CVPR2018, Learning Rich Features for Image Manipulation Detection
代码: https://github.com/LarryJiang134/Image_manipulation_detection by LarryJiang134
该项目为由University of Maryland & Adobe Research提出,主要工作为对篡改(PS过的)图像进行篡改位置检测,并输出篡改类型(移动、复制等)。
代码由LarryJiang134开源。
在此感谢论文作者以及代码实现作者对CV贡献!

本文目的为帮助大家实现该代码。在配置过程中,不断修改了一些bug,这些bug是在源代码中readme没有提到的,因此提供给大家参考。

问题及解决方案

本人实现的环境为Ubuntu+Tensor flow 1.8 + python 3.6。建议大家按照此使用anaconda配置。期间可能需要安装PIL(Pillow)、scipy、opencv3等包。在此不做叙述。

1.数据集生成问题
Readme中说到,需下载COCO、VOC等数据集后,使用main_create_training_set.py生成新的训练数据集。因此需要大家先下载VOC2007(代码中使用的数据集)、COCO等。我下载的是VOC2007。然后在main_create_training_set.py中将路径修改正确,需要注意的是文件名大小写问题,否则会找不到图像或标注文件。
另外,main_create_training_set.py主要是对原VOC中的标注文件进行修改(不会在原数据集文件中直接更改),会将原数据集中的图像和标注文件重新生成到新文件夹,因此别忘记新建一下新的数据集文件夹:/Image_manipulation_detection/data/DIY_dataset/VOC2007/,并在该文件夹中分别新建JPEGImages、ImageSets、Annotations。
生成完新的图像及标注数据后,不要忘记在ImageSets里新建Main文件夹,并将源数据集中trainval.txt考入到新建的Main文件夹中。
如此以来,数据集就准备好了。

在此主要简述下main_create_training_set.py的工作原理,以便大家理解:
首先按顺序抽取图片A,然后随机抽取另一个“待抠图”图片B,将B的分割的ground truth(mask)读出,并从中随机选取一类实例,将符合条件(while循环里的条件)的实例抽出,直接从图B的对应位置将图抠出贴到图A中,并将此实例的bounding box位置信息读出,写到图A对应的目标检测ground truth (xml文件)中,将检测类别设为”tamper“,位置信息为贴图实例的bounding box信息。
至此完成一张ps图片与他的检测框ground truth xml文件。

2.import _mask、COCOeval、COCO等找不到问题
首先对于_mask包,需要运行Image_manipulation_detection/data/coco/PythonAPI/文件夹中的Makefile文件,生成_mask.so文件,具体操作为进入该文件夹,直接在命令行输入make。如遇到cython命令找不到等问题,则直接pip进行缺失包的安装即可。
对于后两者包找不到问题,则为文件路径错误导致的,需要你找一下具体的这两个包在哪些路径,然后修改import 后面的代码即可。如类COCO在lib\coco.py里,则需要 import lib.coco.COCO,而不是直接import COCO。

3.‘vgg16’ object has no attribute ‘_anchor_target_layer’
该错误会引发一大串错误,需要你好好读错误原因,然后进行修改。在此阐述该问题的主要原因为,作者将部分代码及import注释掉了,该问题出现在了以下文件中:

 1)/lib/nets/network.py
 2)/lib/layer_utils/anchor_target_layer.py 
 3)/lib/layer_utils/proposal_target_layer.py

这三个文件会出现大量被注释函数、import包,需要你仔细检查,将所有注释的代码去掉注释。在此放出去除所选代码注释小tip:选择想要去注释的代码行,Ctrl+/。

4.缺失cython_bbox函数。
其主要原因为,在文件夹Image_manipulation_detection/lib/utils/中的bbox.c只被编译成了作者所在环境的.so文件,而你需要对你所在环境下重新编译bbox.c,生成cython_bbox.so文件。但作者似乎没有提供编译build.py文件帮助大家编译。在此提供一个帮助大家编译cython_bbox.so的程序:https://github.com/XinZhangNLPR/Build-cython_bbox.so.git
该setup.py帮助大家将utils/中的bbox.c编译为cython_bbox.so,并放在文件夹/utils中。
下载后放到/Image_manipulation_detection/lib/中,然后在命令行中输入:

cd /Image_manipulation_detection/lib/ 
python setup.py build_ext -i

之后控制台会执行编译命令,编译完成后,/utils便会出现你所使用环境下的cython_bbox.so文件。

5.预训练模型vgg16读取失败
这个是个比较丧的bug,代码中读取的文件是vgg16.ckpt,但作者提供的与训练模型是vgg_16.ckpt。所以问题就出现在了命名错误。只需将文件名中的短下划线去掉即可。
6.其他
其他的一些小问题都是比较低级的bug,类似于5中的错误。可能是路径没写对等等,如果遇到,可在评论区评论提问。
训练
下图展示了训练5000次的效果:
在这里插入图片描述在这里插入图片描述
可见第一张大白熊效果可以,第二张的检测效果一般,还需要继续训练。

  • 21
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 112
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 112
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值