ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [03월 241] 자율주행 코드 분석, 발표자료 준비, pytube 만들기, unicode error, prefix already exist 에러 해결 ~~
    카테고리 없음 2020. 2. 16. 00:43

    [Pytube] - pytube를 이용해서 유튜브 영상을 다운로드할 수 있다고 해서 문장을 정리해 두었다. 참고:http://rldhks6899.blog.me/221495835696


    [Honda Value Eror:prefix already exists오류 해결]1 conda info-env:현재 존재하는 가상 환경 파일 표시 2 conda env create-fenvironment.yml:패키지 가상 환경 설치 3 conda env create-fenvironment.yml-nenvironment Name:새 폴더를 만들어 거기에 환경 인스톨 만약 github에서 특정 칠로, 특정 프로젝트를 다운로드하기 위해서 설정할 수 있다.conda3​ 이는 패키지를 설치하는 아나콘다 경로를 잘못 지정했던 때문에 생기는 잘못이다.그리고 환경 설정하는 명령 2번을 사용할 경우 다음에 폴더를 더 만들도록 코드를 추가하면 된다.conda env create-fenvironment.yml-nenvironment Name [Unicode Errror 해결] 처음의 os 라이브러리를 사용하면 아래와 같이 알 수 없는 오류가 발생할 것이다.SyntaxError:(unicode error)'unicodeescape'codec can't decode bytes in position 2-3:truncated\UXXXXXXXX escape​ 이는 파이썬이 유니 코드를 가져올 때\u를 사용하기 때문에 일어난 식입니다.파이 산 코드로 패스를 지정한 곳에 가서 각 폴더 사이에\을 1개씩 추가하면 해결됩니다.


    >



    >


    [캡스톤 발표 자료 준비]이번 주 화요일 1가지다, 캡 스톤의 중간 발표를 위해서 대략적인 흐름도를 작성하려고 합니다.한 외국 Github 중 유명한 캡스턴 프로젝트 가이드를 만들어 놓은 것을 참고하기 위해 굳이 번역해서 저장해 본다.참고:ML-capstone Github​ 1.Project Overview, 운전 중에 가장 많이 하는 하나의 하나는 도로의 라인에 따라서 주행하는 것이었다 운전자가 취했거나 제 정신이 아닌 이상 대부분의 사람은 운전 시험을 거치면 주행은 문제가 없습니다.하지만 이렇게 사람에게는 쉬운 하나는 컴퓨터를 보고 해결하라고 하면 많은 난관이 존재합니다. 왜 컴퓨터에는 이런 하나가 어려운 것일까요? ZERO Base의 컴퓨터는 도로상의 흰색 선과 노란색 선을 구분조차 잘 할 수 없습니다.그리하여 우리는 최소한 도로 위의 선은 구분할 수 있도록 Computer Vision이라는 기술을 융합시켜야 합니다.(Computer Vision에서 Camera Calibration, Gradient thresholds, perspective transformation등)​ 2.Problem Statement만약 운전자가 충분히 주의하고 있다면 사람은 주어진 주행 환경 아래에서 도로 라인을 제대로 구분할 수 있습니다.대조적으로 컴퓨터는 동시간대에 바로 도로선을 잘 구별하지 못합니다.하지만컴퓨터와는달리우리에게도라디오나전화를하면서동시에운전을못한다거나긴주행에따른피로감으로인해집중력이저하된다거나여러가지한계점이존재합니다.그리고 만약 우리가 컴퓨터를 인간 수준의 고령은 그 이상까지 도로선을 검출할 수 있도록 훈련한다면 사람이 운전하는 것보다 상당한 효과를 기대할 수 있을 것입니다. 혹은 안전성 측면에서 신뢰도가 높아질 것입니다.나는 딥러닝을 이용해 컴퓨터 비전으로만 구현한 것보다 더 강력하고 빠른 모델을 훈련시키려고 했다. 이 모델은 CNN이라 불리는 Convolutional Neural Network(인공신경망 구조)를 기반으로 훈련되었습니다.CNN은 주로 주도 데이터를 다룰 때 많이 사용되는 구조에서 sound훈련이 시작됬을 때 pixel단위의 모델 프레 그래서 패턴을 찾아내고 이들의 패턴은 전체의 리드 속의 보다 넓은 영역에서 더 많은 패턴으로 발전합니다. ​ 3.Evaluation Metrics:평가 지표이프로지에크토에서 가장 하나 제일의 목표는 모델에 CNN을 가르쳐서 많은 차선의 복잡한 계수를 계산하고 그 차선을 바탕으로 새롭게 선을 그 위에 그리는 일이었습니다. Regression-type의 문제와 동일하게 접근하는 방법은 훈련 중 Loss를 최소화하기 위해 MSE(Mean-Squared-Error)를 반드시 사용해야 합니다.여기서 Loss는 각 차선의 실제 계수와 모델의 예측 차이를 의미합니다.마지막 접근 방식에서도 fully-CNN을 사용했기 때문에 원본 영상 위에 녹색 라인을 그려 넣기 위해 MSE를 활용했다. 여기서MSE를사용했습니다.이것은 Output 라인 앞 예측 픽셀 값과 차선 앞 레벨 상에 존재하는 것 사이의 Loss를 최소화한다는 것을 의미합니다.그래서 컴퓨터 비전만 쓰고 처리한 것과 비교하여 정확도와 속도 면에서 직접 평가합니다. ​ 4.Datasets and InputsDatasets는 Youtube에 게재되고 있는 영상을 사용했다.Pytube를 이용하고 다운로드한 영상은 1280 x 720 size의 720p의 화질과 30 fps를 가지고 있었다.훈련 분석을 줄이 벌써 하고 훈련 먼저 자신을 80 x 160 size에서 크기를 덜어 줬다.크기를 줄이면 기본적으로 최종 CNN 구조가 심화될 때 적당한 계산을 쉽게 해준다.​ 6개의 관계 값을 갖는 원본의 라벨을 계산하기 때문에 기초적인 컴퓨터 비전 기술을 몇가지 적용했습니다.카메라 고유의 왜곡을 바로잡기 위해서 OpenCV의 Image Calibration을 사용해야 하고, 차선을 평평한 평면상에 올리기 위해서 Perspective Transformation을 사용하지 않으면 안 되었습니다.앞의 sound에는 원본보다 견고하게 하기 위해서 앞쪽에 차선을 표시하는 선을 그리려고 했습니다.그러나 선을 그리는 대신 6개의 계수들만 출력되도록 바꾸고 라벨로 각 계수를 바탕으로 Network를 훈련시키려고 했지만, 많은 Data들이 직진 차에 대한 이수 트리가 모두 sound와 바로 Dataset이 부족한 일을 깨달았다.그리고 다시 Curve 차선을 포함한 영상 데이터 부분을 찾아 컴퓨터 비전 기술을 적용했습니다.​ 저 넴 많은 직선 차로 데이터가 존재하는 것을 깨닫고 즉시 43퍼.센트 정도의 커브 데이터를 수집한 43퍼.세인트 정도면 충분할 것이라고 믿었는데 왼쪽 라인에 대한 계수 분포도 중 하나를 확인을 하다 보니 여전히 직진 데이터의 주위에 상당수의 값이 분포하는 문제점이 존재했다. ​ 2.Problem Statement만약 운전자가 충분히 주의하고 있다면 사람은 주어진 주행 환경 아래에서 도로 라인을 제대로 구분할 수 있습니다.대조적으로 컴퓨터는 동시간대에 바로 도로선을 잘 구별하지 못합니다.하지만컴퓨터와는달리우리에게도라디오나전화를하면서동시에운전을못한다거나긴주행에따른피로감으로인해집중력이저하된다거나여러가지한계점이존재합니다.그리고 만약 우리가 컴퓨터를 인간 수준의 고령은 그 이상까지 도로선을 검출할 수 있도록 훈련한다면 사람이 운전하는 것보다 상당한 효과를 기대할 수 있을 것입니다. 혹은 안전성 측면에서 신뢰도가 높아질 것입니다.나는 딥러닝을 이용해 컴퓨터 비전으로만 구현한 것보다 더 강력하고 빠른 모델을 훈련시키려고 했다. 이 모델은 CNN이라 불리는 Convolutional Neural Network(인공신경망 구조)를 기반으로 훈련되었습니다.시엔엔은 주로 데이터를 입력한다룰에서 흔히 쓰이는 구조에서 sound훈련이 벌어질 때 pixel단위의 모델 틀이니까 패턴을 찾아 이들의 패턴은 전체의 앞선 끝이 더 넓은 영역에서 더 많은 패턴으로 발전하게 됩니다. ​ 3.Evaluation Metrics:평가 지표이프로지에크토에서 가장 하나 제일의 목표는 모델에 CNN을 가르쳐서 많은 차선의 복잡한 계수를 계산하고 그 차선을 바탕으로 새롭게 선을 그 위에 그리는 일이었습니다. Regression-type의 문제와 동일하게 접근하는 방법은 훈련 중 Loss를 최소화하기 위해 MSE(Mean-Squared-Error)를 반드시 사용해야 합니다.여기서 Loss는 각 차선의 실제 계수와 모델의 예측 차이를 의미합니다.마지막 접근 방식에서도 fully-CNN을 사용했기 때문에 원본 영상 위에 녹색 라인을 그려 넣기 위해 MSE를 활용했다. 여기서MSE를사용했습니다.이것은 Output 라인 앞 예측 픽셀 값과 차선 앞 레벨 상에 존재하는 것 사이의 Loss를 최소화한다는 것을 의미합니다.그래서 컴퓨터 비전만 쓰고 처리한 것과 비교하여 정확도와 속도 면에서 직접 평가합니다. ​ 4.Datasets and InputsDatasets는 Youtube에 게재되고 있는 영상을 사용했다.Pytube를 이용하고 다운로드한 영상은 1280 x 720 size의 720p의 화질과 30 fps를 가지고 있었다.훈련 분석을 줄이 벌써 하고 훈련 먼저 자신을 80 x 160 size에서 크기를 덜어 줬다.크기를 줄이면 기본적으로 최종 CNN 구조가 심화될 때 적당한 계산을 쉽게 해준다.​ 6개의 관계 값을 갖는 원본의 라벨을 계산하기 때문에 기초적인 컴퓨터 비전 기술을 몇가지 적용했습니다.카메라 고유의 왜곡을 바로잡기 위해서 OpenCV의 Image Calibration을 사용해야 하고, 차선을 평평한 평면상에 올리기 위해서 Perspective Transformation을 사용하지 않으면 안 되었습니다.앞의 sound에는 원본보다 견고하게 하기 위해서 앞쪽에 차선을 표시하는 선을 그리려고 했습니다.그러나 선을 그리는 대신 6개의 계수들만 출력되도록 바꾸고 라벨로 각 계수를 바탕으로 Network를 훈련시키려고 했지만, 많은 Data들이 직진 차에 대한 이수 트리가 모두 sound와 바로 Dataset이 부족한 일을 깨달았다.그리고 다시 Curve 차선을 포함한 영상 데이터 부분을 찾아 컴퓨터 비전 기술을 적용했습니다.​ 저 넴 많은 직선 차로 데이터가 존재하는 것을 깨닫고 즉시 43퍼.센트 정도의 커브 데이터를 수집한 43퍼.센트 정도에 오르면 충분할 것이라고 믿었지만, 좌측 라인에 대한 계수 분포도 중 하나를 확인해 보면, 여전히 직진 데이터의 주위에 꽤 많은 값이 분포하는 문제점이 존재하고 있었다.


    >


    ​ 5.Algorithms and Techniques우선 내가 훈련시키려 한 영상의 키위, 프레임을 선택해야 할 것입니다.다음으로, 위에 기술한 같은 CV기술을 적용시키기 위해서 레벨을 만드는 데에 있어서, 기위지를 가공할 필요가 있습니다.그러므로 OpenCV의 cv.calibrate Camera 함수를 이용하여 카메라의 왜곡 현상도 조절해 줄 것이다.앞으로 모델의 견고함을 높이기 위해 사용된 각 기위지 안의 차선 위에 빨간색 선을 그린다.이들 기위지 위에 나는 (반환된 기위지가 빨간색 선이 그려진 값만 갖도록) 높은 빨간색 값을 갖는 기위지 영역에 대해 Binary Thresholding을 사용합니다. 그래서 중간 지점에서 분리되어서 어느 지점에서 수직적으로 픽셀 값이 떨어지는지를 이용해서 히스토그램을 맞추게 될 겁니다. (?) 그러니까 우리 프로그램은 왼쪽 방향으로 높은 지점과 오른쪽 방향으로 분리된 높은 지점을 찾게 될 겁니다.그러면 Sliding Window는 더 많은 바이너리 활동량을 찾아서 우리가 그린 선을 따라가려고 합니다.여러 개의 Sliding window에서 찾은 Pixel을 바탕으로 "numpy.polyfit"을 이용하여 최대한 가까운 차선에 적합한 값을 반환합니다. Polynomial을 사용하면 직선뿐만 아니라 곡선선도 추적할 수 있습니다. 이 함수는 2차 함수"ax^2+bx+c"에 대해서 합계 3개의 계수를 갖고 있는 슴니다. 나는 훈련을 위한 라벨로서 사용하기 때문에 각 2개 라인에 총 6개의 계수에서 항 시리다고 하는 것입니다. 하지만 훈련을 하기 전에 우리가 지정한 레벨이 모든 것에 대해 정확한지 확인하려고 합니다.투영 변환과 원본 왜곡 제거(undistortion)을 통해서 자존심지를 만들어"numpy.zeros_like"을 이용해서 비오 잇눙키의 위지 어레이를 만들어 각 라인에서 Fully Polynomial Fit Equation을 계산하고 모든 Polynomial계수를 요구하고 모든 차선의 지점을 만들어 마무리로 "cv2.fillPoly"를 이용하고 차선 그림을 발발한 줍니다.​ 전에 계산한 투영 변환의 역행렬과 "cv2.warpPerspective"를 이용하면 이 차선 그림을 원래의 키위, 공간에 도에루료쥬루 수 있다. 이어"cv2.addWeighted"를 사용하고 원금 키위 지에 묘사한 라인을 병합하려 할 생각입니다.이런 비결을 이용하면 우리 모델에게 정확한 레벨을 확실히 줄 수 있다고 말씀드릴 겁니다.마지막으로, 이 프로젝트는 CNN 구조를 구축하기 위해 Keras를 사용한다.4개의 CNN과 한장의 Pooling Layer그래서 4개 FC(Fully connected)을 이용하고 움직임의 흉내를 진행하는 것입니다. ​ 6.ImplementationFirst CNN Training Model-batch normalization-4개의 Convolutional Layers:각 층을 거듭할 수록 Filter의 수는 감소-Pooling Layer, Flatten Layer-4개의 Fully-Connected Layers:마지막 FC층은 6개 output(차선의 라인에 대한 6개의 계수들)-Relu activation function:활성 함수 중 가장 최적 이욧움-Dropout Layer:Overfitting과 Robustness의증가를 막기 위해 사용되는-Keras'Image Data Generator:회전, 수직/수평 flip, shift 등과 같은 기위지 요소를 추가-mean-squared-error for loss:보다 다양한 커브 길데이터를 취급할 수 있도록 해준다-shuffled data:특정 비디오에 대해 Overfitting intraining and validation sets: 모델이 수행하는 비결을 확인 첫 번째 모델을 훈련하고 테스트 결과를 보면 좋은 모습을 보일 것 같다.하지만 최종 목표는 투영 변환을 CNN의 기위지를 함께 투영 변환시킬 필요성을 무시하는 것이다.그래서 첫번째 모델이 새로 그린 라인을 만드는데 적당하게 효과적임을 이해하고 진로를 바꿨다.2번째 모델로 달라진 점은 상위 3개의 자부심지를 제거하는 Crop Layer라는 층을 새로 추가한 것이다.CNN Cloud는 실제 투영 변환 없이도 차선 계수를 학습할 수 있어 오히려 더 효과적인 예측 모델을 만들어낼 수 있다는 점을 뒤늦게나마 첫 번째 모델을 수행하고 깨달은 것은 다행이다.하지만 여전히 큰 문재가 존재합니다.그것은 내 모델이 차선 레이블 계수를 예측할 경우, 이는 원래의 기위지가 투영 변환되지 않았더라도 여전히 라인을 만들어 도로공간으로 되돌릴 필요가 있다는 것을 의미했다는 점이다. 이는 새로운 데이터로 일반화하는 데 큰 문재를 일으켰다. 거기서 고안 한 것이, 어느 새로운 데이터의 변환 행렬을 만드는 것이다. ​ 7.Refinement:개선 방안 먼저 CNN이 적절한 라인 계수를 결정할 수 있다면 아마 실체 차선은 적어도 예측해야 하는 값을 일러준 키위 지의 유사한 영역 위에서 활성화되고 있다고 가정했습니다.각 층의 활성화 여부를 확인하기에 가장 적합한 keras-vis 라이브러리를 이용하기로 하였습니다.이 라이브러리는 실제 class별 활성화 지도를 확인할 수 있도록 도와준다(이 경우 분류 문재를 취급하지 않기 때문에 class는 각 계수 레벨을 의미할 것입니다).


    >


    Ialso briefly tinkered with trying to improve the activation maps above by using transfer learning. Giventhat in my Behavioral Cloning Project, the carneed to stay on the road, I figured ithad potentially learned a similive moded a simpato, the carned a simpathats of to, the toel wasal ready more robust. Afterusing "model.pop" on that model to remove the final fully-connected layer (whichhad only one output for that project), Iadded a 새로운 fully-connected layer with six outputs. Then, Itrained the already-established model further on my real road images(the old model wastrained on simulated images), and actually found that it did a better job on looking ath lines, butstill found ther havelishelishelishelisheling을 만든 것이 나쁘지 않다.이 있었다. 정방향으로 만들어진 정상적인 Convolutinal층과 달리 Keras의 Deconvolution층은 반대방향으로 신경망의 역전파를 다소 잘라, 높고 정확한 크기에 도달하기 위해서는 좀 더 세세하게 다룰 필요가 있다.(output의 크기를 정할 필요성도 포함). The final modelis with in the "fully_conv_NN.py" file. I stuck with REL U activation and some of the other convolution parameters(첫, 첫) and "valid" padding had performed the best) from my prior models, butals, butalso addels, models emodels up models, buthan I ithan Ihadith Rels. Isettled for just using it at the beginning. Amore interesting discovery, givent hatusing MSE for loss previss had previss previss unman mathathathathathat adding anytype of image augmentation with Image Data Generator, whetherit be rotations, fliss, channel shifts, shifornel shifts, shifrithiss, shisting discover etc., did notresult in a more robust model, and oftens to model, oftytense modeltyctment model this case, skipping any augmentation(although I kept the generator in anyway without is good practice) lead to a better model. Chis ftshelped with shadows, but worsened overall performance. Thised in the moded in the model. fthe model. fthe model. model. ftodd predictions, and then merges with the original road image from a video frame.


    >


    ​ 9.Evaluation and Validation20번의 Epochs를 거친 뒤 나의 모델은 각각 훈련 0.0046, 평가 0.0048의 MSE의 수치를 만들어 냈다.이태까지 훈련시킨 모델 중 아침이 훨씬 수치를 기록한 것이라 깜짝 놀랐다.영어문장은 내용이 어렵지 않고 해석하기도 어려워서 그냥 가져온거예요.


    댓글

Designed by Tistory.