[18日間]YOLO Miniプロジェクト


※ Notification
この投稿に誤字や誤字がある場合は、コメントで訂正します:)
関連配置
YOLO Mini Project
Dataset file check

Intro


Dataset file check以降、検出したい画像を収集し、データセットを作成し、YOLOモデルで検出を行うMini Project.
1週間の時間をくれましたが、3つのデータを完成させ、既存のコードを少し修正すればいいので、素早く完成させるように努力します.
YOLO Mini Project
プロジェクトの概要の内容を個別に位置づけ、この文章ではプロセスについて議論します.

YOLO Mini Project


Clothing Detection


Musinsa Brand Snap Image
武信使のスナップショットからそれぞれの衣装を探し出すことにした.

Data Collection

Beanie
Buckethat
Cap
Croptop
Glasses
Handbag
Jeans
Mask
Pants
Shoes
Shorts
Skirt
Top
T-shirts
Coat
まず、データセットを作成するために収集するデータセットのclassを定義します.
上着は、Outerやシャツなどをさらに細分化したいのですが、種目時間が短いのでトップに統一してから行います.
以降、武信社ブランドスナップショットの検索機能を利用して、各カテゴリの画像を収集した.
スクロールコードを作成して収集することも考えましたが、短期的なプロジェクトなので、コード作成に時間がかかるのは効果的ではないと思い、そのままダウンロードしました.
リストに表示される写真の解像度が低いため、各ページにログインしてダウンロードする必要があります.
今思えば、スクロールコードを書くほうが効率的だと思います.
に対応して300以上の画像をダウンロードし、前処理により衣類形態の区別のつかない側面写真、各衣類区分の目立たない写真などを削除し、300の画像を収集した.

Image labeling


次にlabelImgツールを使用して画像に寸法を付けます.
LabelImgを使用してYOLO画像をマーク
インストール手順と使用方法は、上のリンクで参照できます.
この過程で300個の画像に寸法を付けた.

Train, Test, Validation Split


Pythonコードでデータセットを分離し、すべてのデータから10%を分離して検証データに移行し、残りのデータから9:1の割合でtrain、testデータを構築します.
主なコードは次のとおりです.
import random

split_ratio = 0.1

img_file_name_list = list(map(lambda x : x.split('.')[0], os.listdir(TRAIN_IMAGE_DATA_DIR)))

split_num = int(len(img_file_name_list) * split_ratio)
random.shuffle(img_file_name_list)

move_file_name_list = img_file_name_list[:split_num]

print('=======================================')
print('train -> valid 10% / start moving...')

for file_name in move_file_name_list:

    shutil.move(os.path.join(TRAIN_IMAGE_DATA_DIR,file_name) + IMG_EXTENSION,
                os.path.join(VALID_IMAGE_DATA_DIR,file_name) + IMG_EXTENSION)
    
    shutil.move(os.path.join(TRAIN_LABEL_DATA_DIR,file_name) + LABEL_EXTENSION,
                os.path.join(VALID_LABEL_DATA_DIR,file_name) + LABEL_EXTENSION)

print('=======================================')
print('train nums : ', len(os.listdir(TRAIN_IMAGE_DATA_DIR)),'\ntrain nums : ', len(os.listdir(TRAIN_LABEL_DATA_DIR)))
print('valid nums : ', len(os.listdir(VALID_IMAGE_DATA_DIR)),'\nvalid nums : ', len(os.listdir(VALID_LABEL_DATA_DIR)))
print('=======================================')

Dataset


Train、Test、Validationで区切られたImage、Labelファイルに、学習用のyamlファイルが作成されています.
train: ../train/images
val: ../valid/images

nc: 15
names: ['Beanie', 'Buckethat', 'Cap', 'Croptop', 'Glasses',
		'Handbag', 'Jeans', 'Mask', 'Pants', 'Shoes', 'Shorts',
 		'Skirt', 'Top', 'T-shirts', 'Coat']
完了したデータセットは次のとおりです.
Clothes_Data
├─ test  
│ ├─ images   
│ └─ labels 
├─ train 
│ ├─ images   
│ └─ labels 
├─ validation
│ ├─ images   
│ └─ labels 
└─ data.yaml

Modeling


[17日間]YOLOv 5-Mask Wering検出
モデリングの内容については、日付17を参照してください.
Claotes Data setをYOLOv 5 v 6に変換します.0 YOLOV 5 sモードで学習します.

Result


の結果が良かったのですが、ジョーンとPatsが重なって出てくる画像もありました.
1枚目の写真はJeansの薄緑のBounding BoxとPantsの緑のBounding Boxが重なっているのが見えます.
プロジェクトの位置づけにも言及したが、JeansやPantsの認知度を高めるために、ジーンズのイメージや他の材質のズボンのイメージをより多く集める必要がある.

Outro


独自のデータセットを構築し,それによってオブジェクト検出を行った.思ったより結果が良かったので驚きました.
スクロールしてより多くの画像をダウンロードし、トップに統一するのではなく、上着を異なる種類に分けて、もう一度試してみるともっといいです.