nnstreamer-preprocessor / nnstreamer

4 stars 0 forks source link

preprocessor development(Spherical Projection) #7

Closed ddeokho closed 4 years ago

ddeokho commented 4 years ago

목표 : Lidar data를 spherical projection을 이용해 이미지 형태로 만드는 전처리기 완성

현재 완료 상황 : txt데이터를 읽어 spherical projection 후 array(640 x 64)에 담아 appsrc에 넣는 것은 구현 완료(하지만 아이디어 적용 X)

진행 해야 하는 것(3/5일 목요일까지) 현재 spherical projection 후 배열에 담을 때 각도를 반올림해 배열에 들어갈 index(=각도)를 정한다. 이 때 아래와 같은 문제가 생기는데 이를 해결해야 한다.

-> interpolation을 이용해 각도와 거리를 생성하는 코드를 추가한다. 이는 데이터 간에 정교한 간격을 만들며, 위에서 발생하는 문제를 줄일 수 있을 것이라 판단.(완료 후 appsrc_test.c 깃허브에 업로드)

리뷰어 : 다운 님, 용희 님

Screenshot from 2020-03-01 23-37-18

jwkanggist commented 4 years ago

직접적으로 연결된 분들을 리뷰어로 지정해주세요 :-)

ddeokho commented 4 years ago

예 지정했습니다!

DownyBehind commented 4 years ago

목표 : Lidar data를 spherical projection을 이용해 이미지 형태로 만드는 전처리기 완성

현재 완료 상황 : txt데이터를 읽어 spherical projection 후 array(640 x 64)에 담아 appsrc에 넣는 것은 구현 완료(하지만 아이디어 적용 X)

진행 해야 하는 것(3/5일 목요일까지) 현재 spherical projection 후 배열에 담을 때 각도를 반올림해 배열에 들어갈 index(=각도)를 정한다. 이 때 아래와 같은 문제가 생기는데 이를 해결해야 한다.

  • array의 같은 자리에 데이터가 중복으로 들어가 다른 자리가 비는 현상 발생한다.
  • 라이다 데이터는 이미지와 다르게 데이터간 간격, 이산화가 균등하게 되어 있지 않다. 그래서 array에 주입할 때 부정교합이 발생한다.

-> interpolation을 이용해 각도와 거리를 생성하는 코드를 추가한다. 이는 데이터 간에 정교한 간격을 만들며, 위에서 발생하는 문제를 줄일 수 있을 것이라 판단.(완료 후 appsrc_test.c 깃허브에 업로드)

리뷰어 : 다운 님, 용희 님

Screenshot from 2020-03-01 23-37-18

제가 어제 내용 들을 때도 완벽하게 이해가 되지 않아서 문의드립니다. 말씀하시는 이슈가 spherical projection 시에 전체 Lidar Data들을 변환하면 결과가 중복되는 녀석들이 생긴다는 말씀이시죠?

어제 보니까 Result로 나온 각도들이 소수점 아래로 5~6자리까지 표현되는 것 같은데 이걸 반올림하시는 이유가 Resolution때문에 그런신거죠?

ddeokho commented 4 years ago

예 맞아요. 프레임의 간격이 위/아래로 1deg, 양옆으로 0.25deg로 해서 64X640인데 프로젝션한 한 후의 결과는 예를 들어 각도가 (1, 0.254...),(1,0.252...)이런 형태로 나온다면 같은 자리에 덮어써지는 경우가 발생해요.

반올림은 frame배열에 넣을 때 Int로 형변환해 주기 때문에 없어도 되어요. 그리고 *4는 Resolution 때문이 맞아요!(배열 인덱스를 int로 밖에 못넣어 주기 때문에 interpolation으로 그 위치에 존재하는 값을 생성? 찾아서 넣어주려고 해요. resolution을 더 높이긴 해야할 거 같은데 우선 구현부터 해보려구요!)

ddeokho commented 4 years ago

interpolation 대신 resolution을 높이기로 결정 그리고 완료.

이유 - interpolation을 추가하는 방법은 두가지로 데이터를 읽음과 동시에 배열에 저장하는 방법 그리고 아무처리 없이 배열에 저장후 다시 배열을 읽어 interpolation을 하는 방법이 있는데 이는 resolution을 높히는 것 보다 밀도면에서 크게 차이가 안났으며(같은 프레임에 0이 아닌 데이터 갯수차이) 속도는 최소 2배 느렸음.

프레임 크기는 630*24로 줄었지만 전방 160도를 관찰하던 것을 90도로 줄임. 즉 row의 1칸이 0.25deg에서 0.144deg로 해상도가 올라감.

-> 일요일까지 생성된 코드에 NNStreamer를 연동해보기.

hayleyshim commented 4 years ago

input data 사이즈를 늘려 테스트해보려는데요. 배열 크기를 늘리니 segmentation 오류가 뜨네요. 배열 인덱스 문제인듯해요

char filename[14]; char s2[13]="data_point/"; sprintf(filename,"00000000%s.txt",index); char *filename2=strcat(s2, filename); printf("%s\n", filename2);

저희가 기존 KITTI dataset 에서 txt 만 넣다보니, 지금 0.6GB 정도되는 데이터로 한번 넣어서 돌려보려하고있어요. 아직 test dataset이 확정된건 아니예요.

ddeokho commented 4 years ago

input data 사이즈를 늘리셨다는 게 txt파일의 수를 늘렸다는 건가요? 각각의 txt파일의 용량을 키웠단 말씀이신가요?

어떤 배열인가요? 프로젝션 된 데이터의 프레임 배열 사이즈는 이상이 없을 거에요. 조건에 따라 특정 부분만 넣고 있기 때문에요.

그리고 배열 인덱스 에러면 out of index error 에러 말씀하신건가요??

hayleyshim commented 4 years ago

txt 파일수를 늘려넣었는데 단순히 터미널에 출력되는 파일리스트만 기존 코드의 10개만 출력되는건지, 아웃풋 화면이 달라진건지 다시 체크해볼게요.

터미널에 보여주는 파일리스트를 늘리려 s2 배열을 늘렸더니 segmentation error 라고 출력되었고 이는 배열에서 보통 인덱스 문제로 알고있어요.

ddeokho commented 4 years ago

파일수는 142줄의 char *file_list를 올려주시면 되어요.

segmentation error는 말씀하신 내용 봤을 때 불러올 인덱스는 있는데 그 안에 비어 있어서 파일을 못불러와 그럴거에요.

파일 수가 늘어났으면 char *file_list에 열고자 하는 파일이름을 넣어 주시면 되고 이게 파일이 100개가 넘어가 파일 이름이 100자리가 되면 또 이런 에러가 나올테니 27번 째 줄에 조건문으로 index 사이즈에 따라 sprintf를 맞춰주면 될거에요!

아니면 데이터 어떤 것인지 알려주시면 제가 다운 받아서 불러올 수 있도록 수정해 드릴게요!

hayleyshim commented 4 years ago

네, chat file_list 부분에 파일명 넣어주면 되요ㅎㅎ근데 char file_list 에 파일 넣어주는 소스코드 수정해야하지않을까요, 지금보니 하드코딩으로 박아주는식으로 코드가 짜여있어 추후 데이터 바꿔넣어줄것을 고려하여 수정하는게 어떨까싶어요.

테스트로 돌려본 데이터는 https://github.com/nnstreamer-preprocessor/dataset/tree/master/2011_09_26_drive_0005_extract/velodyne_points/data 입니다

ddeokho commented 4 years ago

테스트용으로 몇 개만 불러오도록 되어 있는 부분을 폴더 내에 파일을 전부 불러 올 수 있도록 수정했어요.

테스트로 돌려보신 데이터를 기준으로 코드를 구성했고 해당 코드의 151, 152번 째 줄의 '157'을 폴더 내 파일 개수에 맞게 수정해주시면 되어요.

이렇게 구성한 이유는 폴더 내의 파일 이름을 array에 담을 수 있도록 돕는 라이브러리가 있던데 그걸 적용하니 컴파일이 안되더라구요. 그래서 라이다 raw데이터의 이름이 규칙이 있으니 그걸 이용해 불러오도록 만들었어요.

나중에 데이터 종류에 따라 구분이 필요할 거 같은데 그건 아직 정해지지 않았으니 정해진 후 하면 될 것 같아요.