目次
1.何を作ったのか
2.なぜ作ったのか
3.どうやって作ったのか
4.苦労したこと
5.結果
6.今後
1. 何を作ったのか
この記事でわかること
・YOLOで特定の部位を検出する方法
・検出した領域を自動でcropする方法
・検出モデル + 分類モデルの組み合わせ
を解説します。
最終的にこんな処理ができます。
画像
↓
YOLOで検出
↓
対象部分をcrop
↓
分類モデルで判定
画像解析の基本構成としてよく使われるので、
YOLO入門としても参考になると思います。
2. なぜ作ったのか
大きく二点です。
1.趣味のため
2.技術力を誇示するため
ここからはわたしの個人的なことがつらつら書いてるので、読み飛ばしたい方は3章までスキップをお願いします。
※個人的には2章が一番好きなので、暇な方はご覧ください。
1.趣味
マッチングアプリをしていたときに数千人の女性の中から一人の女性を見つけるのは大変です。
わたし個人として胸の大きい女性が大好きということもあり、さまざまな工夫をしていました。
<やったこと>
・スタイルで「グラマー」とフィルタリングをしたり、
・「体型がコンプレックスだ」というサークルに仮入部したり、
・キーワード検索をして「胸」という文字列をヒットさせたり、
結果はどれもダメでした。
<結果>
・グラマーのフィルタリングはそもそも期待値が少なすぎる。
わたしの見解では、仮に大きな胸の女性でもグラマーというカテゴリーに登録するのは恥ずかしいという気持ちがあるのではと推測しました。
併せて、胸が大きくても下半身が少し大柄だとぽっちゃりにしていたり、
逆に「わたしがグラマーなんて恐れ多い」みたいな観点から”普通”にして�たりします。
・まともな胸の大きな女性はサークルにそもそも所属しない
これ以上でもこれ以下でもないので議論はしないのですが、
併せて弱点があって、どういう経路でその女性を見たのかというのが私が使っていたアプリでは表示されました。
例えばスラムダンクが好きだというサークルに入っててその女性を見つけるのは何の問題もないのですが、
巨乳がコンプレックスだというサークルに入った女性が巨乳をヒットさせる目的で検索した男を相手にするわけもなく
・余計な単語がヒットする
私が期待するキーワード:胸がFカップ、胸が大きいのがコンプレックスなど
実際にヒットするキーワード:鶏胸肉が好きです、期待に胸を膨らませなど
違うんだよーーーーーーーって1000回くらい思ってました。
恐らく運営の人もこいつ胸のことばっかり調べてるなって思ったに違いありませんw
というマッチングアプリに向けての不満があったので作ってみました。
2.技術力を誇示するため
わたしは現在のポジションに満足していますが、いま以上を常に狙っています。
わたしのなりたいエンジニア像として
”時給の高いエンジニア"
"手は出さずに口を出すエンジニア"
が私がなりたいエンジニア像です。
今はSierの一エンジニアとして働いています。このままだと上記のエンジニアにはなれそうもありません。
昨年転職活動をしましたが、結果は惨敗でした。
弱点を分析したところどうも技術的な質問をされたときにしどろもどろになっているので技術力の低さが露呈したのかもしません。
そういったところをカバーする。補って余るほどの技術力をつけたいと思って今回の企画を思いつきました。
結果として技術力は向上していません。
なぜならばChatGPTが全て私のやりたいことを叶えてくれたからです。
技術力ってはっきり言えば今の時代いらないと思ってます。
人間は生成AIには間違いなく勝てません。
今回の企画でよくあった
「〜したいんだけど〜ってできる」
という無邪気な対応について彼らは数秒で完成されたスクリプトを用意してくれます。
そんな相手と勝負をすることが間違ってます。
ですが、間違いなく証明できるものがあります。
”努力を形にする継続力”と”やりたいを実現できる発想力"
この力は大きく向上したと思ってます。
簡単な自己紹介
職種:クラウドエンジニア(AWS関連)
得意なこと:AWSの費用削減(前職、現職ともに大幅なコストカットを提案から実現までしてます)
年収:600万円程度
資格:適当にぼかしますが、AWSの最上位の資格を2つ持ってます。
TOEICも700点以上持ってました。(有効期限切れです)
希望するポジション
職種:クラウドエンジニア(AWS関連)、SRE
年収:700万円程度
規模:1000人以上の事業会社
備考:将棋が大好きなので、将棋部がある会社に行きたいです。
3. どうやって作ったのか
概要は、
①生成AIに巨乳と巨乳ではないの4000枚ずつ合計8000枚を生成
②その8000枚に対して胸の位置を特定する
③特定した胸を切り出す
④その胸に対して分類する
という内容です。
今回作った処理がこちらです。
1.入力画像(Stable Difusion)
いわば生成AIというやつです。
WebUI(GUI)からも簡単に作れますが、私は夜寝てる間や会社に行ってる時間も生成して欲しかったので、スクリプトでやりました。
WEB UI

↓
2.物体検出 (YOLO)
YOLOとはYOLO(ヨロ)は"You Only Live Once"の略で、「人生は一度きり」という意味の英語の若者言葉(ネットスラング)です。
という冗談はさておきって記載したかったのですが、本当にこういう意味みたいです。
日本語だと「一度見るだけでいい」と意味みたいで、人間のように一眼見ただけで物体検出ができる仕組みを指してます。
私はここのステップで少し心残りがあるのですが、妥協しました。
理想:顔や目や肩の位置から胸の位置を探り出す方法
現在:画像のこの位置を切り取る(X軸:〜Y軸〜)
理想はもちろん、可変するようにしたいのですが、これを利用すると、アホみたいに難しくかつ、全然胸ではないお尻や腕と体の境界線みたいなところを胸とするケースもあること
あと、学習の時間がめちゃくちゃ時間がかかるということです。
8000枚全て手作業でやるのは論外ですが、200枚ほどやるのも大変です。
なので、生成画像のスクリプトに大体同じ構造になるようにしました。
具体的には立っている状況で、こっちを見てみたいな感じです。
なので、横向きのグラビアポーズとか、前屈みのものは残念ながら判別できません。
あと胸の判断が現在大きくなっているところが弱点です。
↓
3.検出した領域をcrop
2で座標を求めたのでそれを切り取ったのが、ここのステップです。
↓
4.分類モデルで判定

枠が胸と判定したラインでbigやnormalは胸の大きさを表してます。
横に書いてる数値は、確信の値ですね。
50%巨乳と判断したのか100%に近い値で判断したのかで全然違いますよね!
図にするとこんな感じです。
┌───────────┐
│ 画像 │
└─────┬─────┘
↓
┌───────────┐
│ YOLO検出 │
│ (位置特定) │
└─────┬─────┘
↓
┌───────────┐
│ crop │
│ 部分切り出し │
└─────┬─────┘
↓
┌───────────┐
│ 分類モデル │
│ 判定 │
└───────────┘
4. 苦労したこと
1.胸と識別させること
最初は巨乳と貧乳をそれぞれ200枚ずつ入れて学習をさせテストケースを作って開発していました。
が、200枚だと胸というより、服装を学習してしまうみたいで
服の色が異なることや今まで学習させていない服が出てくると途端に成功率が下がります。
最初の結果は52%と適当に振り分けてるのとほぼ変わらない状態でした。
それを経て、2000枚ずつ巨乳と貧乳の水着姿をトレーニングさせ
洋服もさまざまな服装を巨乳と貧乳でテストしたことで精度が良くなりました。
2.巨乳の定義
巨乳の定義はそれぞれ実世界でもあると思います。
Eカップが巨乳と定義する人もいれば、Gカップと定義する人もいます。
もちろん、コンピューターは巨乳という定義が分からないので、学習させる必要があります。
最初はStable Diffusionで
huge breasts(巨大な胸)

でスクリプトを組んでやっていました。
が、これで学習をするとこの画像をIカップと仮に定義したときGカップが巨乳として判別されなくなります。
なので、huge brestsではなく、large brestsで対応することにしました。
気持ちGカップやHカップくらいかと思ってます。
3.自動位置検出の挫折
上述しましたが、自動位置検出は諦めて固定範囲(X軸とY軸を設けて範囲で取得)で胸を識別しています。
が、横向きや前屈みといったポーズの違いがくるとダメだったり、逆に写真から離れるとそれだけでだめになったりします。
5. 結果
Stable Diffusionで巨乳のスクリプトを入力して巨乳と判別した数
33件中29件 80-90%程度
Stable Diffusionで貧乳のスクリプトを入力して巨乳ではないと判別した数
6件中4件
巨乳グラビアアイドルの写真を使ってテスト
正答率:10件中7件
貧乳グラビアアイドルの写真を使ってのテスト
正答率:5件中3件
そこそこ高いです。後述しますが、今後精度にこだわることはほぼありません。
上げられるのではないかと思う施策はありますが、時間も労力もかかるのでしません。
※負け惜しみじゃないです。他にもしたいことがたくさんあるのでそちらに移行します。
6. 今後
70-80%程度で稼動するため、90%近くまで伸ばせそうな取組みはありますが、
絶対にしません。
理由はこのアプリが完成することは恐らくないからです。
タイトルにも記載しましたが。この取組みは正直倫理観のかけらもない施策です。
そのため商品化など火をみることはありません。
趣味のために70を90にするために20時間くらい使うのは理にかなっていないためです。
それをするくらいならTOEICの勉強をします。
機械学習での勉強にハマったので、資格を3末に受けるのでそれが終わったらまた違う機械学習ツールを作成予定です。
最後までご覧いただきありがとうございました。





