車線データセットCULane処理


車線データセットCULane処理トリミング
0.はじめに
現在使用されている車線データセットは2つあり、tusimpleとculane、tusimpleデータセットの画像の元の解像度は720 Pであるが、culaneデータセットの元の解像度は1640 x 590である.さらに288 x 800解像度は分割ベースの方法で演算量が多く、ボードカードでの動作が遅すぎたため、関連試験も行いbackboneと解像度を変更し、UFLDでmbv 2と256 x 512の解像度トレーニングを用い、モデルはresnet 18、F 1より約3ポイント低下したが、ボードカード速度は20 ms(288 x 800 rensnet 18は70以上)と大きく向上したため、画像解像度については、元の画像の上の空の部分を取り除くことができて、元の図の上で画像の解像度を下げて、記録してスクリプトを生成します
1.実現
下CULane全体のデータセット上の車線点の最小縦座標は250で、個人はデータセットの高さを360に切り取ったので、原図590で230を減算する必要がある.
import os
import cv2
import glob
import numpy as np
# culane datasets ymain = 250
data_dir = ['driver_100_30frame', 'driver_161_90frame', 'driver_182_30frame', 'driver_193_90frame', 'driver_23_30frame', 'driver_37_30frame']
ymin = 590
count = 0
img_num = 0
txt_num = 0
for s in data_dir:
    img_dir = glob.glob(os.path.join(s,'*/*.jpg'))
    txt_dir = glob.glob(os.path.join(s,'*/*.txt'))
    print('{}: img num {} txt num {} total num: {}'.format(s,len(img_dir), len(txt_dir),len(img_dir) + len(txt_dir)))
    for img_path in img_dir:
        img = cv2.imread(img_path)
        img = img[230:,:,:]
        clip_path = os.path.join('/opt/sda5/BL01_Data/Lane_Data/CULane_Clip', img_path)
        if not os.path.exists(os.path.split(clip_path)[0]):
            os.makedirs(os.path.split(clip_path)[0])
        cv2.imwrite(clip_path, img)
        img_num += 1
        txt_path = img_path.replace('.jpg', '.lines.txt')
        if not os.path.exists(txt_path):
            continue
        with open(txt_path, 'r') as f:
            lines = f.readlines()
        #if len(lines) == 0:
        #    print(txt_path)
        lab_path = clip_path.replace('.jpg', '.lines.txt')
        with open(lab_path, 'w') as ff:
            for line in lines:
                points = []
                for index, p in enumerate(line.strip().split(' ')):
                    if index % 2 != 0:
                        p = str(float(p) - 230) + ' '
                    else:
                        p = p + ' '
                    points.append(str(p))
                points.append('
'
) #points = np.array([int(float(x)) for x in points]).reshape(-1,2) #for x_y in points: # cv2.circle(img, tuple(x_y), 2, (255,0,0), -1) ff.writelines(points) txt_num += 1 print('{}: img num {} txt num {} total num: {}'.format(s, img_num, txt_num, img_num + txt_num))