cherubicXN / hawp

Holistically-Attracted Wireframe Parsing [TPAMI'23] & [CVPR' 20]
MIT License
298 stars 52 forks source link

how to training custom dataset? #37

Open xueyoo opened 1 year ago

xueyoo commented 1 year ago

when I use wireframe dataset, and the result is successfully, but when use custom datase, the result is very bad. could you provide some detail information or some comment for train custom dataset?

thanks

cherubicXN commented 1 year ago

Because of the annotation bias, the model (HAWPv2) trained on the Wireframe dataset may be failed. So, I extended HAWP to self-supervised learning.

For the training on your custom data, you may need to follow the data format of HAWPv2 to prepare the train.json file. Meanwhile, you need to add your dataset into paths_catalog.py.

xxx0320 commented 1 year ago

Hello, I am new to line segment, how can I generate ann['edges_negative']. Thanks!

xueyoo commented 1 year ago

@cherubicXN thanks for your kindly reply! can ssl support for long curve ?
from the image docs/figures/v3-BSDS/42049.png, it seems support long curve. but i am not sure which junction to label in long curve, could you give some information for this case? thanks

cherubicXN commented 1 year ago

Hi, the "negative edges" was presented in L-CNN and I followed their configuration in the conference version. For the latest version, you can safely set dummy negative edges as [(0,0)] because we did not use the static negative edges during training. I plan to remove the hard requirements for the static negative edges in the next version.

cherubicXN commented 1 year ago

For the HAWPv3 model, we practically found that it could handle the long curves, but it would be failed in some cases. The model hawpv3-imagenet-03a84.pth trained on ImageNet-small usually works better than the one we used in our main paper.

In my opinion, annotating long curves would be very challenging due to the inherent ambiguity. For example, if we are going to annotate a large circle, any point on the circle can be labeled as a junction.

Based on this ambiguity, if I were labeling the long curves with images, I would like to annotate some salient edge points as the junctions or use an off-the-shelf detector to assist the labeling. You can try it.

Ciciluang commented 1 year ago

hello,I was wondering how to generate ann['edges_positive']?or can you tell me how to generate the json file for hawpv2 code?

cherubicXN commented 1 year ago

edges_positive is an Nx2 list with the endpoint indices. For example, if we have four junctions $(x_0,y_0), \ldots, (x_3,y_3)$ and 5 line segments $(x_0, y_0) \rightarrow (x_1, y_1)$, $(x_1, y_1) \rightarrow (x_2, y_2)$, $(x_2, y_2) \rightarrow (x_3, y_3)$, $(x_3, y_3) \rightarrow (x_0, y_0)$, $(x_0, y_0) \rightarrow (x_2, y_2)$, then the pairs of indices are (0,1), (1,2), (2,3), (0,2). So the edges_positive should be

edges_positive = [[0,1],[1,2],[2,3],[3,0], [0,2]]
cherubicXN commented 1 year ago

The latex codes are generated by chatGPT! Here is a screenshot image

Ciciluang commented 1 year ago

Is the line segment depend on the ground truth? or randomly generate by the endpoint indices in edges_positive ?

cherubicXN commented 1 year ago

It is, of course, the ground truth. I show the example to illustrate the data format.

hphuongdhsp commented 1 year ago

Can I ask more about the format of the junction and edges_positive? In the case that there is no junction in an image, what do egdes_positive and lines look like?