장지원
(Jiwon Jang)
1
안효준
(Hyojoon An)
1
이종한
(Jong-Han Lee)
2
신수봉
(Soobong Shin)
3†
-
(학생회원, 인하대학교 사회인프라공학과 석사과정 )
-
(정회원, 인하대학교 사회인프라공학과 부교수)
-
(정회원, 인하대학교 사회인프라공학과 교수)
Copyright © The Korea Institute for Structural Maintenance and Inspection
키워드
블레이드, 딥러닝, Faster R-CNN, 객체 인식, 표면 결함, 터빈엔진
Key words
Blade, Deep learning, Faster R-CNN, Object detection, Surface damage, Turbine engine
1. 서 론
딥러닝(Deep learning)은 컴퓨터의 성능 향상과 함께 인공신경망(Artificial neural network) 기법을 활용하여 데이터의
예측 모델을 구현하는 것이다. 즉 학습시키고자하는 데이터(Data)를 입력했을 때 기계는 인공신경망을 거쳐 데이터의 특징을 추출하고 학습함으로써 데이터
입력에 의한 결과를 예측하는 것이다.
딥러닝은 이미지 데이터를 학습시켜 사물을 자동으로 인식하는 시스템이나 텍스트 데이터를 통해 번역을 수행하는 시스템, 음성 데이터를 통한 음성 인식
시스템 등 여러 분야에 적용되어 연구되고 있다 (Zaccone et al, 2017). 최근에는 구조물의 안전성을 평가하기 위해 딥러닝 기술을 적용하는
연구가 진행되고 있다. 즉 구조물의 안전성에 직접적으로 영향을 주는 구조물의 외부 균열과 결함 등을 딥러닝으로 학습(Training)시켜 구조물의
균열(Crack)유무와 결함(Defect)을 스스로 판단할 수 있게 만드는 것이다.
특히 교량 구조물과 도로 분야 등에서 활발히 연구가 진행되고 있다. 아스팔트(Asphalt) 도로의 균열 영상 이미지 데이터를 학습시켜 상태 평가를
할 수 있도록 하는 연구가 진행되어 도로 포장 모니터링 작업 소요시간을 감소시켰다 (Choi and Do, 2018). 교량 구조물 또한 같은 방식을
도입하여 교량 콘크리트 구조물의 외부 결함에 대해 딥러닝을 실시하여 손상 탐지 연구를 진행하였으며, 육안검사보다 더 높은 신뢰성을 가질 수 있음을
보였다 (Jung et al, 2018).이러한 딥러닝의 기술이 구조물의 안전성 평가에 효율적으로 적용한다면 평가에 소요되는 인력과 시간, 비용
등을 낮출 수 있을 것이다.
본 연구에서는 중요한 터빈엔진(Turbin engine) 구조 부재 중의 하나인 내부 블레이드(Blade)에 딥러닝 기술을 적용하여 결함을 자동적으로
인식하고 검출할 수 있는 기술을 개발하였다. 내부에 존재하는 블레이드의 경우 분리가 쉽지 않고 어두운 환경을 가지고 있다. 따라서 블레이드 표면의
결함을 검출하기 위해서 점검자는 수동으로 블레이드의 회전속도를 조절하여 내시경 카메라를 이용해 시각적으로 확인해야 한다. 이러한 블레이드가 위치되어
있는 열악한 환경으로 인해 블레이드의 결함을 검출하기 위해서 많은 훈련과 경험을 가진 인력이 다수 필요로 하고, 검사 시간도 상당히 많이 소요되는
실정이다. 따라서 본 연구에서는 Faster R-CNN 딥러닝 알고리즘을 활용하여 검출 과정을 자동화하고 효율적으로 진행될 수 있게 하였다.
2. 결함 및 딥러닝 알고리즘 정의
2.1 블레이드 결함
블레이드에는 Dent, Crack, Bend, Erosion 등의 결함이 존재한다. Fig. 1이 블레이드에 발생된 각 결함에 대한 예시이다. Dent는 물체의 충돌로 인해 발생되는 움푹 파인 형태의 결함이다. Crack은 물체의 표면에 불규칙한
선의 형태로 나타나는 결함으로 Dent의 손상이 진행되어 발생되는 경우가 많다. Bend는 전체나 국부적으로 구부러진 형태의 결함이며, Erosion은
액체나 가스에 의해 부식되거나 고체 입자에 의해 마모가 되는 결함이다. 이러한 결함들 중 Crack, Dent, Erosion 결함이 자주 발생하고,
특히 Dent, Crack 결함은 블레이드의 기능을 급격하게 저하시켜 터빈 시스템의 안전성을 위협할 수 있다. 이때 Crack은 Dent가 발전하여
생기는 경우가 많으므로 Crack이 되기 전 Dent를 검출한다면 위험한 상황을 예방할 수 있을 것이다.
따라서 Dent를 블레이드의 주요 결함 대상으로 정의하고 연구를 진행하였다. Dent 결함은 블레이드의 모서리(Edge)와 내부(Inside)에서
각각 발생할 수 있다. 본 연구에서는 블레이드의 모서리에서 찧어지는 결함만을 Dent로, 블레이드의 내부가 움푹 파여 들어가는 결함은 Punch로
구분하여 정의하였다.
2.2 CNN 기반 딥러닝 알고리즘
CNN(Convolutional Neural Network)은 이미지를 분류하는 인공 신경망 알고리즘 중 하나이며 1989년에 필기체의 우편번호를
분류하기 위해 최초로 제안되었다 (Lee, 2018). 최근 CNN은 더 발전하여 딥러닝을 통해 음성인식, 텍스트 등의 다양한 데이터 분류에 적용하여
사용되고 있다.
CNN은 Fig. 2에 보인 바와 같이 개체(Object)에 Convolutional layer와 Max pooling layer를 번갈아 적용하여 특징(Feature)를
추출하고 Fully connected layer를 통해 이미지를 분류한다.
이미지 분류에서 나아가 물체를 탐지하는 것은 이미지 내 개체들에 대한 영역화(Localization)가 필요하다. 개체의 영역화와 이에 관한 데이터
처리를 고려한 것이 R-CNN이다. R-CNN은 기존 Convolutional Network에 이미지 내에 존재하는 개체의 영역을 제안(Region
proposal)하는 알고리즘의 기능을 추가한 영역 기반 개체 검출 시스템이다 (Girshick et al, 2016).
Fig. 1. Blade defect types
Fig. 3는 R-CNN의 시스템을 보여주는 것으로 하나의 이미지를 입력으로 했을 때 영역 제안 알고리즘을 통해 약 2000개의 영역이 제안된다. 제안된 영역들은
CNN을 통해 특징이 파악되고 그에 따라 분류 된다. 하지만 각 제안 영역마다 CNN 계산과정을 거쳐야 하므로 속도의 한계가 있다는 단점이 있다 (Lee,
2017).
2.3 Faster R-CNN
R-CNN의 속도, 정확도를 향상시키기고 복잡한 구조의 단순화를 위해 Fast R-CNN 알고리즘이 만들어졌다. Fast R-CNN은 R-CNN에서
이미지 영역 제안을 통해 약 2000번 수행되었던 CNN계산을 1번의 CNN 계산 후 영역 마다 특징을 추출하는 방식이다. CNN 계산 과정이 대폭
줄어들면서 R-CNN의 속도보다 빠르고 정확도 또한 향상되었지만 알고리즘의 구조적 비효율성이 남아있다는 단점이 있다.
Fig. 4. Faster R-CNN overview (Ren et al, 2017)
Fig. 4는 Faster R-CNN 시스템의 구조를 보여준다. Fast R-CNN은 영역 제안 알고리즘이 CNN 외부에서 진행되지만 Faster R-CNN은
영역 제안 알고리즘이 CNN 내부에서 진행될 수 있게 네트워크를 정의함으로써 Fast R-CNN 시스템의 구조적 효율성과 속도를 향상시켰다.
3. 실험 계획 및 방법
3.1 실험 시편 제작
블레이드는 니켈(Nickel), 크롬(Chrome), 코발트(Cobalt), 티타늄(Titanium) 등의 금속 혼합체로 구성 되어 있다 (Lee,
2016). 블레이드 크기는 폭 3 cm, 높이 4 cm 에서부터 블레이드 위치나 터빈 구조물의 크기에 따라 더 작거나 큰 사이즈로 다양하게 분포한다.
이러한 실제 블레이드 중 하나를 모사하여 폭 6 cm, 높이 10 cm의 크기로 직사각형 모양의 블레이드 시편을 제작하였다. 시편의 재료는 블레이드의
외관과 유사한 알루미늄(Aluminum) 합판을 사용하였다.
Fig. 5는 제작한 시편에 Dent와 Punch 결함을 만든 예시이다. Dent 결함은 블레이드의 모서리에 반원 형태로 직경 3~10 mm 크기로 생성하였다.
Punch 결함은 블레이드 내부에 원형 형태로 직경이 1~3 mm 크기로 생성하였다. Dent 결함이 있는 블레이드는 72개로 총 318개의 Dent
결함을 만들었고, Punch 결함의 블레이드는 75개로 총 435개의 Punch 결함을 만들었다.
Fig. 5. Actual blades and blade specimens with defects (An et al, 2019)
3.2 실험체 이미지 데이터 생성 및 분류
실험을 진행하기 위해서는 블레이드 결함에 대한 이미지 데이터를 생성한 후 분류가 필요하다. 블레이드에 발생하는 Dent와 Punch 이미지 데이터를
수집하기 위해 제작된 시편의 결함 이미지를 바닥과 수평하게 설치한 평면적 환경에서 생성하였다. 최대한 양질의 데이터를 얻기 위해 실험체 블레이드에
빛 반사를 최소화할 수 있도록 검은색 바탕 위에서 촬영을 진행하였다. 또한 고화질의 데이터로 학습 시 컴퓨터에 과부하가 걸려 학습이 중단되는 현상이
발생하므로 $1836\times 1836$의 해상도를 적용하였다. 시편은 전체 이미지의 60~70%를 차지하도록 데이터를 생성하였다. Fig. 6 은 실제 블레이드를 검사할 때 획득되는 영상과 결함을 모사한 시편의 이미지 영상을 보여준다.
3.3 데이터 확장 및 학습
딥러닝의 정확도를 높이기 위해서는 양질의 데이터가 다수 필요하다. 하지만 실험적인 환경에서 데이터양을 직접적으로 만들어 내는 것은 한계가 있다. 따라서
본 연구에서는 기존의 이미지 데이터에 Gaussian blur, Motion blur, Sharpening, Histogram 필터를 적용하여 데이터
확장을 수행하였다. Gaussian blur 필터는 이웃 화소들을 평균 처리하는 방법과 유사하고 블러링(Blurring) 효과 정도를 조절할 수 있는
인자를 가진다. Motion blur는 한 방향에 대해 움직이는 듯이 보이게 하는 블러링 효과의 필터이다. Sharpening은 이미지의 에지(Edge)를
날카롭게 처리하여 더 선명하게 만들어 주고, Histogram은 명암 대비가 고르지 않은 이미지를 평준화하여 상대적으로 어두운 부분을 선명하게 볼
수 있게 한다 (Alasdair, 2007; Sin et al, 2008). Fig. 7은 각 필터를 블레이드 이미지에 적용한 예시이다.
Fig. 6. Video screen obtained from real blade inspection and images from experimental
environment
필터를 적용하더라도 데이터 수가 확연히 증가되기 힘들기 때문에 추가적으로 Keras 모듈의 Image Data Generator 기능을 도입하여 데이터를
생성하였다. Image Data Generator는 이미지를 회전(Rotation), 위치(Shift), 밀림(Shear), 확대/축소(Zoom)
등의 여러 인자를 지정 범위 이내에서 임의로 변형하여 적은 데이터양으로 많은 양의 데이터를 만들어 낼 수 있다 (Kim, 2017). 하지만 과하게
변형된 이미지 데이터는 학습 결과의 정확성에 영향을 미칠 수 있으므로 변형할 인자에 제한을 두어 데이터를 확장하였다. Fig. 8 은 Image Data Generator를 적용한 예시이다. Fig. 8의 (a)는 이미지를 회전시킨 모습이며 (b)는 이미지가 수직, 수평의 위치가 이동된 것을 볼 수 있다. (c)는 이미지가 임의의 각도로 밀린 것을 볼 수 있고 (d)는 이미지가 축소된 것을 확인 할 수 있다. 이때 유의할 점은 Image Data Generator는 유사한 데이터가 생성될 가능성이 존재한다는 것이다.
특징이 비슷한 데이터를 딥러닝 학습을 시키면 과적합(Overfitting)이 발생할 수 있다. 즉 검출 모델이 학습을 잘 하는 반면 학습데이터 이외의
이미지의 데이터에 대해서 예측하는 정확도는 높지 않은 현상이 나타나는 것이다 (Nakai, 2016). 이러한 데이터의 경우 학습에 제외시켜 데이터의
중복을 피하였다.
필터 적용과 Image Data Generator를 통해서 총 395개의 이미지 데이터를 생성하였다. 생성된 데이터는 Dent, Punch 결함의
레이블링(Labeling) 작업을 수행하여 검출 모델이 결함에 집중하여 학습할 수 있도록 하였다. 레이블링이 완료된 이미지 데이터를 학습하기 위해서는
딥러닝 알고리즘 내에서 학습데이터 셋(Train dataset)과 시험데이터 셋(Test dataset)의 분류가 필요하다. 학습데이터 셋은 딥러닝
알고리즘이 레이블링한 결함을 학습하는데 쓰이는 데이터이고 시험데이터 셋은 학습된 알고리즘이 학습하지 않은 데이터를 바탕으로 스스로 시험을 하는 데이터이다.
한 번의 학습 스텝(Step)마다 컴퓨터는 학습과 시험을 진행하고 학습된 정도는 손실률(Loss)값을 통해 확인하였다. 학습이 잘 수행되었다면 손실률이
작은 값으로 나오고 학습이 잘 수행되지 않았다면 손실률이 큰 값으로 나올 것이다. 이 검출 모델은 약 7:3 비율로 학습데이터 셋과 시험데이터 셋을
분류하였고 총 50만 번의 스텝을 실행하였다.
4. 실험 결과
4.1 실험 결과 및 분석
학습결과 0.002의 손실률과 Punch 결함에 대해서 96.8%, Dent 결함에 대해 95.4%의 정확도(Accuracy)로 예측하였다. 정확도는
학습된 검출 모델이 결함이라고 판단한 개체의 수에 검출 모델이 올바르게 결함이라고 예측된 수의 단순 비율이므로 정확도만으로 검출 모델의 성능을 객관적으로
판단 할 수 없다.
블레이드 결함을 검출하는 과정에서 결함을 예측하는데 여러 가지 상황이 존재한다. 결함을 결함이라고 올바르게 판단하는 경우, 결함이 아닌데 결함이라고
판단하는 경우, 결함인데 결함이 아니라고 판단하는 경우 이 세 가지이다. 특히 결함인데 결함이 아니라고 판단하는 경우 구조물의 결함 진단에 있어
위험한 상황이다. 즉, 검출 모델이 결함을 탐지하지 못하는 것이 이에 해당된다. 따라서 정확도와 함께 재현율, 정밀도, F-1 Score 값을 지표로
사용하여 블레이드 결함 검출 딥러닝 알고리즘 성능을 평가하였다.
재현율(Recall)은 민감도(Sensitivity)라고도 하며 어떤 항목에 해당되는 실제 데이터 수와 학습 모델이 그 항목을 올바르게 예측한 데이터
수의 비율이다. 정밀도(Precision)는 학습 모델이 예측한 데이터 수와 예측한 데이터 중에 실제 올바른 데이터 수의 비율이다. 재현율과 정밀도는
위에서 언급한 결함을 탐지하지 못하는 상황과 오검출의 발생에 대해 평가할 수 있는 지표가 될 수 있다. F Score는 다음과 같은 식(1)을 적용하여 재현율과 정밀도를 둘 다 고려할 수 있게 만든 지표이다. 보통 $\beta$값이 1인 F-1 Score를 많이 적용한다 (Cho, 2017;
Cho, 2018).
Fig. 7. Example of images expanded using filters
Fig. 8. Example of images expanded using Image Data Generator
Fig. 9. Result of training
Table 1. Performance measures of the proposed model
Damage
|
Accuracy
|
Recall
|
Precision
|
F-1 Score
|
Punch
|
0.968
|
0.945
|
0.991
|
0.967
|
Dent
|
0.954
|
0.960
|
0.928
|
0.944
|
Fig.9는 학습 모델의 결과로 결함을 검출하는 화면이다. 정확도, 재현율, 정밀도, F-1 Score로 결과를 정리하면 Table. 2와 같다. Punch 결함의 재현율은 94.5%, 정밀도가 99.1%로 정밀도가 더 높고, Dent 결함의 재현율은 96%, 정밀도가 92.8%로
정밀도에 비해 재현율이 더 높게 나오는 것을 보아 결함에 따라 성능차이가 나타나는 것을 알 수 있다.
재현율은 검출 모델이 결함을 결함이 아니라고 예측하는 오검출과 관련이 있다. 학습하고자하는 사물의 특징을 제대로 학습하지 못한 경우 재현율은 낮아질
것이다. 재현율 값이 크게 나올수록 모델이 결함을 탐지하는 능력이 뛰어나다고 볼 수 있다. Table 1에서 Punch 결함에서 94.5%, Dent 결함에서 96%로 Dent 결함을 좀 더 정확히 탐지하여 예측한다는 것을 알 수 있다. Punch 결함은
Dent보다 데이터 수가 많았음에도 재현율이 낮게 나타나는 것은 Punch가 상대적으로 구분하기 어려운 결함적 특징을 가지고 있다는 것을 알 수 있다.
정밀도는 검출 모델이 결함이 없는데 있다고 판단하는 오검출과 관련이 있다. 주변 환경에 결함으로 착각할 수 있는 요소가 많이 있을수록 오검출의 빈도가
높아지므로 정밀도가 낮아질 수 있다. 정밀도가 높을수록 결함이 아닌 것과 실제 결함을 잘 구분하여 예측한다고 판단할 수 있다. 이 모델은 Punch결함에
대해 99.1%, Dent결함에 대해 92.8%의 정밀도를 가지고 Punch에 비해 Dent가 정밀도가 다소 낮은 것을 볼 수 있다. 이는 제안된
모델이 Punch결함에 대해서는 주변 환경에 대한 영향을 거의 받지 않고 잘 예측하는 반면 Dent결함은 상대적으로 주변 환경에 대한 영향을 많이
받아 실제 Dent결함이 아닌 다른 것을 Dent라고 판단하는 횟수가 많다는 것을 의미한다 (An and Jang, 2017).
이 모델은 총 395개의 적은 이미지 데이터로 학습을 진행하였다. 한 이미지에 여러 개의 결함이 모사되기는 했지만 적은 이미지 데이터양에 비해 높은
성능이 나온 것으로 보인다. 하지만 결함의 오검출의 발생가능성이 존재하기 때문에 검출 모델의 재현율과 정밀도의 향상이 필요하다. 모델의 성능을 높이기
위해서는 학습을 위한 양질의 이미지 데이터가 충분히 많아야 한다. 기존의 학습데이터보다 더 많은 양질의 이미지 데이터를 생성하여 검출 모델을 학습시킨다면
이보다 더 높은 재현율과 정밀도가 나올 것으로 판단된다.
5. 결 론
본 연구는 Faster R-CNN 딥러닝 알고리즘을 활용하여 터빈 구조물의 블레이드에 대한 표면 결함 검출의 효율적인 방법을 실험적 환경에서 제시하였다.
블레이드 결함 중 Crack과 Dent 결함이 안전성에 가장 중요하게 영향을 미치고, Dent결함이 Crack으로 발전하기 전에 검출한다면 Crack을
예방할 수 있다. 따라서, 검출할 결함을 Dent로 설정하고 블레이드 안쪽에 움푹 파인 것을 Punch, 블레이드 모서리가 찢어진 것을 Dent로
분류하고 정의하였다.
Dent결함과 Punch결함을 모사한 시편을 제작하고 이미지 데이터를 구축하였다. 만들어진 이미지 데이터만으로는 학습을 진행하기에 부족하므로 이미지
필터링과 Image Data Generator를 진행하여 총 395개의 학습데이터로 확장 생성하여 모델 학습을 수행하였다. 학습 된 모델은 Punch와
Dent 결함에 대해 평균적으로 약 96.1%의 정확도와 95.3%의 재현율, 96%의 정밀도로 예상한 것 보다 높은 수준의 성능을 보였다.
재현율을 고려했을 때 제안된 검출 모델이 결함을 탐지하지 못하는 경우가 약 4.7%정도로 나타났다. 이러한 오검출의 확률을 줄이기 위해서는 충분한
양의 학습데이터 확보가 필요하다. 본 연구에서는 395개의 적은 양의 학습데이터를 사용하였는데 다량의 결함 이미지를 수집하고 확장하여 검출 모델 학습에
적용한다면 정밀도뿐만 아니라 재현율도 향상될 수 있을 것으로 판단된다.
또한 블레이드 결함 검출 모델을 딥러닝 학습하는데 있어서 다음과 같은 고려사항이 존재한다. 본 연구에서는 검출 모델의 학습데이터를 평면적 환경에서의
데이터로 고려하였다. 이는 블레이드의 설치 환경이 변한다면 낮은 성능을 나타낼 수 있다. 따라서 향후 실제 블레이드의 설치 환경을 모사한 실험을 수행하여
블레이드의 결함 이미지 데이터를 수집하고 검출 모델을 학습시킨다면 블레이드의 설치 환경을 고려하면서도 거의 동일한 성능을 보일 수 있을 것이다.
또한 실제 터빈엔진을 정비 하는 환경을 반영한 블레이드의 결함 이미지 데이터를 구축하고 학습시켜 터빈엔진의 정비에 적용 가능한 검출 시스템으로 개발할
수 있을 것으로 판단된다.
Acknowledgements
본 연구는 국토교통부 국토교통기술촉진연구사업 (과제번호 19RTRP-B137949-03)에 의해 수행되었습니다.
References
G. Zaccone, R. Karim, A. Menshawy, 2017, Deep Learning with Tensorflow, Acorn Seoul,
pp. 33-35
S. Choi, M. Do, 2018, Prediction of Asphalt Pavement Service Life using Deep Learning,
Journal of Highway Engineering, KSRE, Vol. 20, No. 2, pp. 57-65
H. Jung, W. Nam, G. Kim, D. Kim, I. Kang, H. Kim, 2018, Deep Learning-based Damage
Detection Method for Bridge Condition Evaluation, Magazine of the Korea Institute
For Structural Maintenance and Inspection, KSMI, Vol. 22, No. 3, pp. 16-22
G. Lee, 2018, Damage Detection for RC Rahmen Bridge Based on Convolutional Neural
Network, Inha University, Incheon, pp. 22-25
R. Girshick, J. Donahue, T. Darrell, J. Malik, 2016, Region-based Convolutional Networks
for Accurate Object Detection and Segmentation, IEEE Transactions on Pattern Analysis
and Machine Intelligence, IEEE, Vol. 38, No. 1, pp. 142-158
B. Lee, 2017, R-CNNs Tutorial, (https://blog.lunit.io/2017/06/ 01/r-cnns-tutorial)
S. Ren, K. He, R. Girshick, J. Sun, 2017, Faster R-CNN: Towards Real-Time Object Detection
with Region Proposal Networks, IEEE Transactions on Pattern Analysis and Machine Intelligence,
IEEE, Vol. 39, No. 6, pp. 1137-1149
B. Lee, 2016, Gas Turbine for Aircraft, Kyungmoon, Seoul, pp. 147-149
H. An, J. Jang, J.H. Lee, S. Shin, 2019, Damage Detection Method of Blade Systems
using Deep Learning Technique, Proceedings of the Korea Institute For Structural Maintenance
and Inspection, KSMI, Vol. 23, No. 1, pp. 30-31
M. Alasdair, 2007, Introduction to Digital Image Processing with Matlab, Cengage Learning,
Seoul, pp. 112-122
J. Sin, S. Jang, I. Ji, 2008, Introduction to Digital Image Processing, HANBIT Media,
Seoul, pp. 183-187
T. Kim, 2017, Data Augmentation for Convolutional Neural Network, (https://tykimos.github.io/2017/06/10/CNN_Data_Aug
mentation)
E. Nakai, 2016, Deep Learning Getting Started with TensorFlow, Jpub, Paju, pp. 65-68
D. Cho, 2017, Performance Evaluation of Classification Model, (https://bcho.tistory.com/1206)
J. Cho, 2018, Performance Measurement of Multiple Classification Models – Performance
Measure (ACU, F1 score), (https://nittaku. tistory.com/295)
Y. An, K. and Jang, 2017, Deep Learning-Based Structural Crack Evaluation Technique
Through UAV-Mounted Hybrid Image Scanning, Journal of the Korean association for shell
and spatial structures, KASS, Vol. 17, No. 4, pp. 20-26