update
This commit is contained in:
parent
4af428c63e
commit
18293b45b1
33
README.md
33
README.md
|
@ -25,3 +25,36 @@ A ADAS(Advanced Driver Assistance System) for Euro Truck Simulator 2 (or America
|
||||||
- Dataset contains 323894 frames captured at 25fps.
|
- Dataset contains 323894 frames captured at 25fps.
|
||||||
- Each frame is paired with steering wheel controller input values at that moment
|
- Each frame is paired with steering wheel controller input values at that moment
|
||||||
- Using [Europilot](https://github.com/marsauto/europilot)
|
- Using [Europilot](https://github.com/marsauto/europilot)
|
||||||
|
|
||||||
|
Data Directory Structure:
|
||||||
|
|
||||||
|
```
|
||||||
|
(BDD100k dataset)
|
||||||
|
├── image
|
||||||
|
│ └── 100k
|
||||||
|
│ ├── test
|
||||||
|
│ ├── train
|
||||||
|
│ └── val
|
||||||
|
└── label
|
||||||
|
├── det_20
|
||||||
|
├── drivable
|
||||||
|
│ ├── colormaps
|
||||||
|
│ │ ├── train
|
||||||
|
│ │ └── val
|
||||||
|
│ ├── masks
|
||||||
|
│ │ ├── train
|
||||||
|
│ │ └── val
|
||||||
|
│ ├── polygons
|
||||||
|
│ └── rles
|
||||||
|
└── lane
|
||||||
|
├── colormaps
|
||||||
|
│ ├── train
|
||||||
|
│ └── val
|
||||||
|
├── masks
|
||||||
|
│ ├── train
|
||||||
|
│ └── val
|
||||||
|
└── polygons
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
![example.png](src/perception/sample.png)
|
|
@ -2,7 +2,7 @@
|
||||||
"cells": [
|
"cells": [
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 24,
|
"execution_count": null,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
|
@ -92,10 +92,10 @@
|
||||||
"#lane detection\n",
|
"#lane detection\n",
|
||||||
"obj_df = pd.read_json(\"~/data/ETS2/bdd100k/label/det_20/det_train.json\")\n",
|
"obj_df = pd.read_json(\"~/data/ETS2/bdd100k/label/det_20/det_train.json\")\n",
|
||||||
"\n",
|
"\n",
|
||||||
"selected_image = obj_df[obj_df[\"name\"] == \"024ac038-8a8b481c.jpg\"].reset_index(drop=True)\n",
|
"selected_image = obj_df[obj_df[\"name\"] == \"0000f77c-6257be58.jpg\"].reset_index(drop=True)\n",
|
||||||
"print(selected_image[\"attributes\"][0])\n",
|
"print(selected_image[\"attributes\"][0])\n",
|
||||||
"\n",
|
"\n",
|
||||||
"image = io.imread(\"~/data/ETS2/bdd100k/image/100k/train/024ac038-8a8b481c.jpg\")\n",
|
"image = io.imread(\"~/data/ETS2/bdd100k/image/100k/train/0000f77c-6257be58.jpg\")\n",
|
||||||
"fig, ax = plt.subplots(1) \n",
|
"fig, ax = plt.subplots(1) \n",
|
||||||
"ax.imshow(image)\n",
|
"ax.imshow(image)\n",
|
||||||
"for i in range(0, len(selected_image[\"labels\"][0])):\n",
|
"for i in range(0, len(selected_image[\"labels\"][0])):\n",
|
||||||
|
|
|
@ -45,19 +45,11 @@ def count_parameters(model):
|
||||||
return sum(p.numel() for p in model.parameters() if p.requires_grad)
|
return sum(p.numel() for p in model.parameters() if p.requires_grad)
|
||||||
|
|
||||||
def tensor2im(tensor=None):
|
def tensor2im(tensor=None):
|
||||||
output = tensor.mul(255).add_(0.5).clamp_(0, 255).permute(1, 2, 0).to('cpu', torch.uint8).numpy()
|
output = tensor.mul(255).add_(0.5).clamp_(0, 255).permute(1, 2, 0).to("cpu", torch.uint8).numpy()
|
||||||
return output
|
return output
|
||||||
|
|
||||||
OBJ_LABELS = {
|
OBJ_LABELS = {
|
||||||
'unlabeled':0, 'dynamic': 1, 'ego vehicle': 2, 'ground': 3,
|
"truck": 0, "bicycle": 1, "car": 2, "motorcycle": 3,
|
||||||
'static': 4, 'parking': 5, 'rail track': 6, 'road': 7,
|
"train": 4, "bus": 5, "traffic sign": 6, "rider": 7, "person": 8,
|
||||||
'sidewalk': 8, 'bridge': 9, 'building': 10, 'fence': 11,
|
"traffic light NA": 9, "traffic light R": 10, "traffic light G": 11, "traffic light B": 12
|
||||||
'garage': 12, 'guard rail': 13, 'tunnel': 14, 'wall': 15,
|
|
||||||
'banner': 16, 'billboard': 17, 'lane divider': 18,'parking sign': 19,
|
|
||||||
'pole': 20, 'polegroup': 21, 'street light': 22, 'traffic cone': 23,
|
|
||||||
'traffic device': 24, 'traffic light': 25, 'traffic sign': 26, 'traffic sign frame': 27,
|
|
||||||
'terrain': 28, 'vegetation': 29, 'sky': 30, 'person': 31,
|
|
||||||
'rider': 32, 'bicycle': 33, 'bus': 34, 'car': 35,
|
|
||||||
'caravan': 36, 'motorcycle': 37, 'trailer': 38, 'train': 39,
|
|
||||||
'truck': 40
|
|
||||||
}
|
}
|
|
@ -0,0 +1,81 @@
|
||||||
|
from base import *
|
||||||
|
|
||||||
|
class AutoDriveDataset(Dataset):
|
||||||
|
def __init__(self, csv_file, image_dir, lane_dir, da_dir, transform=None):
|
||||||
|
self.data_frame = pd.read_json(csv_file)
|
||||||
|
self.image_dir, self.lane_dir, self.da_dir = image_dir, lane_dir, da_dir
|
||||||
|
self.transform = transform
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
return len(self.data_frame)
|
||||||
|
|
||||||
|
def __readdata__(self, idx):
|
||||||
|
image_name = os.path.join(self.image_dir, self.data_frame.iloc[idx, 0])
|
||||||
|
label_name = os.path.join(self.da_dir, self.data_frame.iloc[idx, 0]).replace("jpg", "png")
|
||||||
|
image = cv2.cvtColor(cv2.imread(f"{image_name}"), cv2.COLOR_BGR2RGB)
|
||||||
|
da = cv2.cvtColor(cv2.imread("{}".format(label_name)), cv2.COLOR_BGR2RGB)
|
||||||
|
lane = cv2.cvtColor(cv2.imread("{}".format(label_name.replace("drivable", "lane"))), cv2.COLOR_BGR2RGB)
|
||||||
|
label_data = self.data_frame.iloc[idx, 3]
|
||||||
|
boxes = []
|
||||||
|
labels = []
|
||||||
|
for item in label_data:
|
||||||
|
xmin, ymin, xmax, ymax = item["box2d"]["x1"], item["box2d"]["y1"], item["box2d"]["x2"], item["box2d"]["y2"]
|
||||||
|
boxes.append([xmin, ymin, xmax, ymax])
|
||||||
|
if item["category"] == "traffic light":
|
||||||
|
item["category"] = item["category"] + " " + item["attributes"]["trafficLightColor"]
|
||||||
|
elif item["category"] == "other vehicle" or "trailer":
|
||||||
|
item["category"] = "car"
|
||||||
|
elif item["category"] == "other person" or "pedestrain":
|
||||||
|
item["category"] = "person"
|
||||||
|
else:
|
||||||
|
pass
|
||||||
|
labels.append(OBJ_LABELS[item['category']])
|
||||||
|
|
||||||
|
boxes = torch.as_tensor(boxes, dtype=torch.float32)
|
||||||
|
labels = torch.as_tensor(labels, dtype=torch.int64)
|
||||||
|
target = {"lane": lane, "drivable": da, "boxes": boxes, "labels": labels}
|
||||||
|
return image, target
|
||||||
|
|
||||||
|
def __getitem__(self, idx):
|
||||||
|
image, target = self.__readdata__(idx=idx)
|
||||||
|
if self.transform:
|
||||||
|
image, target = self.__augmentation__(image, target)
|
||||||
|
|
||||||
|
return image, target
|
||||||
|
|
||||||
|
def __augmentation__(self, image, target):
|
||||||
|
transform = Aug.Compose([
|
||||||
|
Aug.Resize (720, 640, p=1), Aug.HorizontalFlip(p=0.5), Aug.RandomBrightnessContrast(p=0.5)],
|
||||||
|
bbox_params=Aug.BboxParams(format='pascal_voc', label_fields=['labels']))
|
||||||
|
transformed = transform(image=image, masks=[target["lane"], target["drivable"]],
|
||||||
|
bboxes=target["boxes"], labels=target["labels"])
|
||||||
|
image = transformed["image"].transpose(2, 0, 1)
|
||||||
|
target = {"lane":transformed["masks"][0], "drivable": transformed["masks"][1],
|
||||||
|
"boxes": transformed["bboxes"], "labels": transformed["labels"]}
|
||||||
|
return image, target
|
||||||
|
|
||||||
|
def collate_fn(self, batch):
|
||||||
|
images, targets = zip(*batch)
|
||||||
|
images = images
|
||||||
|
targets = [{k: v for k, v in t.items()} for t in targets]
|
||||||
|
return images, targets
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
dataset = AutoDriveDataset(csv_file="/home/bayes/data/ETS2/bdd100k/label/det_20/det_train.json",
|
||||||
|
image_dir="/home/bayes/data/ETS2/bdd100k/image/100k/train/",
|
||||||
|
lane_dir="/home/bayes/data/ETS2/bdd100k/label/lane/colormaps/train/",
|
||||||
|
da_dir="/home/bayes/data/ETS2/bdd100k/label/drivable/colormaps/train/", transform=True)
|
||||||
|
A, B = dataset.__getitem__(idx=10)
|
||||||
|
dataloader = DataLoader(dataset, batch_size=1, shuffle=True, collate_fn=dataset.collate_fn)
|
||||||
|
images, targets = next(iter(dataloader))
|
||||||
|
fig, ax = plt.subplots(1)
|
||||||
|
ax.imshow(A.transpose(1, 2, 0))
|
||||||
|
ax.imshow(B["lane"], alpha=0.5)
|
||||||
|
ax.imshow(B["drivable"], alpha=0.2)
|
||||||
|
for i in range(0, len(B["boxes"])):
|
||||||
|
rect = patches.Rectangle((B["boxes"][i][0], B["boxes"][i][1]),
|
||||||
|
B["boxes"][i][2] - B["boxes"][i][0], B["boxes"][i][3] - B["boxes"][i][1], linewidth=1, edgecolor='r', facecolor='none')
|
||||||
|
ax.add_patch(rect)
|
||||||
|
|
||||||
|
plt.savefig("sample.png", dpi=500)
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 1.4 MiB |
Loading…
Reference in New Issue