Open heojae opened 3 years ago
대주제 : 딥러닝 모델의 학습을 하고싶다. 소주제 : 데이터의 전처리 방법과 실행방법을 정리하고 싶다.
대주제 : 딥러닝 모델의 학습을 하고싶다.
소주제 : 데이터의 전처리 방법과 실행방법을 정리하고 싶다.
데이터를 모으기 위해서는, 2가지 방법이 있습니다.
예전에, Crawler 를 통해서, 데이터를 수집을 하였으나, (crawler.py 를 약 1년전에 구현을 했기에, 현재에는 쓰시는 것을 추천 드리지 않습니다.)
Crawler
crawler.py
올바르지 못한 이미지의 비율이 많았기에(제가 정의를 한 클래스의 기준과 데이터 셋의 기준, 데이터의 분류와 클래스 선정의 이유 정리 )
손으로 하는 것이 더 빠르기에, 직접 손으로 모았습니다.
0도를 기준으로 한 폴더에(before_rotate) 에 모았습니다.
0도
before_rotate
before_rotate(폴더 내부)
아래와 같이, 제가 정의해놓은 분류에 맞는 데이터를 모았습니다. 총 466개의 데이터를 구할 수 있었으며, 아래와 같이 생겼습니다.
아래와 같이, 제가 정의해놓은 분류에 맞는 데이터를 모았습니다.
총 466개의 데이터를 구할 수 있었으며, 아래와 같이 생겼습니다.
466개
deeplearning/preprocess_data 폴더를 보시면, 총 3가지 python 파일이 있습니다.
deeplearning/preprocess_data
python
rename.py
사실 안해도 괜찮은 것이긴 하지만, 좀 더 간편하게 데이터에 대한 접근과 한글 naming 파일들을 가능한 쓰지 않기위해서, 다음과 같이 변형하였습니다.
한글 naming 파일
추후 리눅스 서버로 옮길 때, 한글의 경우 파일명이 깨질수 있기 때문에 이를 변형하는 것을 추천드립니다.
make_rotated_images.py
위에서, rename 된 이미지 파일들을 0, 90, 180, 270 도로 회전을 시키는 작업입니다.
rename
0, 90, 180, 270
Image_size = 224 로서, efficient-b0 에 넣기위해서, 다음과 같이 바꾸었으며,
Image_size = 224
efficient-b0
추후 다른 모델들을 활용하고 싶으시다면, 아래를 참고해서, 작업해주시기를 바랍니다.
https://github.com/lukemelas/EfficientNet-PyTorch/blob/master/efficientnet_pytorch/utils.py
폴더 구조는 아래와 같습니다.
data - after_rotate - train - degree_0 - food1.jpg - food2.jpg - ... - degree_90 - degree_180 - degree_270 - test - degree_0 - degree_90 - degree_180 - degree_270 - before_rotate - food1.jpg - food2.jpg - ...
before_rotate 에 있는 파일들을 아래와 같이 전처리 작업을 합니다.
make_csv.py
위 폴더 구조를 기반으로, 추후 Dataset 과 DataLoader 를 통한 접근을 편리화 하기위해서, csv 파일로 만든다.
Dataset
DataLoader
csv
train.csv train_or_test,degree_dir_name,image_name train,degree_270,1.jpg train,degree_90,1.jpg train,degree_0,1.jpg train,degree_180,1.jpg train,degree_270,10.jpg train,degree_90,10.jpg train,degree_0,10.jpg train,degree_180,10.jpg ...
train.csv
train_or_test,degree_dir_name,image_name train,degree_270,1.jpg train,degree_90,1.jpg train,degree_0,1.jpg train,degree_180,1.jpg train,degree_270,10.jpg train,degree_90,10.jpg train,degree_0,10.jpg train,degree_180,10.jpg ...
run_preprocess.sh
위 파일들을 실행시키기 위한, 인자들을 간편하게 실행시키기 위해서 필요한 인자들을 넣어두었습니다.
간편하게,
# sh run_preprocess.sh python rename.py --dir_path ../data/before_rotate python make_rotated_images.py --before_dir_path ../data/before_rotate --save_dir_path ../data/after_rotate python make_csv.py --after_rotate_dir_path ../data/after_rotate \ --save_train_csv_path ../train.csv \ --save_test_csv_path ../test.csv \
간편하게, 아래와 같이 실행시킬수 있습니다. 만약 폴더의 위치를 바꾸고 싶으시다면, 저 인자들을 수정하시길 바랍니다.
sh run_preprocess.sh
추후, 실제 데이터를 활용함이 필요할 경우,
Exif Data 를 고려할 필요가 있습니다.
Exif Data
이미지 내부에 있는 Exif 의 Rotaion 정보를 접근할 필요가 있으며, 이를 고려하여, 데이터를 전처리 하여야합니다.
Exif 의 Rotaion
만약, Exif Data 가 존재하는 데, 이를 고려하지 않고, 저장을 할 경우, 잘못 회전된 이미지가 저장됩니다.
https://stackoverflow.com/questions/13872331/rotating-an-image-with-orientation-specified-in-exif-using-python-without-pil-in
https://sga8.tistory.com/7
데이터 전처리 및 생성 방법 정리
1. 음식 이미지 모으기
데이터를 모으기 위해서는, 2가지 방법이 있습니다.
예전에,
Crawler
를 통해서, 데이터를 수집을 하였으나, (crawler.py
를 약 1년전에 구현을 했기에, 현재에는 쓰시는 것을 추천 드리지 않습니다.)올바르지 못한 이미지의 비율이 많았기에(제가 정의를 한 클래스의 기준과 데이터 셋의 기준, 데이터의 분류와 클래스 선정의 이유 정리 )
손으로 하는 것이 더 빠르기에, 직접 손으로 모았습니다.
0도
를 기준으로 한 폴더에(before_rotate
) 에 모았습니다.before_rotate(폴더 내부)
접기/펼치기 버튼
2. 전처리 코드 실행시키기
deeplearning/preprocess_data
폴더를 보시면, 총 3가지python
파일이 있습니다.rename.py
사실 안해도 괜찮은 것이긴 하지만, 좀 더 간편하게 데이터에 대한 접근과
한글 naming 파일
들을 가능한 쓰지 않기위해서, 다음과 같이 변형하였습니다.make_rotated_images.py
위에서,
rename
된 이미지 파일들을0, 90, 180, 270
도로 회전을 시키는 작업입니다.Image_size = 224
로서,efficient-b0
에 넣기위해서, 다음과 같이 바꾸었으며,추후 다른 모델들을 활용하고 싶으시다면, 아래를 참고해서, 작업해주시기를 바랍니다.
접기/펼치기 버튼
폴더구조
폴더 구조는 아래와 같습니다.
접기/펼치기 버튼
make_csv.py
위 폴더 구조를 기반으로, 추후
Dataset
과DataLoader
를 통한 접근을 편리화 하기위해서,csv
파일로 만든다.run_preprocess.sh
위 파일들을 실행시키기 위한, 인자들을 간편하게 실행시키기 위해서 필요한 인자들을 넣어두었습니다.
간편하게,
간편하게, 아래와 같이 실행시킬수 있습니다. 만약 폴더의 위치를 바꾸고 싶으시다면, 저 인자들을 수정하시길 바랍니다.