cfzd / Ultra-Fast-Lane-Detection-v2

Ultra Fast Deep Lane Detection With Hybrid Anchor Driven Ordinal Classification (TPAMI 2022)
MIT License
607 stars 100 forks source link

如何用自己資料集生成row anchor 和col anchor? #127

Open lalumayang opened 1 year ago

lalumayang commented 1 year ago

程式碼位置 Ultra-Fast-Lane-Detection-v2/scripts/convert_curvelanes.py 中的calc_k()函式能大致說明一下其中的功能嗎?

1.這是我使用自己資料集生出的紅色為col anchor,綠色為row anchor結果,左邊第二條有跑偏,不太明白會是生成的哪步驟出現問題。 image 圖片為1280*720 上圖的標註檔案為以下格式: 每一行為一條車道線上有的點座標=[x1 y1 x2 y2 x3 y3 ... xn yn ] image

2.左一車道線,得出的方程式無法儗合車道線,想請問還有甚麼方式能完美服貼於車道線上? image 上圖的標註檔案為以下格式: 每一行為一條車道線上有的點座標=[x1 y1 x2 y2 x3 y3 ... xn yn ] image

對於生成row anchor 和col anchor的方式有些疑惑,期待作者的回覆,感謝~~

cfzd commented 1 year ago

@lalumayang

lalumayang commented 1 year ago

感謝作者對於以上問題的答覆~~

image 我們會透過原始的Ground truth 生成出符合UFLDv2提出的hybrid anchor system滿足一條車道線能給出一系列新的坐標,就如上圖。

  1. 那我有個疑問,如何生成Ground truth並符合UFLDv2要的車道線格式?
  2. 假設圖像中只有一條車道線,我要如何透過原始的Ground truth點生出完全儗合車道線的方程式?
  3. 看程式碼中是使用curve = np.polyfit(arr[1::2], arr[::2], min(len(arr[::2]) - 1, 3))得出方程式,可會有像下圖(左一)的情況發生,作者對此有更好的解決方式嗎? image

感謝~~

cfzd commented 1 year ago

@lalumayang 你应该不需要手动生成车道线在row和col上的坐标表示,在训练时,我们会使用my_interp来对车道线进行插值,得到在row和col上的表示。

https://github.com/cfzd/Ultra-Fast-Lane-Detection-v2/blob/c903880678454dfd9b55a63022368db05c00bc6d/data/dali_data.py#L246 https://github.com/cfzd/Ultra-Fast-Lane-Detection-v2/blob/c903880678454dfd9b55a63022368db05c00bc6d/data/dali_data.py#L254

convert_curvelanes这个脚本中生成的表示方法实际上是通过row的方式表示的,目的是为了使得所有车道线都可以用一个定长的矩阵表示(毕竟标注中的车道线有的点多,有的点少,很难以batch的形式送进网络进行训练)。

图上的各种问题我觉得是标注质量的问题,看起来似乎标注结果本来就是不准的?

lalumayang commented 1 year ago

感謝答覆~~

下圖為ground trurh畫出來的結果: image 標註格式為下: 每一行為一條車道線上有的點座標=[x1 y1 x2 y2 x3 y3 ... xn yn ] image 就我看到的資訊我是覺得標註沒問題的,作者怎麼看呢?

convert_curvelanes是通過row的方式表示而生成points_col = my_interp.run(points, self.interp_loc_col, 1)中的points矩陣,而其中points的生成方式是?

cfzd commented 1 year ago

@lalumayang

抱歉回复的晚了,看起来gt是很准的,我想知道图上歪歪扭扭的点是怎么画出来的呢?是通过这个地方的all_points画出来的吗? https://github.com/cfzd/Ultra-Fast-Lane-Detection-v2/blob/c903880678454dfd9b55a63022368db05c00bc6d/scripts/convert_curvelanes.py#L148-L150 可以尝试一下以下的方法: