mariolew / Deep-Alignment-Network-tensorflow

A re-implementation of Deep-Alignment-Network using TensorFlow
111 stars 30 forks source link

issues about trainDNA.py #10

Open JWSunny opened 6 years ago

JWSunny commented 6 years ago

您好,我在进行trainDAN训练时,STAGE=2,执行sess.sun();获取数据训练时,运行到models.py中的S2_InputImage = AffineTransformLayer(InputImage, S2_AffineParam)会报错;

错误如下:

Caused by op 'Stage2/MatrixInverse', defined at: File "D:/softmares/Pycharm_workplace/Deep-Alignment-Network-tensorflow-master/DAN-TF/python_test1.py", line 73, in dan = DAN(initLandmarks) File "D:\softmares\Pycharm_workplace\Deep-Alignment-Network-tensorflow-master\DAN-TF\python_test2.py", line 102, in DAN S2_InputImage = AffineTransformLayer(InputImage, S2_AffineParam) ## 通过变换矩阵对原图进行矫正,得到新的图片 File "D:\softmares\Pycharm_workplace\Deep-Alignment-Network-tensorflow-master\DAN-TF\layers.py", line 60, in AffineTransformLayer A = tf.matrix_inverse(A) File "C:\Program Files\Anaconda3\lib\site-packages\tensorflow\python\ops\gen_linalg_ops.py", line 330, in matrix_inverse name=name) File "C:\Program Files\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 768, in apply_op op_def=op_def) File "C:\Program Files\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 2336, in create_op original_op=self._default_original_op, op_def=op_def) File "C:\Program Files\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 1228, in init self._traceback = _extract_stack()

InvalidArgumentError (see above for traceback): Input is not invertible. [[Node: Stage2/MatrixInverse = MatrixInverseT=DT_FLOAT, adjoint=false, _device="/job:localhost/replica:0/task:0/cpu:0"]]

请问您遇到过吗?是我开始数据变换出了问题吗?能请教您下吗?

JWSunny commented 6 years ago

方便说下如何将stage1转tflite嘛?保存的ckpt模型只要训练stage1嘛? 我训练了两个stage;然后与图结构pb文件,编译tflite文件时,报unsupported operation,squaredifference?您转的时候又遇到问题嘛?

mariolew commented 6 years ago

具体操作请移步tensorflow lite的文档,我这里并没有现成的代码,但stage1肯定可以转的。

JWSunny commented 6 years ago

您方便说下stage1转的流程嘛?

目前,我是stage1训练个model;models.py代码中去掉了stage2部分,model初始化时,保存了去掉stage2的图模型; 具体编译时,就按照tensorflow lite文档的说明,生成冻结图没错,再转tflite文件时就报错了?

mariolew commented 6 years ago

转模型只需要转参数,squaredifference是loss,loss和optimizer都应该去掉。

JWSunny commented 6 years ago

可能我没描述清楚: 1.按照trainDAN.py已经训练出了DAN模型;---DAN_Model

  1. 去掉了models.py中提到的loss和optimizer,初始化DAN模型,得到一个只有图结构的文件 model.pb
  2. 根据DAN_Model和model.pb去编译生成冻结图,再转tflite

报的squaredifference错,是因为DAN_Model训练时,用到了loss吧?因为图结构中我已经去掉了啊? 可能我没听懂?

JWSunny commented 6 years ago

image

JWSunny commented 6 years ago

default

mariolew commented 6 years ago

那这样哪来的squaredifference呢,你再check一下吧。

JWSunny commented 6 years ago

image

有点儿尴尬.....

mariolew commented 6 years ago

这样看我只能认为你图里有squaredifference,然后你上面的代码也写错了,你应该restore的,不应该global init,你这样相当于随机初始化了一个模型,没有用的。

JWSunny commented 6 years ago

是restore之前的DAN model嘛?那个model训练的时候不是用到了loss和optimizer来更新权重的嘛?还是说需要restore一个去掉loss和optimizer的model?

mariolew commented 6 years ago

去掉那些的model,restore它。然后你要是有问题的话,最好把全部代码贴一下。

JWSunny commented 6 years ago

image

JWSunny commented 6 years ago

image

JWSunny commented 6 years ago

image

JWSunny commented 6 years ago

试了下pb文件中还是有squareddifference image

JWSunny commented 6 years ago

STAGE=2的时候,下面那个while就注释吧,不循环了,只是为了生成那个图结构pb文件

mariolew commented 6 years ago

你把代码上传github吧,我现在没什么时间,有空再看你的代码,你应该给出所有代码的。

JWSunny commented 6 years ago

好吧 谢谢谢谢, 我尽快传

JWSunny commented 6 years ago

您好,您方便看了嘛,关于tflite转的问题您知道那个squaredifference是因为啥嘛?我还是没找出来

mariolew commented 6 years ago

对于生成tflite文件,你的代码我貌似没看出什么能报你那个错的问题,但你的代码并不合理。首先,https://github.com/JWSunny/Deep-Alignment-Network/blob/master/tflite_train.py ,模型没有loss,其实并没有在训练。我觉得你报这个错的原因是你生成tflite的时候用的是之前DAN的ckpt而不是tflite_train.py生成的pb,建议你删除所有的ckpt和pb,然后重新用那俩文件生成,应该就没问题了的。

JWSunny commented 6 years ago

新的版本tflite训练的模型代码更新;但是frozen图文件中,依旧存在squareddifference操作;在模型转换时,依旧报错;

image

JWSunny commented 6 years ago

感觉只要用了loss来更新,生成ckpt文件,或者模型中就存在其他涉及squareddifference的函数层操作;最终就导致了frozen图文件中存在squareddifference;

JWSunny commented 6 years ago

感觉无从下手了,总是编译存在squareddifference操作,您之前有编译过嘛,方便给些思路或者指导呗

mariolew commented 6 years ago

我大致给你一个流程吧,1.正常训好模型;2.删除graph中loss optimizer之类的东西,restore模型,然后再保存没有那些东西的模型; 3. 转换

JWSunny commented 6 years ago

您好,查出来是tf.layers.batch_normalization( )函数操作会带来squareddifference,加入去掉这层是不是可能收敛比较慢,甚至不一定能寻到相对比较优的结果?

mariolew commented 6 years ago

batch normalization是可以用的,tflite可以转,感觉不知道为什么你转不了。

JWSunny commented 6 years ago

您好,最近将DAN和mobilenet转移动端,发现batch_normalization和dropout俩层都会导致移动端模型运行失败,真的这俩层不能转吗?去掉这俩层,模型均能运行,只是结果就偏差大了。 您有移动到Android尝试过嘛?

JWSunny commented 6 years ago

好吧~问题我给解决了,S1_train也是个参数,移动端模型得feed这个值,否则报相应的错误; 但想咨询下,(1)models_mobilenet 和 models_cnn 的区别,哪个效果会更好? (2)如何训练models_cnn啊??

NanKeRen2020 commented 6 years ago

您好,我tensorflow不熟练,你代码没怎么看懂,请问模型训练好后如何对一张图像做预测,要怎么给他图像数据怎么取landmark结果,如果可以的话能否提供参考代码研究学习下,谢谢!

LiuNull commented 6 years ago

@JWSunny 您好,请问您可以将您训练好的模型分享一下吗?我在训练模型时stage1的test_error在0.07左右就降不下去了,batch_error约等于0.08,不知道是什么原因。不过我觉得源代码中的用100张图片做validation不恰当,这样会导致validationSet和trainSet有重复,所以我的test_error是用testSet中的500多张图片计算的。我的邮箱是1454291015@qq.com。真的非常感谢!

JWSunny commented 5 years ago

这个应该是一个比赛的数据集,有专门的一个网站,https://ibug.doc.ic.ac.uk/resources 需要写邮件去组委会申请的吧~需要自己申请下~

From: Young Date: 2018-12-21 21:25 To: mariolew/Deep-Alignment-Network-tensorflow CC: sunny; Mention Subject: Re: [mariolew/Deep-Alignment-Network-tensorflow] issues about trainDNA.py (#10) @JWSunny https://www.dropbox.com/s/5yw8wb9k278k400/trainset.zip?dl=1 我试了一下,可以下啊,并未失效,你需要去申请一下解压密码,出于这个原因,我也不能把它直接放出来。需要翻墙。 请问怎么申请那个解压密码呢,我已经把数据集下载下来了。 — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

zgsyky commented 5 years ago

你们这帮人,不好好看论文和代码,一直问人家小姑娘,好吧,那么问题来了,请问论文怎么下载

zgsyky commented 5 years ago

上面问题开玩笑的,能不能加个好友,tel:13216165685(wechat ),想问几个问题,

Brystone commented 5 years ago

hi: 又来打扰了,还是有几个问题困扰着我,如若方便,给个回复,谢谢!

  1. 开始单独训练stage1时,选用的验证集100张图来进行权重学习,是否可以从训练数据中随机选取图片进行参数更新?
  2. 目前在tensorflow实现中,lr=0.0001,stage1利用训练数据集中的随机128张来更新stage1阶段的参数,迭代200epoch;
  3. 单独训练stage2,lr不变;迭代训练400;目前epoch=80;testerror是0.048左右;batcherror是0.011左右
  4. 将 S2_Ret 作为预测的点在对应测试图中进行标注时,发现倾斜图片中预测的关键点偏差较大,预测点都是正的,没有对应倾斜?
  5. 训练完stage1和stage2后,论文中说需要重复进行;是否还需要再训练stage1和stage2l
Brystone commented 5 years ago

老哥,可以分享下stage 1 和 2的训练参数吗,你说的从训练集中挑128张, while Count * 128 < Xtrain.shape[0]: RandomIdx = np.random.choice(Xtrain.shape[0], 10, False) 我按照你代码的设置的,下面这行是从训练集中选10张生成数组,怎么是128张呢??