생성형 인공지능 윤리 2 > Chapter 8. 안전하고 신뢰할 수 있는 인공지능

[활동3] 교통표지판 인식 모델 구현하기

 

 [선택 1,2] 파이썬을 활용하여 티처블 머신으로 만든 모델 이용하기

 1. 파이썬 코드로 확인해보도록 하겠습니다. Codle 사이트에 접속하여 파이썬 코드를 작성해봅니다.

 

 2. 티처블머신 모델 내보내기 → Tensorflow → Keras → ‘모델 다운로드’

 


 3. 다운받은 파일의 압축을 풀면 ‘keras_model.h5’, ‘labels’ 파일 2개가 생깁니다. labels 메모장에는 우리가 설정한 클래스의 이름이 저장되어 있습니다.

 

 4. 코들에 다운받은 ‘keras_model.h5’, ‘labels’ 파일을 업로드합니다. 

- 노트북 파일과 같은 폴더 안에 업로드

 [선택 1] 코드 그대로 복사하여 이용하기

 5. 티처블머신 모델 내보내기 → Tensorflow → Keras → 코드 ‘복사’하여 Codle에 붙여넣기

 


 

 6. 테스트할 이미지의 경로를 복사하여 코드 실행하기 

‘keras_Model.h5’에서 Model을 model 소문자로 수정합니다. 

이미지 파일의 경로는 ‘마우스 오른쪽 버튼’-‘경로 복사’, home을 ..으로 변경 

ex) ‘home/사진.png’ -> ‘../사진.png’로 변경

 


 [선택 2]  코드 직접 작성하기

 7. 라이브러리 불러오기 

- keras : 딥러닝을 쉽게 하도록 만들어진 인공신경망 라이브러리 

- PIL : Pillow라고 불리며 이미지 분석 및 처리를 쉽게 할 수 있는 라이브러리 

- numpy : 행렬과 유사한 배열 단위로 데이터를 관리하고 이에 대한 연산을 수행하기 위한 모듈

 


 8. 학습시킨 모델, 레이블 불러오기

 


 

 9. 테스트할 이미지 데이터 전처리 및 모델 추론 

<이미지전처리> 

① 고차원 배열의 데이터를 다루기 위해 np.ndarray로 생성합니다. 

  - 사진 데이터이므로 shape=(샘플수, 가로, 세로, 색상정보).

  - 1개 이미지 데이터, 가로224, 세로224, 컬러 이미지(RGB)이므로

② 테스트하고 싶은 이미지 파일을 엽니다. 

③ 테스트할 이미지를 똑같은 사이즈로 변경합니다. 

④ numpy배열로 바꿉니다. 

⑤ 정규화 작업 

  - 학습 속도나 성능 최적화에 도움이 됩니다. 

⑥ 불러온 numpy 타입의 이미지를 변수에 대입합니다. 


<모델예측> 

① 데이터의 예측한 결과를 prediction에 클래스별로 확률을 저장합니다. 

② np.argmx : 가장 확률이 높은 인덱스를 추출하여 index 변수에 저장합니다. 

③ index 변수에 해당하는 클래스명을 class_name 변수에 저장합니다.

④ 정확도를 confidence_score 변수에 저장합니다.

 


 

 10. 예측 결과 확인 

모델명 : model, 클래스명 : class_names 

이미지 파일의 경로는 ‘마우스 오른쪽 버튼’-‘경로 복사’, home을 ..으로 변경 

ex) ‘home/사진.png’ -> ‘../사진.png’로 변경

 

 

 

 


확장활동

 


정확도를 높이는 또 다른 방법은 무엇이 있을까요? 데이터 증강이란, 원본 데이터로부터 새로운 데이터를 만들어내는 것을 말합니다. 이를 통해 부족한 데이터 문제를 해결할 수 있습니다. 이미지 자르기, 회전, 밝기 조절, 블러 처리, 반전, 노이즈 삽입 등 약간의 변형을 주는 방법을 통해 데이터를 증강시킵니다.


[수업활동 tip]

1) 데이터 증강이라는 방법에 대해 간단하게 소개하는 정도로만 안내합니다.

 1. ImageDataGenerator()를 활용하여 1개의 이미지를 여러 장으로 만들어봅시다. ImageDataGenerator 객체에 옵션을 정의합니다. 

- rotation_range: 회전시키는 각도 지정 (0~180) 

- width_shift_range/height_shift_range: 수직/수평 방향으로 이동시키는 범위 지정 (0~1) 

- zoom_range: 확대/축소하는 정도 지정 

- vertical_flip/horizontal_flip: 수직/수평 방향으로 뒤집을지 여부 지정 

- shear_range: 변형, (0.5)(반시계방향) 

- brightness_range: 밝기 조절

 


 2. flow() 함수를 이용하여 내가 원하는 데이터를 증식합니다.

 


 3. 결과 확인 

① 인식 정확도를 높이기 위해 우리가 사용한 방안을 정리해봅시다. 

② 인공지능의 신뢰성이 사회적으로 미치는 영향력에 대해 정리해봅시다.


 


 


심화 활동 

 1. 라이브러리 불러오기



 2. 파일 경로 설정 

- pathlib.Path : 경로를 문자열이 아닌 객체로 처리



 3. 클래스 수, 이름 확인하기 

- os.listdir() : 지정 경로의 디렉토리 내의 모든 파일 이름을 리스트로 반환한다. 

- len() : 리스트의 길이 

- 코들에서는 클래스가 ‘.ipynb.checkpoints’가 하나 더 있기 때문에 처음에 이 작업을 해주어야 합니다.

 

 

 

 

 

 


 4. 교통표지판 각 클래스별로 하나씩 시각화하기



 5. 이미지 데이터 전처리 

- ImageDataGenerator 클래스 : 객체를 생성할 때 파라미터를 전달해주는 것을 통해 데이터의 전처리를 쉽게할 수 있다. 

- Flow_from_directory 메소드: 폴더 형태로된 데이터 구조를 바로 가져와서 사용할 수 있다.

  (폴더에 구성 그대로 데이터를 처리하여 로드해준다).

- 첫번째 인자 : 이미지 경로 

- batch_size : 한 번에 얼마만큼의 이미지 데이터를 가져올 것인지 

- class_mode : ‘categorical’ : 멀티레이블 클래스&원-핫 인코딩 형태 / ‘sparse’ : 멀티레이블 클래스&레이블인 코딩 형태 / ‘binary’ : 이진분류 클래스&0또는1 형태 

- target_size : width, height



 6. 모델 구현



 7. 모델 컴파인



 8. 모델 학습



 9. 모델 평가 



 10. 모델 테스트





 결과를 정리해봅시다.

 


1. 정확도를 높이기 위해 어떤 방법을 썼나요? 
2. 속도 제한 30과 50을 정확하게 구분하지 못한다면 어떤 안전성 문제가 일어날까요?
3. 자율주행 자동차가 교통 표지판과 같은 여러 물체를 제대로 구분하지 못한다면 어떤 안전성 문제가 일어날까요?
4.인공지능의 신뢰성이 사회적으로 미치는 영향력에 대해 정리해봅시다.