Add training codes into Hanqer/deep-hough-transform.
Since there are no training codes in the original repo, I decided to add some training codes.- I considered to use the architecture of deep-hough-transform to train on my own task. The task is not actually similar to the task of
Semantic Line Detection
. This repo is just an attempt of writing the training codes. No plan to open my dataset or evaluate the model.- (In Chinese): 这条用中文再啰嗦叙述一下,因为我个人目前的工作想要考虑看一下这个deep hough transform的方法能不能用在我的数据集上,但是他这个没有训练代码啊,自己试着写一下。
- 多说一句,看代码的时候我发现trainset的设置(数据读取、transform)作者闭源了,另外label和loss计算也都闭源了,所以我考虑这两个点是有比较重点的tricks。
- Developed under
Pytorch1.3 Python3.6
- 看了一下作者的代码,forward.py里面写的很清楚了,网络前向输出的是keypoints。 这个keypoints就是HoughLineTransform之后的那个参数空间的map, 因为HoughLineTransform其实本质上就是在一个二维图上面, 每个点表示一根直线,原图片上有点在这个直线上的话就给这根线“投票”一次, 所以最后的这个map,最大值可能有几百上千。因此前向输出后再接了一个sigmoid映射到1以内。
- 我看了作者的c_dht的实现,似乎是没有进行参数学习的,只是写成了深度网络的层, 所以测试了一下如果直接输入一个二值化的图,上面只有一根直线,输出的结果上确实有一个“能量最大”的点,这个点可以作为学习的对象; 但我的工作其实是想语义性的识别圆,如果输入的是圆的二值化的图,输出的结果图就会是:
这样的图片没法学啊。后来想了一下因为映射方法固定了,作者原始的课题就是做直线,那就是映射到Hough直线变换后的空间,这个空间不是给圆设计的。 因此如果我要进行类似的圆的检测,必须自己设计一个参数空间,然后自己设计一个c_dhct(deep hough circle transform)嵌到网络中进行训练。 (所以这个项目的后续开发可能不会有了,目前已经写了的可以po出来看看有没有人需要的) P.S.原文说可以扩展做arbitrary shapes的课题,其实还是有局限性吧……
- Not finished yet