파이썬을 이용한 머신러닝, 딥러닝 실전 개발 입문 도서를 스터디하여 정리한 내용입니다.
코드는 http://wikibook.co.kr/python-machine-learning/ 에서 다운 가능합니다.
[이미지와 딥러닝 - 유사 이미지 검출하기]
Average Hash 알고리즘 사용
PIL(Pillow) 라이브러리
Average Hash
- 이미지를 비교 가능한 해시 값으로 나타낸 것
- 이미지가 조금 다르더라도(이미지 해상도 크기, 색조, JPEG/PNG 등의 압축 형식 등) 유사한지를 검출해야 할 때 사용.
구체적인 방법
1) 이미지 크기를 8 x 8(또는 16 x 16)로 축소한다.
2) 색을 그레이스케일로 변환한다.
3) 이미지의 각 픽셀의 평균을 계산한다.
4) 각 픽셀의 어두운 정도가 평균보다 크면 1, 평균보다 작으면 0으로 입력한다.
이 방법으로 하면 64비트를 비교하기만 하면 되므로 빠르게 유사한 이미지를 검색할 수 있다.
이미지를 다룰 때는 파이썬의 이미지라이브러리 Pillow를 사용한다.
pip3 install Pillow
src/ch7/avhash.py 실행
[출력 결과]
[[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0]
[0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0]
[0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0]
[0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0]
[1 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0]
[0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0]
[0 1 0 1 1 1 1 1 1 1 1 1 0 0 0 0]
[0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0]
[1 1 0 0 1 1 1 1 1 1 1 1 1 0 1 0]
[1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0]
[0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0]
[0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0]
[0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1]]
000001000180018003c003c003c087e07ff05ff07ff2cffa9ffe3ffe3ffe1fff
많은 이미지에서 유사한 이미지 검색하기
샘플 이미지 데이터 : http://www.vision.caltech.edu/Image_Datasets/Caltech101/Caltech101.html
적당한 의자 이미지를 골라서 유사한 이미지를 검색해보자!!!
src/ch7/avhash-search.py 실행
[출력결과]
0.0 > D:/workspace_my/my-machine-learning/image_deeplearning/image/101_ObjectCategories/chair/image_0016.jpg
0.22265625 > D:/workspace_my/my-machine-learning/image_deeplearning/image/101_ObjectCategories/stop_sign/image_0019.jpg
0.2265625 > D:/workspace_my/my-machine-learning/image_deeplearning/image/101_ObjectCategories/chair/image_0031.jpg
0.23046875 > D:/workspace_my/my-machine-learning/image_deeplearning/image/101_ObjectCategories/airplanes/image_0129.jpg
0.234375 > D:/workspace_my/my-machine-learning/image_deeplearning/image/101_ObjectCategories/umbrella/image_0009.jpg
0.23828125 > D:/workspace_my/my-machine-learning/image_deeplearning/image/101_ObjectCategories/airplanes/image_0124.jpg
0.24609375 > D:/workspace_my/my-machine-learning/image_deeplearning/image/101_ObjectCategories/chair/image_0001.jpg
0.24609375 > D:/workspace_my/my-machine-learning/image_deeplearning/image/101_ObjectCategories/chair/image_0002.jpg
0.24609375 > D:/workspace_my/my-machine-learning/image_deeplearning/image/101_ObjectCategories/dragonfly/image_0001.jpg
ok
해밍거리: 같은 문자 수를 가진 2개의 문자열에 대응하는 위치에 있는 문자 중 다른 것의 개수를 나타냄.
현재 이미지를 256글자의 해시 값으로 나타냈으므로 이를 기반으로 몇 글자가 다른지 찾고, 이를 기반으로 이미지의 차이를 구분하는 것
결론
Average Hash는 리사이즈하고 이진화하기만 하면 되는 간단한 처리이지만
유사한 이미지를 찾을 때 충분히 활용할 수 있는 방법임
+ 11.21 추가
가공된 데이터 추가 후 이미지를 잘 찾는지 테스트해봄!
의자를 막 반전, 앵글변경 등 가공해서 데이터를 늘려놓고 유사한 의미지를 잘 찾는지 테스트해보면
유사한 이비지 일부분 찾고 옴을 알 수 있다!
정확도를 높이기 위해서는 rate 값 조정 등 해야 할 것 같다.
'개발레시피 > └ 머신러닝' 카테고리의 다른 글
라멘 메뉴 이미지 판별하기 [머신러닝, 딥러닝 실전 개발 입문] (2) | 2018.11.27 |
---|---|
CNN으로 이미지 분류하기 [머신러닝, 딥러닝 실전 개발 입문] (0) | 2018.11.27 |
3. Linear Regression cost 함수 최소화 (모두를 위한 딥러닝 스터디) (0) | 2018.11.14 |
2. Linear Regression의 개념 (모두를 위한 딥러닝 스터디) (0) | 2018.11.14 |
1. 머신러닝의 개념과 용어 (모두를 위한 딥러닝 스터디) (0) | 2018.11.07 |
Comments