tf2.0 自定义Model高级用法
最近看insightface
深受启发,他的人脸识别在训练时可以训练softmax
的,还可以训练triplet loss
的,并且在验证时是对图像pair
进行验证的。这几天弄论文顺便先给tf
里面的模型写个骨架出来。这里的主要难点在于如何用tf.keras
自带Model
类实现训练和测试时不同的行为,今天尝试了一下,做个总结。
最近看insightface
深受启发,他的人脸识别在训练时可以训练softmax
的,还可以训练triplet loss
的,并且在验证时是对图像pair
进行验证的。这几天弄论文顺便先给tf
里面的模型写个骨架出来。这里的主要难点在于如何用tf.keras
自带Model
类实现训练和测试时不同的行为,今天尝试了一下,做个总结。
本次主要总结一下retinaface和Ultra-Light-Fast-Generic-Face-Detector-1MB。
实际上retinaface
和Ultra-Light-Fast-Generic-Face-Detector-1MB
的思路都是基于SSD
的,本来我做yolo
之后准备学习一下SSD
的,做完这两个模型也算是学习到了。由于我目前不开源基于tensorflow
的训练代码,下面的代码大家仅供参考~
在yolo
中计算了单层的anchor
与全局的gt
间的iou score
,但是我需要在其中过滤出单层的anchor
对应单层的gt
的iou score
。目前有单一层的gt
的loc_mask
,以及全局的gt
的glob_mask
,其中loc_mask
中有效区域是glob_mask
的子集,因此需要找到loc_mask
在glob_mask
的对应索引。
用了挺久的tensorflow
,目前也尝试了一些别的框架,感觉最让我难受的一点就是没法很方便的按索引赋值。
原因主要有: 1.
tensorflow
的索引方式与numpy
不同,写起来别扭。
2. 必须要变量类型才可以进行赋值。
我写完这篇文章后找到对普通tensor
的赋值方式了
这次就来说下一些数组操作在tensorflow
里面的写法。
要给yolo
添加多尺度训练,因为tf.keras
无法对dataset
对象进行callback
操作这也就算了,但是我没法得知dataset
对象目前在生成训练数据还是测试数据,这个就很蛋疼,需要能在尽量不大改代码的同时添加多尺度训练方式,所以还得看tf.keras.callback
.
我今天运行个模型,跑着跑着内存就泄漏了,我很奇怪,然后用memory_profiler
分析了下内存泄漏的点.发现是skimage
的resize
中出现了泄漏.
论文《Lookahead Optimizer:
k steps forward, 1 step back》的tf.Keras
实现.
参考自苏剑林的repo