자율주행차량의 비전과 행동
- 원서명Hands-On Vision and Behavior for Self-Driving Cars: Explore visual perception, lane detection, and object classification with Python 3 and OpenCV 4 (ISBN 9781800203587)
- 지은이루카 벤투리(Luca Venturi), 크리쉬토프 코르다(Krishtof Korda)
- 옮긴이김은도, 신지호, 박희웅, 이승열, 박세진
- ISBN : 9791161757513
- 40,000원 (eBook 32,000원)
- 2023년 04월 28일 펴냄
- 페이퍼백 | 452쪽 | 188*235mm
- 시리즈 : 임베디드 시스템
책 소개
2023년 세종도서 학술부문 선정도서
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/self-driving-cars
요약
"누구나 손쉽게 자율주행차 AI를 구성해보자."라는 이 책의 모토는 우리의 눈길을 끌었다.
AI가 이만큼 많은 사람의 입에 오르내리는 시대는 드물다. 하지만 AI를 실질적으로 사용하기 위해 접근하면 갑자기 저 먼 안드로메다 쯤의 이야기로 들릴 사람들이 많을 것이다. 이 책은 그런 거리감을 수천 광년 단위로 줄여주는 멋진 책이다. 이 책에서 하라는 것만 따라하면 당신이 정치외교학과를 졸업했더라도 나도 왕년에 AI 좀 만져봤다는 생색을 낼 수 있을 것이다. 왜냐하면 당신이 짠 간단한 자율주행차 AI 코드가 모니터에 떠있을 것이기 때문이다.
이 책은 총 3부로 이루어져 있다. 1부에서는 센서의 특성에 대한 이해와 구성하는 코드를 간단히 소개한다. 2부에서는 본격적으로 신경망을 이용한 딥러닝에 대한 내용이 담겨 있으며, 마지막으로 3부에서는 당신의 자율주행차가 달릴 맵을 구성해 달리게 해볼 것이다.
이 책에서 다루는 내용
◆ 카메라 보정을 수행하는 방법
◆ OpenCV을 사용해 자율주행차량에서 차로 감지 기능이 작동하는 방식 숙지
◆ 비디오 게임 시뮬레이터에서 자율주행을 통한 행동 복제 탐구
◆ 라이다를 사용해 파악
◆ 자율 주행 차량의 컨트롤 구성 방법
◆ 객체 감지 및 시맨틱 분할을 사용해 차로, 자동차 및 보행자 위치 파악
◆ 시뮬레이터에서 주행하는 자율주행차를 제어하기 위한 PID 컨트롤러 작성
이 책의 대상 독자
이 책은 자율 주행차를 만드는 데 필요한 몇 가지 측면을 다루고 있으며, 프로그래밍 언어에 대한 기본 지식을 갖춘 프로그래머(가급적이면 파이썬)를 대상으로 한다. 딥러닝 경험이 필요하지 않지만, 책의 앞부분을 완전히 이해하려면 제안된 판독값 중 일부를 살펴보는 것이 좋다. 11장 ‘환경 매핑’과 관련된 소스코드는 C++에 있다.
이 책의 구성
1장, ‘OpenCV 기초와 카메라 보정’은 OpenCV 및 넘파이(NumPy)에 대해 소개한다. OpenCV를 사용해 영상과 비디오를 조작하는 방법과 보행자를 감지하는 방법을 설명한다.
2장, ‘신호에 대한 이해와 작업’에서는 직렬, 병렬, 디지털, 아날로그, 싱글 엔드 및 차동 등 다양한 유형의 신호를 설명한다. 또한 매우 중요한 프로토콜인 CAN, 이더넷, TCP, UDP도 다룬다.
3장, ‘차로 인식’에서는 OpenCV를 사용해 도로의 차선을 감지하는 데 필요한 모든 사항을 설명한다.
4장, ‘신경망을 통한 딥러닝’은 네트워크 신경망에 대한 실용적인 소개로, 신경망을 쓰는 방법을 빠르게 가르치고자 고안됐다.
5장, ‘딥러닝 워크플로’는 4장, ‘신경망을 통한 딥러닝’의 이론을 보완한다. 데이터셋을 확보하거나 생성하고, 교육, 검증, 테스트 세트로 분할하고, 데이터 증강, 분류기에 사용되는 주요 계층 그리고 학습, 추론, 재학습 방법을 포함한 일반적인 워크플로의 단계를 보여 줄 것이다.
6장, ‘신경망 개선하기’에서는 배치 정규화, 조기 중지, 데이터 확대, 드롭아웃(dropout)을 사용해 중립 네트워크를 최적화하고 파라미터를 줄이는 방법과 정확성을 높이는 방법을 설명한다.
7장, ‘보행자 및 신호등 감지’는 당신을 CARLA에 소개한다. 교통 신호등의 데이터셋을 만드는 데 사용할 자율 주행 자동차 시뮬레이터 SSD라는 사전 학습된 신경망으로 보행자, 자동차, 신호등을 탐지하고, 전송 학습이라는 강력한 기술을 활용해 신호등을 색깔에 따라 분류하는 신경망을 학습할 예정이다.
8장, ‘행동 복제’에서는 CARLA를 구동하는 신경망을 학습시키는 방법을 설명한다. 또한 동작 복제, CARLA를 사용해 구동 데이터셋을 구축하는 방법, 이 작업에 적합한 네트워크를 생성하는 방법 및 학습 방법을 설명한다.
9장, ‘시맨틱 분할’은 딥러닝에 대한 최종적이고 가장 선구적인 장으로, 시맨틱 분할이 무엇인지 설명한다. DenseNet이라고 불리는 매우 흥미로운 아키텍처를 설명하고, 그것을 시맨틱 분할에 어떻게 적응시키는지 보여줄 것이다.
10장, ‘조향, 스로틀, 브레이크 제어’는 자율 주행차를 제어하는 것에 대해 설명한다. PID 컨트롤러에 초점을 맞추고 MPC 컨트롤러의 기본 사항을 다루는 컨트롤러가 무엇인지 설명한다.
11장, ‘주변 환경 매핑하기’에서는 지도에 대해 논하고 로컬라이제이션, 라이다 등 오픈소스 매핑 도구를 설명한다. 동시 로컬라이제이션 및 매핑(SLAM, Simultaneous Localization And Mapping)이 무엇인지, 아우스터 라이다(Ouster lidar) 및 구글 카르토그래퍼(Google Cartographer)를 사용해 SLAM을 구현하는 방법을 배운다.
상세 이미지
목차
목차
- 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 구성
- 도커 이미지
- 요약
- 질문
- 더 읽을거리
도서 오류 신고
정오표
정오표
[ p.152: 수식 ]