ABOUT ME

-

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

    [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 해결] 앞 soundos 라이브러리를 사용하면 아래와 같이 알 수 없는 오류가 발생한다.SyntaxError:(unicode error)'unicodeescape'codec can't decode bytes in position 2-3:truncated\UXXXXXXXX escape​ 이는 파이썬이 유니 코드를 가져올 때\u를 사용하기 때문에 일본어 그와잉눙 오류 이다니다.파이 산 코드로 패스를 지정한 곳에 가서 두고 각 폴더 사이에\을 1개 추가하면 해결됩니다.


    >



    >


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


    >


    ​ 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과 1개의 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:활성 함수 중 가장 치에죠크이욧 sound-Dropout Layer:Overfitting과 Robustness의 증가를 막이 미국 사용되는-Keras'ImageDataGenerator:회전 수직/수평 flip, shift등의 이미지 요소를 추가-mean-squared-error for loss: 보다 다양한 커브길이 데이터를 취급할 수 있도록 해준다-shuffled data: 특정 비디오에 대해서 Overfit하지 않게 해준다-Splitting intraining and validation sets: 모델의 수행방법을 확인, 첫 번째 모델을 훈련시켜 테스트 결과를 보면 좋은 모습을 보일 것 같다.그러나 최종 목표는 투영 변환을 CNN의 이미지를 함께 투영 변환시킬 필요성을 무시하는 것입니다.그래서 첫 모델이 새로 그린라인을 만드는 데 적당히 효과적이라는 것을 알고 진로를 바꿨다.2번째 모델로 달라진 점은 상위 3개의 이미지를 제거하는 Crop Layer라는 층을 새롭게 추가시킨 것입니다.CNN cloud는 실제로 투영변환 없이도 차선계수를 학습할 수 있고, 돌러에 더 효과적인 예측 모델을 만들어낼 수 있는 sound를 sound는 느려졌지만, 그 본인마의 첫 번째 모델을 수행하면서 깨달은 것은 다행입니다.하지만 여전히 큰 문제가 존재합니다.그것은 제 모델이 차선 레이블 계수를 예측할 경우, 이는 원래 이미 투영 변환되지 않았더라도 여전히 라인을 만들어 도로 공간으로 되돌릴 필요가 있다는 것을 의미했다는 점입니다. 이것은 새롭게 데이터로 하나 반화하는 데 큰 문제를 하나 일으켰다. 거기서 고안한 것이, 어느 새롭게 데이터의 변환 행렬을 만드는 것입니다. ​ 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 new 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 thath have modelishelishelishelis, th를 몇 개씩만든 간에 적용이 있었다. 정방향으로 만들어진 정상적인 Convolutinal 층과는 달리 Keras의 Deconvolution 층은 반대방향으로 신경망의 역전파를 맞혀 정확한 크기에 도달하기 위해서는 좀 더 세심하게 다루어야 한다(output의 크기를 정할 필요성도 포함). ​ The final model is within the"fully_conv_NN.py"file.I stuck with RELU activation and some of the other convolution parameters(strides of(1,1)and'valid'padding had performed the best)from my prior models, but also added more extensive dropout.I had wanted to use dropout on every Convolutional and Deconvolutional layer, but found it used up more memory than Ihad. Ialsotried to use Batch Normalization prior to each layer but foundit alsoused up toomuch memory, and instead Isettled for justusing it at the beginning. Amore interesting discovery, givent hatusing MSE for losspreviss had previss unmathation mathathathathathathathat adding anytype of image augmentation with Image Data Generator, whathather rotations, flips, channel shifts, shifliss, shifornel shifor, shifornel shife 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.