"누구나 손쉽게 자율주행차 AI를 구성해보자."라는 이 책의 모토는 우리의 눈길을 끌었다. AI가 이만큼 많은 사람의 입에 오르내리는 시대는 드물다. 하지만 AI를 실질적으로 사용하기 위해 접근하면 갑자기 저 먼 안드로메다 쯤의 이야기로 들릴 사람들이 많을 것이다. 이 책은 그런 거리감을 수천 광년 단위로 줄여주는 멋진 책이다. 이 책에서 하라는 것만 따라하면 당신이 정치외교학과를 졸업했더라도 나도 왕년에 AI 좀 만져봤다는 생색을 낼 수 있을 것이다. 왜냐하면 당신이 짠 간단한 자율주행차 AI 코드가 모니터에 떠있을 것이기 때문이다. 이 책은 총 3부로 이루어져 있다. 1부에서는 센서의 특성에 대한 이해와 구성하는 코드를 간단히 소개한다. 2부에서는 본격적으로 신경망을 이용한 딥러닝에 대한 내용이 담겨 있으며, 마지막으로 3부에서는 당신의 자율주행차가 달릴 맵을 구성해 달리게 해볼 것이다.
Contents
1장. OpenCV 기초와 카메라 보정
__기술 요구 사항
__OpenCV와 넘파이소개
____OpenCV와 넘파이
____이미지 크기
____회색조 이미지
____RGB 이미지
__이미지 파일 다루기
__비디오 파일 다루기
____웹캠 다루기
__이미지 파일 작업하기
____이미지 뒤집기
____이미지 블러
____이미지 명암, 밝기, 감마 값 바꾸기
____사각형 그리기와 텍스트 입력하기
__HOG를 이용한 보행자 감지
____슬라이딩 윈도우
____OpenCV와 함께 HOG 사용하기
____카메라 소개
____카메라 용어
____카메라 구성 요소
____카메라 선택을 위한 고려 사항
____카메라의 장점 및 단점
__OpenCV를 통한 카메라 보정
____왜곡 탐지
____보정
__요약
__질문
2장. 신호에 대한 이해와 작업
__기술 요구 사항
__신호 유형 이해하기
__아날로그 VS 디지털
__시리얼 VS 병렬
____범용 비동기 수신 및 전송 방식
____차동 vs 단일 종단
____I2C
____SPI
__프레임 기반 시리얼 프로토콜
____CAN 통신 이해하기
____이더넷과 인터넷 프로토콜
____UDP 이해하기
____TCP 이해하기
__요약
__질문
__더 읽어 보기
____오픈소스 프로토콜 도구
3장. 차로 인식
__기술 요구 사항
__임계치 다루기
____각기 다른 색상 공간에서의 임계치 다루기
____RGB/BGR
____HLS
____HSV
____LAB
____YCbCr
____우리의 선택
__원근 수정
__경계 인식
____임곗값 보간법
____임곗값 결합
__히스토그램을 활용한 차로 찾기
__슬라이딩 윈도우 알고리듬
____초기화
____슬라이딩 윈도우의 좌표
____다항식을 이용한 피팅 기법
__비디오를 활용한 차로 인식 성능 향상
____부분 히스토그램
____롤링 평균
__요약
__질문
2부. 자율 주행차가 딥러닝과 신경망으로 작동하는 방식 개선하기
4장. 신경망을 통한 딥러닝
__기술 요구 사항
__머신러닝과 신경망 이해하기
____신경망
____뉴런
____파라미터
____딥러닝의 성공
__컨볼루션 신경망에 대해 알아보기
____컨볼루션
____컨볼루션은 왜 대단한 것일까?
__케라스와 텐서플로 시작하기
____요구 사항
__MNIST 손글씨 숫자 탐지하기
____방금 불러온 데이터는 무엇일까?
____학습 샘플 및 레이블
____원 핫 인코딩
____학습 및 테스트 데이터셋
__신경망 모델 정의하기
____LeNet
____코드
____아키텍처
____신경망 학습하기
____CIFAR-10
__요약
__질문
__더 읽어 보기
5장. 딥러닝 워크플로
__기술 요구 사항
__데이터셋 수집하기
____케라스 모듈의 데이터셋
____기존 데이터셋
____커스텀 데이터셋
__세 가지 데이터셋 이해하기
____데이터셋 분할하기
__분류기 이해하기
____실제 데이터셋 생성하기
____데이터 증강
__모델
____컨볼루션 층 조정하기
____맥스 풀링 층 조정하기
____밀집 층 조정하기
____신경망 학습하기
____신경망 학습 방법
____무작위 초기화
____오버피팅과 언더피팅
__액티베이션을 시각화하기
__추론
__재학습
__요약
__질문
6장. 신경망 개선하기
__기술 요구 사항
__더 큰 모델
____시작점
____속도 개선하기
____깊이 증가시키기
__보다 효율적인 신경망
__배치 정규화를 통해 더욱 똑똑한 신경망 구축하기
____올바른 배치 크기 선택하기
__조기 종료
__데이터 증강을 통해 데이터셋 개선하기
__드롭아웃을 통해 검증 정확도 개선하기
____모델을 MNIST에 적용하기
____이제 당신의 차례!
__요약
__질문
7장. 보행자 및 신호등 감지
__기술 요구 사항
__SSD를 이용한 보행자, 차량, 신호등 감지
____Carla로 약간의 이미지 수집하기
____SSD의 이해
____zoo 텐서플로 감지 모델 알아보기
____SSD 다운로드 및 불러오기
____SSD 실행하기
____이미지에 주석 달기
__신호등의 색상 감지
____신호등 데이터셋 만들기
____전이 학습 이해하기
____ImageNet 알아가기
____AlexNet 파헤치기
____이미지 분류에 Inception 사용하기
____전이 학습에 Inception 사용하기
____Inception에 데이터셋 투입하기
____전이 학습을 통한 성능
____전이 학습 개선
__신호등과 그 색상을 인식하기
__요약
__질문
__더 읽어 보기
8장. 행동 복제
__기술적 요구 사항
__행동 복제를 통해 신경망에게 운전법을 가르치기
__DAVE-2 소개
____manual_control.py 알아보기
____비디오 스트림 1개 녹화하기
____신경망 모델링하기
____회귀 수행용 신경망 학습
____돌출맵 시각화
__신경망을 Carla와 통합하기
____GPU를 작동시키기
__자율 주행!
____제너레이터를 활용한 더 큰 데이터셋 학습
____어려운 방식으로 데이터 증강하기
__요약
__질문
__더 읽어 보기
9장. 시맨틱 분할
__기술 요구 사항
__시맨틱 분할 소개
____목표 정의하기
____데이터 수집하기
____synchronous_mode.py 수정하기
__분류를 위한 DenseNet 이해
____조감도에서 본 DenseNet
____밀집 블록 이해하기
__CNN으로 이미지 분할
__시맨틱 분할을 위한 DenseNet 조정
__FC-DenseNet 블록 코딩
____모든 요소들 결합하기
____네트워크에 입력 공급하기
____신경망 실행하기
____잘못된 시맨틱 분할 개선하기
__요약
__질문
__더 읽을 거리
3부. 매핑과 제어
10장. 조향, 스로틀, 브레이크 제어
__기술 요구 사항
__제어가 필요한 이유
____컨트롤러는 무엇인가?
__컨트롤러의 종류
____PID
____MPC
__CARLA에서 PID 적용하기
____CARLA 설치하기
____Packt-Town04-PID.py 스크립트 파일 복사하기
____Packt-Town04-PID.py 스크립트 파일 복사하기
____PIDLongitudinalController
____PIDLateralController
____스크립트 실행하기
__C++의 예제 MPC
__요약
__질문
__더 읽을거리
11장. 주변 환경 매핑하기
__기술 요구 사항
__지도 작성과 로컬라이제이션이 필요한 이유
____지도 작성
____로컬라이제이션
__지도 작성 및 로컬라이제이션 유형
____동시 위치 추정 및 지도 작성
__오픈소스 지도 작성 도구
__아우스터 라이다와 구글 카르토그래퍼가 있는 SLAM
____아우스터 센서
____repo
____cartographer_ros 시작하기
____Cartographer_ros 구성
____도커 이미지
__요약
__질문
__더 읽을거리
Author
루카 벤투리,크리쉬토프 코르다,김은도,신지호,박희웅,이승열,박세진
페라리(Ferrari)와 오페라 소프트웨어(Opera Software)를 포함한 세계적인 기업들과 함께 프로그래머로서 일한 폭넓은 경험이 있다. 액티브엔터테인먼트(Activetainment)(세계 최초 스마트 바이크 제작사), 퓨처홈(Futurehome)(스마트홈 솔루션 제공 업체), 컴퍼니북(CompanyBook)(판매에 인공지능을 적용한 제품) 등 일부 스타트업에서도 근무했으며 Tapad(Telenor Group)의 데이터 플랫폼 팀에서 일하면서 페타바이트 단위의 데이터를 회사의 여러 부서에서 액세스할 수 있도록 조치했다. 현재는 피아노 소프트웨어(Piano Software)에서 분석 데이터베이스의 수석 엔지니어로 활동하고 있다.
페라리(Ferrari)와 오페라 소프트웨어(Opera Software)를 포함한 세계적인 기업들과 함께 프로그래머로서 일한 폭넓은 경험이 있다. 액티브엔터테인먼트(Activetainment)(세계 최초 스마트 바이크 제작사), 퓨처홈(Futurehome)(스마트홈 솔루션 제공 업체), 컴퍼니북(CompanyBook)(판매에 인공지능을 적용한 제품) 등 일부 스타트업에서도 근무했으며 Tapad(Telenor Group)의 데이터 플랫폼 팀에서 일하면서 페타바이트 단위의 데이터를 회사의 여러 부서에서 액세스할 수 있도록 조치했다. 현재는 피아노 소프트웨어(Piano Software)에서 분석 데이터베이스의 수석 엔지니어로 활동하고 있다.