论文就是标题这篇,19年bappy大佬的又一篇顶刊,整体工作是对他们之前一篇也是基于LSTM实现复制篡改检测工作的改进,但这篇给了源码。

code:jawadbappy/forgery_localization_HLED: Implementation of "Hybrid LSTM and Encoder-Decoder Architecture for Detection of Image Forgeries" paper. (github.com)

代码初看上去及其庞大,但是按照readme的引导后,实现异常的简单,就是源码用的是tf.slim,一个小众的库,看懂不成问题,但是之后改进可能会有些麻烦,想着之后把它用keras重写一下。

本文旨在帮大家理清跑训练需要用那些文件,至于剩下了一大堆干啥的我也不知道,所有的内容也没仔细看,能调通就大吉大利了。

首先现在基本都是tf2.及以上了,最基本的兼容tf1必须加上,

import tensorflow as tf
import tensorflow.compat.v1 as tffrom tensorflow.python.ops.rnn import static_rnn
import tf_slim as slim
tf.disable_v2_behavior()

那个tf_slim也要自己pyinstall下来才行,之后改动源码里一些函数调用方法,改完大致如下

stacked_lstm_cell =tf.compat.v1.nn.rnn_cell.MultiRNNCell([tf.compat.v1.nn.rnn_cell.DropoutWrapper(tf.compat.v1.nn.rnn_cell.BasicLSTMCell(n_hidden), output_keep_prob=0.9) for _ in range(2)])out, state = static_rnn(stacked_lstm_cell, xCell, dtype=tf.float32)
之后就是训练需要的数据集,两个h5文件。训练集的话作者在云盘提供了三个挺大的数据集,先都下载解压后可以看到都是彩图与对应掩码的png文件,然后用下面的代码转成train_img.hdf5文件。这是转载另一个大佬的:(1条消息) Python 万级图片数据集成到HDF5文件中,绝对路径_weixin_44576543的博客-CSDN博客_python读取hdf5图
import os
import cv2
import numpy as np
import h5py
from matplotlib import pyplot as plt
import tensorflow as tf
from tensorflow.python.client import device_lib  # gpu cpu information
from datetime import datetime
import time
import osos.environ["CUDA_VISIBLE_DEVICES"] = "0"
log_device_placement = Trueimg1 = []
dir = 'C:/Users/Administrator/PycharmProjects/convlstm/Bernard/Computer_Vision/spliced_copymove_NIST/rgb_imgs'
# img1=np.zeros()
for filename in os.listdir(dir):img1.append(dir + '/' + filename)
#     #   *print(filename)*
mask = []mdir = 'C:/Users/Administrator/PycharmProjects/convlstm/Bernard/Computer_Vision/spliced_copymove_NIST/masks'
for filename in os.listdir(mdir):mask.append(mdir + '/' + filename)with tf.device('/gpu:0'):#   # num=13470imagedata_shape = (len(img1), 256, 256, 3)maskdata_shape = (len(img1), 256, 256)mean = np.zeros(imagedata_shape[1:], np.float32)f = h5py.File('spliced_NIST.hdf5', mode='w')f.create_dataset("train_img", imagedata_shape, np.int8)f.create_dataset("train_labels", maskdata_shape, np.int8)f.create_dataset("train_mean", imagedata_shape[1:], np.float32)start_time = time.time()for i in range(len(img1)):#   #     print(i)if i % 1000 == 0 and i > 1:print('image_data: {}/{}'.format(i, len(img1)))img = cv2.imread(img1[i])img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)height, width = img.shape[:2]size = (int(width * 0.25), int(height * 0.25))img = cv2.resize(img, size)#    #    imgData[i]=imgmean += img / float(len(img1))mask1 = cv2.imread(mask[i], cv2.IMREAD_GRAYSCALE)mask1 = cv2.resize(mask1, size)for ii in range(256):for j in range(256):if mask1[ii][j] > 0:mask1[ii][j] = 1else:mask1[ii][j] = 0f['train_img'][i, ...] = img  # 将数据写入文件的主键data下面f['train_labels'][i, ...] = mask1  # 将数据写入文件的主键labels下面f["train_mean"][...] = meanf.close()  # 关闭文件duration = time.time() - start_timeprint(duration)

接下来是要把这个train_img.hdf5提取重采样特征做成另一个hdf5文件,这个源码里有,还有两种计算方式,一种调用cuda和外部库,很麻烦,我也没调通,反正下面有里一个差不多结果的sklearn实现(是作者说的结果差不多),改个地址直接运行extract_resamp_feat.py就会生成train_img_feat.hdf5,现在有这两个已经可以跑训练了,但是源码里是直接用4个训练集和一个测试集,所以有10个h5文件同时加载,哪里改动挺简单就不在这里赘述了,反正有几个数据集都行,在一个batch里按比例自己分配就行。

再说一个都有些疑惑的店,作者在源码里处理输入的img时统一除以了mx,也就是127,通过查看作者自己提供的8张测试集的hdf5文件,可以发现它的三通道里的值都在0-127之间,所以除127就是一个归一化,但是作者提供的那三个数据集里面的png图片值都在0-255之间,所以私以为要达到相同效果的归一化就应该除以255。但作者在源码里除之前还有一个操作看不懂,

Img=np.uint8(Img)
Img=np.multiply(Img,1.0/mx)

理论上unit8之后的值都在0-255之间了,他还除以127是咋回事?所以这也有可能不是一个简单的归一化操作,但是该是个啥我也不知道了。

我也还没跑出结果,有大佬有结果了麻烦私信一下,谢谢。

Hybrid LSTM and Encoder-Decoder Architecturefor Detection of Image Forgeries的复现梳理相关推荐

  1. Hybrid LSTM and Encoder–Decoder Architecture for Detection of Image Forgeries论文阅读

    Hybrid LSTM and Encoder–Decoder Architecture for Detection of Image Forgeries Code link:https://gith ...

  2. encoder decoder 模型理解

    encoder decoder 模型是比较难理解的,理解这个模型需要清楚lstm 的整个源码细节,坦率的说这个模型我看了近十天,不敢说完全明白. 我把细胞的有丝分裂的图片放在开头,我的直觉细胞的有丝分 ...

  3. Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation之每日一篇

    真正提出 Seq2Seq 的文章是<Sequence to Sequence Learning with Neural Networks>,但本篇<Learning Phrase R ...

  4. 【译】A Fully Spiking Hybrid Neural Network for Energy-Efficient Object Detection

    文章目录 [译]A Fully Spiking Hybrid Neural Network for Energy-Efficient Object Detection 1 Abstract 2 Int ...

  5. encoder decoder模型_3分钟|聊一聊 Decoder 模块

    微信公众号:NLP从入门到放弃 本文大概需要阅读 4.1 分钟 聊一下对 Decoder 的个人总结和理解,我保证里面大部分内容你没在别人那看过,绝对原创. 我先说一个很小的细节点,当时花了点时间才琢 ...

  6. encoder decoder模型_如何突破Decoder性能瓶颈?揭秘FasterTransformer的原理与应用

    位来 发自 凹非寺 量子位 报道 | 公众号 QbitAI 4月9日,英伟达x量子位分享了一期nlp线上课程,来自NVIDIA的GPU计算专家.FasterTransformer 2.0开发者之一的薛 ...

  7. WebRTC Audio Encoder/Decoder Factory 的实现

    Audio encoder factory 用于创建完成各种 audio codec 编码的 encoder 对象,audio decoder factory 则用于创建完成各种 audio code ...

  8. encoder decoder模型_机器学习11 -- 无监督学习之Auto-Encoder

    1 什么是Auto-Encoder 自编码器Auto-Encoder是无监督学习的一种方式,可以用来做降维.特征提取等.它包括两部分 Encoder:对原始样本进行编码 Decoder:对经过编码后的 ...

  9. Deeply supervised salient object detection with short connections 论文复现

    DSS Model论文复现 <Deeply supervised salient object detection with short connections>这篇文章是南开大学程明明教 ...

  10. 【今日CV 计算机视觉论文速览】Thu, 7 Mar 2019

    今日CS.CV计算机视觉论文速览 Thu, 7 Mar 2019 Totally 36 papers Daily Computer Vision Papers [1] Title: Quantifyi ...

最新文章

  1. 从MySQL 5.6升级到8.0,Facebook付出了惨痛代价……
  2. How to read a book
  3. GUI编程笔记(java)04:GUI(HelloWorld)窗体案例
  4. 深入浅出Java中的clone克隆方法,写得太棒了!
  5. [Python图像处理] 二十.图像量化处理和采样处理及局部马赛克特效
  6. amap不同样式marker点_想出一手漂亮的图,CAD打印样式表你必须会!
  7. java中时间各种格式
  8. 在竞争激烈的ToB公司,这个创始团队拒绝一夜暴富,坚持做好产品
  9. Ubuntu16.04安装使用wineqq
  10. 彻底理解MapReduce shuffle过程原理
  11. 转行学AI,如何选择适合的方向
  12. Day01 - 打开Linux大门
  13. 如何使用Java语言实现一个网页爬虫
  14. container html css,splitcontainer
  15. 同一方法被多个Aspect拦截, 修改切面@Around @Before的执行顺序
  16. Spark SQL的selectExpr用法
  17. 移动开发者周刊第一期
  18. HoughCircles()函数 画圆心和圆的轮廓
  19. 【Flink基础】-- 高效学习 flink kubernetes operator 的一些建议
  20. 苹果微信多开_史上最全微信双开 全平台【IOS/安卓/WIN】

热门文章

  1. Ubuntu护眼软件F.lux
  2. UE4蓝图API翻译【节点】--- Get All Actors with Tag
  3. DELPHI7对日期格式的处理
  4. Android - BGAQRCode 扫描二维码生成二维码
  5. 利用Cydia Substrate Hook移动MM支付
  6. POPE-NH|1-棕榈酰基-2-油酰基磷脂酰乙醇胺POPE与NHS(N-羟基琥珀酰亚胺)酯偶联物
  7. 聚石塔,御城河接入,御河城安全整改demo
  8. 杨建:网站加速--实例分析篇
  9. 二分查找思想以及模版的套用
  10. (5)Scrum Master的7种武器之长生剑和孔雀翎