0%

运用tensorflow2在人脸识别中遇到的问题和bug

运用tensorflow2在人脸识别中遇到的问题和bug

之前做科创项目时遇到的一些问题的解决方案,特此记录。

bug1:TensorFlow2与TensorFlow1不兼容的问题。

这是目前最为常见的问题,由于卷积神经网络最火的时间在18年,当时产出了大量优质的项目和开源代码供使用。但如果今日想要复现当时的成果时,会遭遇TensorFlow和python版本更新后不兼容的问题。

推测当时版本:TensorFlow1,python3.6

根据网上报错的解答,可以得知TensorFlow1.13版本不兼容python3.7环境,偌使用python3.7环境,建议将TensorFlow更新至1.15。

本机环境采用的TensorFlow2.0版本

解决方案:

既然问题已经非常明显了,当遇到报错提示为(此类型通用)

AttributeError: module 'tensorflow' has no attribute

意味着TensorFlow2中不再有改模块。

给出两种解决方案:

1、卸载当前版本TensorFlow,回到源代码版本的TensorFlow

2、将以下代码进行修改:

1
import tensorflow as tf

改为:

1
2
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

此法可以解决90%的报错。但是有一个例外,也就是contrib模块。

此模块的解决方案:建议回TensorFlow1+python3.6,或者根据官方文档及上述引用链接自行修改。

4月20日更新:

contrib模块中的slim已经没了,如果需要调用slim模块,需要

1
pip install tf_slim

将配置文件中的

1
slim = tf.contrib.slim()

全部改为

1
slim = tf_slim()

且加上关闭TensorFlow2功能的相关语句。

参考链接:

https://blog.csdn.net/kyle1314608/article/details/100594884

bug2:cv2.imread()读取图片返回none。

读取图片返回空,会直接导致后期图片处理出问题,例如:

1
cv2.error: OpenCV(3.4.3) C:\projects\opencv-python\opencv\modules\imgproc\src\resize.cpp:4044: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize’

解决方案:

原因1:图片路径形式书写错误

\在程序中为转义符号,不可用错

OpenCV读取路径单路径即可,不需要 //

错误的形式:C:\Users\Desktop\test
正确的应该:C:/Users/Desktop/test/

原因2:图片路径没有写全

具体图片精确到 .jpg/.png

具体文件夹精确到:test/

正确的应该:C:/Users/Desktop/test/

原因3:路径中带中文

路径中绝对绝对绝对绝对绝对绝对不要有任何中文!!!特别是python3环境下

原因4:图片数量不一致

你有多少图片,就搞多少图片,别自己变图片出来。

主要在循环遍历时才会遇到这个问题

参考链接:

https://blog.csdn.net/m0_37882192/article/details/108738901

bug3:checkpoint文件内部设置。

以我的为参考:

1
G:/science/trainmodel/model-600

注意 ‘ / ‘ 以及模型不带后缀。

另外,训练时生成模型使用的函数:

1
saver.save(sess, 'G:/science/trainmodel/model')

中的路径部分采用windows格式的 ‘ / ‘即可,我之前写python路径写顺手了,直接写了全部 // ,直接GG

bug4:saver.restore恢复模型报错

经典坑位之一,附上我的代码:

1
saver.restore(sess, tf.train.latest_checkpoint('G:/science/trainmodel'))

tf.train一行指调用生成的最后一个模型,还有多种参数可以按需使用。

路径单双斜杠均不受影响。

-------------本文结束感谢您的阅读-------------